OSMnxについて
OSMは
Open street map の略
も参考にする
先にインストール
pip install osmnx
でインストールできる
import folium import osmnx as ox import matplotlib.pyplot as plt from shapely.geometry import Point,LineString,Polygon
で必要なものをインポート
まずは道路データの取得
今回は取得するのは道路なので drive にする
歩道なら walkなどを指定
Queryでどこの道路データを取るか指定
今回は
日本の東京都の墨田区にするので
query ="Sumidaku,Tokyo,Japan" G = ox.graph_from_place(query,network_type="drive")
とする
print(G)で表示すると
MultiDiGraph with 3000 nodes and 7834 edges
となる
Nodes は交差点
Edges は道路の数
みたいな感じ
これを foliumで表示する
しかし
ox.plot_graph_folium(G)
だと
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[9], line 1 ----> 1 ox.plot_graph_folium(G) AttributeError: module 'osmnx' has no attribute 'plot_graph_folium'
✅ 背景
* 以前の OSMnx (v1.x くらいまで) には ox.plot_graph_folium(G) がありました。
* しかし OSMnx 2.0 以降では Folium 連携機能は 専用モジュールに移動しています。
from osmnx import folium as ox_folium
を追加
しかしエラーになる
では
ox.plot.plot_graph_folium
を使っている
ちなみにドキュメントは
https://osmnx.readthedocs.io/en/stable/index.html
調べてもバージョンは2.06で最新
GPTは2.1が最新と言っているが実際は2.06が最新
https://speakerdeck.com/mopinfish/osmnxniyorujie-lu-gou-zao-nofen-xi-toke-shi-hua?slide=20
を参考に行う
pip install contextily
でインストール
📌 まとめ
* contextily = 背景地図を GeoPandas/Matplotlib に簡単に追加するモジュール
* OpenStreetMap などのタイルを呼び出せる
* EPSG:3857(Web地図座標系)に自動変換してくれる
https://qiita.com/yutowac/items/b8e3d7653d3dcad16faf
の場合使っているバージョンが古い可能性がある
import osmnx as ox
import matplotlib.pyplot as plt
import contextily as cx
# 道路ネットワークの取得
place = "Higashi-ku, Sapporo, Hokkaido, Japan"
G = ox.graph_from_place(place, network_type="drive")
# グラフを GeoDataFrame に変換
nodes, edges = ox.graph_to_gdfs(G)
# 地図の作成
fig, ax = plt.subplots(figsize=(15, 15))
# エッジの描画
edges.plot(ax=ax, linewidth=0.5, edgecolor="dimgray")
# 背景地図の追加(OpenStreetMap)
cx.add_basemap(ax, crs=edges.crs.to_string(),
source=cx.providers.OpenStreetMap.Mapnik)
# 地図の表示
plt.show()
で表示できたので
これを元にGPTでコード生成
import osmnx as ox
import matplotlib.pyplot as plt
import contextily as cx
# 墨田区の道路ネットワークを取得
query = "Sumida-ku, Tokyo, Japan"
G = ox.graph_from_place(query, network_type="drive")
# グラフを GeoDataFrame に変換
nodes, edges = ox.graph_to_gdfs(G)
# 描画
fig, ax = plt.subplots(figsize=(12, 12))
# 道路(edges)を描く
edges.plot(ax=ax, linewidth=0.7, edgecolor="blue")
# 背景地図を追加(OpenStreetMap)
cx.add_basemap(ax,
crs=edges.crs.to_string(),
source=cx.providers.OpenStreetMap.Mapnik)
# 表示
plt.show()
これで地図と情報が表示できた
あとは別の方法として
交差点を赤
道路を青
背景を白
で表示する
ox.plot_graph(G,bgcolor="white",node_color="red",edge_color="blue",node_size=2)
で表示はされる
ただし地図にはならない