OSMnxを用いて,オープンストリートマップから道路ネットワークデータを取得しよう.


道路ネットワークデータについて

道路ネットワークデータは、node(点)部分とそのnodeとnodeを結んだedge(線)で構成されています。
いわゆる「グラフ理論」と呼ばれる分野です。

GPSの走行データについては、専門用語で「プローブデータ」と呼ばれています。なのでこのあたりの領域を調べる際には、
"道路ネットワーク" "プローブデータ" "GPS" などを組み合せて探してみましょう。

OSMnxについて

南カリフォルニア大学の都市計画学部の教授である Geoff Boeingさんが提供してくれているパッケージです.

OSMnx: Python for Street Networks

以下の記事でOSMnxを用いた道路ネットワークの可視化が取り上げられています.

Gigazin:世界各都市の道路が向いている方角が可視化されたグラフを比べてみると何がわかるのか?

API経由で道路ネットワークデータを取得しよう。

事前にパッケージをインストールしておきます。

brew install spatialindex
pip3 install osmnx 
pip3 install pandas
pip3 install csv
makeData.py
import pandas as pd
import osmnx as ox
import csv

def DriveWay(PREFECTURE):
        # 道路ネットワークデータを取得。
        G = ox.graph_from_place(f'{PREFECTURE}, Japan', network_type='drive')

        # グラフデータからDataFrame形式に変更。
        # nodeの情報
        node=pd.DataFrame(ox.save_load.graph_to_gdfs(G, nodes=True, edges=True, node_geometry=True, fill_edge_geometry=True)[0])
        # edgeの情報
        edge=pd.DataFrame(ox.save_load.graph_to_gdfs(G, nodes=True, edges=True, node_geometry=True, fill_edge_geometry=True)[1])
        # csv形式で出力。
        node.to_csv(f'out/DriveWay_Node_{PREFECTURE}.csv')
        edge.to_csv(f'out/DriveWay_Edge_{PREFECTURE}.csv')

        # 道路ネットワークを可視化
        ox.plot_graph(G)

def main():
        PRE_LIST=["TOKYO","CHIBA","KANAGAWA"]
        for PREFECTURE in PRE_LIST:
                print(f'{PREFECTURE} IN PROGRESS')
                DriveWay(PREFECTURE)

if __name__ == "__main__":
  main()

出力結果(横浜市)

いい感じに横浜港エリアの道路ネットワークが見えてきました。
これが無料ってすごいですね。

ぜひOSMnx使ってみてください。

今回の記事に興味を持ってくれたかたは↓↓↓もチェックしてみてください!
OSMnxで取得した道路ネットワークデータから極座標グラフを作ろう!