地図データや道路ネットワークの解析に興味があるPython開発者向けにこの記事では、OpenStreetMapとPythonライブラリOSMnxおよびGeoPandasを使って、地域の道路データを取得し、そのデータを解析する方法を紹介します。具体的には、東京都渋谷区の道路データを例に、道路の形状や特性に関する情報を取得し、その意味や利用方法を説明します。
インストール
まず、必要なライブラリをインストールしてください。
pip install osmnx geopandas
コード
次に、コードを実行します。
import osmnx as ox
import geopandas as gpd
# エリアを指定(例: 東京都渋谷区)
place_name = "Shibuya, Tokyo, Japan"
# OpenStreetMapから指定したエリアの道路データを取得
graph = ox.graph_from_place(place_name, network_type='all')
# 道路データをGeoDataFrameに変換
gdf_edges = ox.graph_to_gdfs(graph, nodes=False, edges=True)
# 道路データを表示
print(gdf_edges)
このコードは、指定したエリア(例:東京都渋谷区)の道路データを取得し、GeoDataFrameに変換して表示します。
結果
結果は以下になります。
u | v | key | osmid | oneway | … | width | est_width |
---|---|---|---|---|---|---|---|
158029937 | 1529083587 | 0 | [41521096, 15772071] | True | … | NaN | NaN |
158030002 | 1524810020 | 0 | 890756978 | False | … | NaN | NaN |
158030002 | 1529083532 | 0 | 944268181 | True | … | NaN | NaN |
158030029 | 2393500043 | 0 | 23179562 | False | … | NaN | NaN |
158030029 | 1685221014 | 0 | 41857237 | False | … | NaN | NaN |
… | … | … | … | … | … | … | … |
10808053789 | 6389667500 | 0 | 1162137296 | False | … | NaN | NaN |
10808065407 | 1522593411 | 0 | 138875595 | False | … | NaN | NaN |
10808065407 | 7942784788 | 0 | 1162137304 | False | … | NaN | NaN |
10808065407 | 1522593444 | 0 | 138875595 | False | … | NaN | NaN |
10808065407 | 7905491217 | 0 | 1162137304 | False | … | NaN | NaN |
この表には、24165行の道路データが含まれており、16列の属性情報があります。各行は、道路ネットワーク上の1つのエッジ(道路セグメント)を表し、各列はそのエッジに関連する情報(osmid, oneway, widthなど)を示します。
属性の説明
osmid
: OpenStreetMapで道路セグメントに割り当てられた一意のID。複数のIDがある場合は、それらがリスト形式で表示されます。oneway
: 一方通行の道路かどうかを示すブール値(TrueまたはFalse)。lanes
: その道路の車線数。name
: 道路の名前。highway
: 道路のタイプ(例:主要道路、歩行者道路など)。maxspeed
: その道路の最高速度制限(km/h)。length
: その道路セグメントの長さ(メートル)。geometry
: 道路の形状を表すshapely.geometry
オブジェクト。bridge
: その道路が橋かどうかを示すブール値(TrueまたはFalse)。tunnel
: その道路がトンネルかどうかを示すブール値(TrueまたはFalse)。ref
: 国際道路網における道路の参照番号。access
: その道路へのアクセス制限(例:歩行者専用、自転車専用など)。junction
: 交差点のタイプ(例:ラウンドアバウトなど)。service
: サービス道路のタイプ(例:駐車場へのアクセス道路など)。width
: その道路の幅(メートル)。est_width
: 道路の推定幅(メートル)。
u
, v
, key
は、GeoDataFrameのマルチインデックス(MultiIndex)を構成するラベルです。これらのインデックスは、道路ネットワークのエッジ(道路セグメント)を一意に識別するために使用されます。
u
: エッジの始点ノード(交差点や分岐点)の一意のID。v
: エッジの終点ノード(交差点や分岐点)の一意のID。key
: 同じ始点ノードu
と終点ノードv
を持つ複数のエッジを区別するための追加のインデックス。通常、単一の始点ノードと終点ノードの間に複数のエッジは存在しないため、key
の値は通常0です。ただし、例外的に同じ始点ノードと終点ノードの間に複数のエッジが存在する場合、key
は1, 2, 3, …と増加していきます。
u
, v
, key
の組み合わせによって、道路ネットワーク上の各エッジ(道路セグメント)が一意に識別されます。これにより、エッジに関連する属性(列)を効率的に検索、フィルタリング、操作することができます。