【问题标题】:Getting building data at a coordinate在坐标处获取建筑数据
【发布时间】:2017-07-17 18:21:51
【问题描述】:

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

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

手头有更好的方法吗?就算没有立交桥,我也只是看看而已。

【问题讨论】:

    标签: openstreetmap overpass-api


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的说明!一开始我不想设置自己的实例。我已经在对 MaM 回答的评论中描述了我将首先做什么。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢!我将尝试以下方法:使用小半径 (50m) 进行测试,如果失败则使用大半径 (500m)。经过几次查询后,我将重新评估并查看是否可以通过使用不同的半径来找到 api 调用数与传输数据之间的良好比率。
      猜你喜欢
      • 2012-10-22
      • 2021-12-18
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多