OSMnxについて

OSMnxについて

OSMは
Open street map の略

pythonで道路ネットワーク分析

も参考にする

先にインストール

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)

で表示はされる
ただし地図にはならない

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です