繁体   English   中英

在 Openstreetmap 中计算每条道路的分数会产生意想不到的结果。 我错过了什么?

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM