0

我希望能够单击地图上的建筑物并在单击的坐标处获取包含建筑物的多边形。

我查看了overpass 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了,但我无法构造一个有意义的查询。必要的查询语法似乎不同。

手头有更好的方法吗?即使没有立交桥,我也只需要看看它。

4

3 回答 3

3

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

还请检查我提到的 GitHub 票证中的所有链接。它包括许多可能与您的问题相关的附加指针。

警告:在全球范围内计算建筑物面积的性能和空间影响是未知的,分别尚未完全测试。

于 2014-07-20T16:28:34.517 回答
3

有一个使用 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

于 2017-07-17T10:21:51.890 回答
2

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

于 2014-07-20T14:57:40.773 回答