2013-12-19 45 views
0

我使用Graphhopper作爲我的Android項目的路由服務,我想知道如何從* .osm.pbf格式中提取街道數據(作爲多邊形)?在Openstreetmap中提取街道作爲多邊形

後來我想使用該數據,以便我可以檢測用戶是否在該街道的邊界內。

編輯

我用反滲透因爲它是在this答案(選擇高速公路),但是當我嘗試探討提取後的XML我還是不明白引用我怎樣才能得到一個特定街道因爲還剩下一些其他物體(如房屋,巴士站)。

+0

你試圖得到什麼樣的多邊形?只是(打開的)線路或緩衝區(這裏是:道路寬度)? – MaM

+0

我真的不知道在這一點上。因爲在GPS數據和Openstreetmap數據中總會有一些不足之處,所以我認爲這是一個道路寬度的人。雖然我很想知道如何提取他們兩個 – IgnasK

回答

0

街道數據存儲在GraphHopper中。您可以遍歷整個圖表,例如通過延長XFirstSearch然後做checkAdjacent:

boolean checkAdjacent(EdgeIterator iter) { 
    PointList pl = iter.fetchGeometry(3); 
    String name = iter.getName(); 
} 

如果你想從一個位置的「籬笆使用情況」的邊緣,你可以看看到LocationIndexTree。

一些澄清:

路由圖通常不包含空間信息

的路由圖本身並不需要這些數據,但仍需要這些數據來顯示路線等

有沒有辦法在計算過程中給節點添加權重

正如mailing list所述。

2

嗯,我想這裏有一些誤會,所以我走線槽你的願望一步一步:

  1. OSM街道數據 螞蚱的用途是什麼不是街頭polygones(封閉圖形),也不簡單街道譜線形狀。它處理純OSM數據並創建所謂的路由圖表示。以下是有關導入過程本身的幾個信息:https://github.com/graphhopper/graphhopper/wiki/World-Wide-Road-Network

  2. 用戶位置的道路
    這就是所謂的反向地理編碼和對索引結構和型號的不同要求。 OSM提供Nominatim作爲解決方案來查詢(lat,lon) - > OSM對象。您的空間緩衝區想法甚至可能,但會產生大量開銷(此處爲內存),以預處理您的道路網絡或根據需要爲特定區域執行此操作。

+0

嗯,我正在用相對較小的地圖 - 一個城市。好吧,所以我實際上無法用graphhopper提取街道。Longshot,抱歉如果延遲 - 是否有一種方法(工具)將我從Graphhopper獲得的圖形轉換爲多邊形(一個或多個),以便我可以嘗試確定用戶是否在街道內/附近? – IgnasK

+0

AFAIK沒有Graphhopper導出。路由圖通常不包含空間信息,因爲它是一個圖,距離等是沿圖邊的權重。 你可以使用原始的OSM數據,例如QGIS做一個緩衝區計算,但我真的推薦一個專業的地理編碼解決方案,以避免編碼和出錯; – MaM

+0

有沒有一種方法可以在計算過程中爲節點增加權重if ie我想模擬交通堵塞還是封閉的道路? 我的最終目標是模擬動態路由(即使它遠離最佳方式),不僅考慮道路長度,還要考慮街道時間表,以便展示Dijkstra和A *如何表現行爲條件。 – IgnasK

相關問題