我有一張倫敦步行路徑圖(由OSMNX轉換而來),包含667.588條邊,具有不同的highway
屬性(openstreetmap中的街道類型)。運行最短路徑算法非常慢(4秒)。爲了提高速度,我想在很大程度上減少邊緣的數量而不會丟失主要連接/城市結構,但不知道如何去做。有什麼建議麼?有沒有辦法將一些關閉節點分組到一個更重要的節點,從而減小大小?減少網絡中的openstreetmap圖形大小
回答
這取決於您正在使用的網絡類型(例如,散步,自行車,驅動器,drive_service,全部等)。網絡類型將是最小的並且優先考慮主要路線,但是以行人路徑和通道爲代價。
OSMnx還提供了simplify the graph's topology內置函數的功能。如果您還沒有做到這一點,那麼這樣做值得,因爲它有時可以將圖形大小減少90%,同時正確保留所有相交和死角節點以及邊緣幾何形狀。
我直接創建了「倫敦,英國」圖形。所以看起來網絡已經簡化了,不能再做了。 –
您可以從主圖G
提取與期望的公路類型的邊:
highways_to_keep = ['motorway', 'trunk', 'primary']
H = nx.MultiDiGraph()
for u,v,attr in G.edges(data=True):
if attr['highway'] in highways_to_keep:
H.add_edge(u,v,attr_dict=attr)
H.node[u] = G.node[u]
H.node[v] = G.node[v]
在這裏,我們首先初始化一個空MultiDiGraph
,這是OSMnx
使用的類型的圖形,然後用從數據填充主圖G
,如果'highway'
屬性在我們的列表highways_to_keep
。您可以在this OpenStreetMap頁面找到更多關於公路類型的信息。
我們的圖形是一個有效的NetworkX圖形,但在利用OSMnx功能之前還需要做一件事。如果執行G.graph
,則會看到包含crs
(座標參考系統)和其他一些內容的圖形屬性。你應該添加此信息到您的新創建的圖表:
H.graph = G.graph
這裏是H
情節,osmnx.plot_graph(H)
:
謝謝。我想使用步行地圖,這意味着其中大部分是住宅道路(沒有高速公路)。我應該只保留住宅街道嗎?他們仍然很多。 –
在這種情況下,最好完全依靠OSMnx提供的'walk'網絡類型。我的猜測是,你提到的4秒內不是用於計算從一個節點到另一個節點的最短路徑,它可能是一個節點到所有其他節點,或者甚至每個節點到每個其他節點。爲此,4秒完全沒問題。如果您不提供任何參數(例如nx.shortest_path(G)),它將計算每對節點之間的最短路徑。 NX。shortest_path(G,node1)計算節點1和所有其他節點之間的最短路徑,以及nx.shortest_path(G,node1,node2),僅在節點1和節點2之間計算最短路徑。 –
我的評論對你有幫助嗎?你不必這樣做,但對於花時間幫忙的人來說,這是一種很好的方式,或者如果答案是你正在尋找的東西,那麼接受答案/提高投票。 –
- 1. 增加/減少圖像大小,網站
- 2. 減少卷積神經網絡中的濾波器大小
- 3. 減少uclinux圖像大小
- 4. 減少位圖大小
- 5. 儘量減少網絡應用程序中使用的圖像大小
- 6. 減少C#中的位圖位大小#
- 7. 減少內存中的圖像大小
- 8. 如何減少從網絡攝像頭捕獲的圖像的大小
- 9. 減少TimePicker大小
- 10. 減少BitmapDrawable大小
- 11. 減少Caffe網絡模型
- 12. 如何減少Morris Donut圖形的字體大小?
- 13. 減少.EPS圖形的大小使用matplotlib
- 14. 減少圖像的文件大小
- 15. 減少散點圖的文件大小
- 16. 如何減少圖片的大小?
- 17. 減少Matplotlib底圖的大小
- 18. Docker - 減少拉的大小
- 19. 減少dll的大小vC++
- 20. 減少紋理的大小
- 21. Solr大小的減少
- 22. 減少listitem的大小?
- 23. 用Cocoa減少圖像字節大小
- 24. 減少圖像文件大小
- 25. 如何減少圖像文件大小
- 26. 調整大小後圖像的文件大小沒有減少
- 27. 如何減少瀏覽器大小時的圖像大小。
- 28. 減少HTML文件大小?
- 29. 減少Delphi安裝大小
- 30. 減少響應大小
歡迎StackOverflow上。你的問題有些寬泛。 SO用戶可以在您遇到特定類型的代碼或問題時提供幫助,而不是提供一般方法。你有什麼不同的公路屬性。過濾那些可能不那麼重要的想法會是一個想法嗎? –
主要是住宅小徑等。我正在尋找一種方法來分組一些節點,並只用一條邊切出節點。 –
你可以使用1-2個高速公路類別嗎?我懷疑你只想要「小徑」是對的嗎?對於只有一條邊的節點,可以刪除一級節點 –