我希望能够点击地图上的建筑物,并在点击的坐标处获得构成建筑物的多边形。
我看着立交桥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
,但我无法构建有意义的查询。必要的查询语法似乎有所不同。
手头有更好的方法吗?即使没有立交桥,我也要调查一下。
答案 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