鐵人賽2019 Day19 OSMnx取得OpenStreetMap資料

  1. 1. 安裝OSMnx
  2. 2. 取得路網
  3. 3. 輸出路網

昨天簡單介紹了networkX,我們可以透過把路網polyline轉為node,edge的graph(s2g)來做graph相關操作,例如最短路徑等等。

OSMnx也是相關的應用,OSMnx結合了Overpass API,讓開發者可以在python中快速取得OpenStreetMap的資料,在路網圖層中,其與networkX結合可進行一些grpah的分析操作。
ps.除了路網外,OSMnx也可取得其他OpenStreetMap的圖層喔

大綱:

  • 安裝OSMnx
  • 取得路網
  • 輸出路網

安裝OSMnx

OSMnx建議使用conda安裝

1
conda install -c conda-forge osmnx

如果使用pip安裝目前可能會遇到一些問題,
建議開一個乾淨的的virtual environment再來安裝

取得路網

OSMnx取得OSM的來源是Overpass API,得到資料後會對OSM資料做處理,變成node+edge的graph
給定一個坐標(25.0528108,121.6137452)後,設定一個範圍(distance=750):

1
2
3
import osmnx as ox
G = ox.graph_from_point((25.0528108,121.6137452), distance=750, network_type='drive')
ox.plot_graph(G)

https://ithelp.ithome.com.tw/upload/images/20181103/20107816aJc3ZQkTBw.png

osmnx還有其他query的方法,包括輸入city name, bounding box及address等等,

列出edge,並是以坐標表示:

1
G.edges

https://ithelp.ithome.com.tw/upload/images/20181103/20107816wtOK23KcsU.png

當然也可以看到node的列表

1
G.nodes

https://ithelp.ithome.com.tw/upload/images/20181103/20107816I8TMJ7RT7D.png

輸出路網

osmnx可以把組成的graph成果輸出,graph的組成是edge跟node

把edge跟node輸出可做其他用途

1
2
G_proj = ox.project_gdf(G)
ox.save_graph_shapefile(G_projected, filename='network-shape')

上面的輸出為edge以及node的shp
另一種可行的輸出格式GraphML()

1
ox.save_graphml(G_projected, filename='network.graphml')

有關GraphML
The GraphML File Format

OSMnx很方便地讓我們取得路網資料(以及其他OpenStreetMap資料),
對於GIS分析人員來說,不怕手邊沒資料啦!