[英]Calculating a score for each road in Openstreetmap produces unexpected result. What am I missing?
我有一个安装了 postgis 扩展的 Postgres 数据库,并填充了 open street map 数据。
使用以下 SQL 语句:
SELECT
l.osm_id,
sum(
st_area(st_intersection(ST_Buffer(l.way, 30), p.way))
/
st_area(ST_Buffer(l.way, 30))
) as green_fraction
FROM planet_osm_line AS l
INNER JOIN planet_osm_polygon AS p ON ST_Intersects(l.way, ST_Buffer(p.way,30))
WHERE p.natural in ('water') or p.landuse in ('forest') GROUP BY l.osm_id;
我计算了一个“绿色”分数。
我的目标是为每个 osm_id 创建一个“绿色”分数。
意思是; 有多少道路靠近水域、福雷斯特或类似的地方。
例如,被公园包围的道路得分为 1。
一条仅在短时间内沿河而行的道路的得分为例如 0.4
或者我的期望也是如此。
但是通过检查这个计算的结果,我有时会得到值
212.11701212511463 用于 OSM ID -647522 的道路
82 表示 osm ID -6497265 的道路
我也得到了 0 到 1 之间的值,但我不明白为什么我也会得到这么大的值。
我错过了什么?
我期望值介于 1 和 0 之间。
使用必须填充的自定义唯一 ID,查询还可以合并最终重叠的多边形:
SELECT
l.uid,
st_area(
ST_UNION(
st_intersection(ST_Buffer(l.way, 30), p.way))
) / st_area(ST_Buffer(l.way, 30)) as green_fraction
FROM planet_osm_line AS l
INNER JOIN planet_osm_polygon AS p
ON st_dwithin(l.way, p.way,30)
WHERE p.natural in ('water') or p.landuse in ('forest')
GROUP BY l.uid;
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.