所需的結果:如何從.osm文件建立在數據庫中的「道路」圖表
具有兩個表的數據庫,「邊緣」及「節點」,其可被用於產生的曲線圖代表某個地區(如城市)中所有可行駛的公路(高速公路)。數據集從.osm文件中解析。
背景:
我要爲我的第二次嘗試用兩個表創建一個數據庫 - 節點,可以用來做就可以了不同的最短路徑計算的邊緣。
首先我試圖手動提取不同數據到數據庫中(PHP腳本):
- 解析從.osm文件中的所有節點爲「節點」表
- 所有邊緣解析成「邊「表(即解析方式並從這些邊生成邊(由起始節點和目標節點組成),同時將標記添加到邊上;
- 刪除所有包含黑名單標記的邊緣(非高速公路)從邊緣表中刪除;
- 刪除節點表中不存在於邊緣表中的所有節點。
問題是這個序列是非常不可靠的,它只能在小數據集上工作,如數千個節點,但不是數百萬個。
問題:
用由數以百萬計的節點和邊,道路提取(基於特定標籤濾波器胃內產生邊緣)是極其緩慢的數據庫。
可能的解決辦法:
什麼,我要做到這一點時間:
- 設立的PostgreSQL RDBMS;
- 使用OSM預製腳本解析.osm文件以獲取完整的節點,方式和關係表;
- 將具有特定標籤(例如'高速公路')的所有邊緣從路表中提取到新的「邊」表中;
- 將存在於邊緣表中的所有節點提取到新的graph_nodes表中;
- 之後,我可能會從'邊緣'和'graph_nodes'表格生成'道路'圖。
問:
如何正確地解析.osm文件導入到數據庫中有「邊緣」和「節點」表的結果呢?
如何從.osm中只提取可驅動的道路到數據庫中?
我該如何快速執行(我的意思是幾個小時的腳本運行數百萬個節點和邊緣表,而不是幾周)?
我是否應該考慮關係?
如果是,我應該怎麼做?
爲什麼要補充的邊緣,如果你已經知道他們被列入黑名單?在這種情況下,無需添加它們...... – 2011-04-26 12:28:09
您可以在姊妹網站http://gis.stackexchange.com/或OSM的http://help.openstreetmap.org/ – 2011-04-26 12:28:51
上獲得更好的答案Rowland ,我可以將這個問題重新發布到gis.stackexchange.com嗎?你知道是否有任何規則? – Kirill 2011-04-29 08:43:53