2014-07-19 49 views
0

我希望能夠點擊地圖上的建築物,並在點擊座標處獲取包含建築物的多邊形。在座標系下獲取建築物數據

我看着立交橋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,但我無法構建一個有意義的查詢。必要的查詢語法似乎不同。

手頭有更好的方法嗎?即使沒有立交橋,我也只是想看看它。

回答

2

你試圖實現的是「反向地理編碼」。爲了避免上述問題(AFAIK),通常的實現方法使用任意半徑,如果包含所需位置,則再次測試結果形狀。

+0

Thanks!我會嘗試以下方法:使用小半徑(50米)進行測試,如果使用大尺寸(500米)進行測試。經過幾次查詢後,我會重新評估一下,看看我是否可以通過使用不同的半徑來優化API數量與傳輸數據之間的比例。 –

2

在這個GitHub ticket中討論了類似的要求。目前,立交橋API不計算建築物的面積信息,is_in需要使用。但是,您可以設置自己的立交橋API實例,並調整區域創建規則以包含建築物。對於一個小區域來說,這在本地機器上應該是可行的。

另請檢查我提到的GitHub票券中的所有鏈接。它包含一些可能與您的問題相關的額外指針。

警告:在世界範圍內計算建築物區域的性能和空間影響尚不清楚,但尚未完全測試。

+0

感謝您的闡述!一開始我不想建立自己的實例。我已經描述了我在MaM的回答評論中首先要做的事情。 –

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