OSMnx で京都の地図を描いてみる

以下の記事を読んで使ってみたくなった。

gigazine.net

ソースはこちら。

github.com

というわけで、

import osmnx as ox
G = ox.graph_from_place('Kyoto, Japan', network_type='drive')
ox.plot_graph(ox.project_graph(G))

というようなコードを手持ちの Mac 上の Anaconda Python 環境で試そうとしたけど、

ImportError: dlopen(/Users/xxx/anaconda3/lib/python3.6/site-packages/fiona/ogrext.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libuuid.1.dylib

などと出て、

brew install ossp-uuid
ln -s /usr/local/lib/libuuid.dylib /usr/local/lib/libuuid.1.dylib

などとしてみたけど、次は

ImportError: dlopen(/Users/xxx/anaconda3/lib/python3.6/site-packages/fiona/ogrext.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libkea.1.4.7.dylib
  Referenced from: /Users/xxx/anaconda3/lib/libgdal.20.dylib
  Reason: image not found

などと出て、キリがない。専用の仮想環境をつくったほうが幸せになれそう。

OSMnx documentation — OSMnx 0.8.1 documentation

に従うだけだが、

conda create --override-channels -c conda-forge -n OSMNX python=3 osmnx
source activate OSMNX

としたら上記の Python コードが動いた。けどネットワーク構造を計算する処理が重いのか、全然終わらない。

というわけで、以下のAPIを眺めて、京都御所から範囲を広げていく作戦。

https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.core.graph_from_place

import osmnx as ox
G = ox.graph_from_point(center_point=(35.02514, 135.76239), network_type='drive', distance=1000)
ox.plot_graph(ox.project_graph(G))

distance が中心からの距離 (m)。100とかだと御所なので道が見つからずエラーになった。

distance=1000 なら手持ちの MBA mid 2012 でも1分以内に処理が終わる。

f:id:pn11:20180721111857p:plain
distance = 1000

f:id:pn11:20180721111906p:plain
distance = 2000

鴨川とか、二条城とかが分かる。

f:id:pn11:20180721112151p:plain
distance = 3000

御所のまわりは規則的だけど遠くなるにつれて細かすぎてごちゃごちゃしている。

f:id:pn11:20180721113654p:plain
distance = 10000

distance=10000は15分くらいでなんとか処理できた。

いろいろ解析もしてみたいけどそのうち。