在坐标处建立数据

时间:2014-07-19 16:41:32

标签: openstreetmap overpass-api

我希望能够点击地图上的建筑物,并在点击的坐标处获得构成建筑物的多边形。

我看着立交桥api并尝试了以下内容:

<query type="way">
  <around lat="51.0566036" lon="13.7181033" radius="30"/>
  <has-kv k="building"/>
</query>
<union>
  <item/>
  <recurse type="down"/>
</union>
<print/>

如果我选择一个大的radius我会得到太多建筑物。如果radius太小,我就不会得到任何建筑物。使用bbox-query没有帮助。

我也试过coord-query,但我无法构建有意义的查询。必要的查询语法似乎有所不同。

手头有更好的方法吗?即使没有立交桥,我也要调查一下。

3 个答案:

答案 0 :(得分:3)

GitHub ticket中讨论了类似的要求。目前,Overpass API不会计算建筑物的区域信息,这是is_in工作所必需的。但是,您可以设置自己的Overpass API实例并调整区域创建规则以包含建筑物。对于一个小区域,这应该在您的本地机器上可行。

请同时检查我提到的GitHub票证中的所有链接。它包含一些可能与您的问题相关的其他指针。

警告:在世界范围内计算建筑物面积的性能和空间影响尚不清楚,尚未完全测试。

答案 1 :(得分:2)

您尝试实现的是“反向地理编码”。为了避免上述问题(AFAIK),通常的实现使用一个任意半径,然后如果它们包含所需位置,则再次测试结果形状。

答案 2 :(得分:0)

有一个使用gis_geometrics [1]和overpy的Python解决方案。这个Python程序在LAT,LON找到了这个建筑。将它放在与gis_geometrics.py相同的目录中:

import overpy
from gis_geometrics import OSM_Polygon, Overpass

api = overpy.Overpass()
building = OSM_Polygon.getPolygonByCoords(api, LAT, LON)
if building is None: print("No building found.")
else: print(building.wayId)

使用id方式,您可以发出立交桥请求以查找多边形坐标。

[1] https://github.com/timojuez/home/blob/master/mylib/gis_geometrics.py