昨天簡單介紹了networkX
,我們可以透過把路網polyline轉為node,edge的graph(s2g
)來做graph相關操作,例如最短路徑等等。
OSMnx
也是相關的應用,OSMnx結合了Overpass API
,讓開發者可以在python中快速取得OpenStreetMap的資料,在路網圖層中,其與networkX
結合可進行一些grpah的分析操作。
ps.除了路網外,OSMnx也可取得其他OpenStreetMap的圖層喔
大綱:
OSMnx建議使用conda安裝
conda install -c conda-forge osmnx
如果使用pip安裝目前可能會遇到一些問題,
建議開一個乾淨的的virtual environment再來安裝
OSMnx取得OSM的來源是Overpass API
,得到資料後會對OSM資料做處理,變成node+edge的graph
給定一個坐標(25.0528108,121.6137452)
後,設定一個範圍(distance=750)
:
import osmnx as ox
G = ox.graph_from_point((25.0528108,121.6137452), distance=750, network_type='drive')
ox.plot_graph(G)
osmnx還有其他query的方法,包括輸入city name, bounding box及address等等,
列出edge,並是以坐標表示:
G.edges
當然也可以看到node的列表
G.nodes
osmnx可以把組成的graph成果輸出,graph的組成是edge跟node
把edge跟node輸出可做其他用途
G_proj = ox.project_gdf(G)
ox.save_graph_shapefile(G_projected, filename='network-shape')
上面的輸出為edge以及node的shp
另一種可行的輸出格式GraphML()
ox.save_graphml(G_projected, filename='network.graphml')
有關GraphML
The GraphML File Format
OSMnx很方便地讓我們取得路網資料(以及其他OpenStreetMap資料),
對於GIS分析人員來說,不怕手邊沒資料啦!