OSMnxを用いたOpenStreetMap道路ネットワークデータの取得と可視化手法

GeoPackage(GPKG)はSQLiteデータベースを基盤とする地理空間データ保存形式で、ベクトルデータ、ラスタデータおよび関連する属性データの保存をサポートします。本記事では、この形式を使用したデータ処理について説明します。

GPKGフォーマットの利点

GeoPackageはSQLクエリとプログラミングインターフェースによる複雑なデータ処理と分析をサポートしています。これに対し、SHPファイルの拡張性は比較的限られており、主にGISソフトウェアの組み込み機能に依存します。SHPファイルを処理するためにカスタムスクリプトやプログラムを作成することも可能ですが、通常は高度なプログラミングスキルとGISデータ構造に関する深い理解が必要です。

大規模データを処理する際、GeoPackageは通常、より高いデータ処理効率を示します。これはGeoPackageが空間インデックスやデータ圧縮などの高度な機能をサポートしているため、データ検索と転送時間を大幅に削減できます。

GeoPackageのサポートが良好なソフトウェアにはQGISやArcGIS Proなどがあります。ArcGISは10.8バージョン以降の更新が停止されているため、新しいデータ形式のサポートが不十分です。そのため、本記事ではArcGIS Pro 3.1.5バージョンをダウンロードしてデータ処理を行います。

必要なPythonパッケージのインストール

まず、osmnxやnetworkxなどの必要なパッケージをインストールします。

# OSMnxパッケージのインストール(OpenStreetMapから空間データをダウンロードしネットワークグラフを構築)
pip install osmnx

# NetworkXパッケージのインストール(複雑なネットワーク構造の作成と操作)
pip install networkx

# Foliumパッケージのインストール(インタラクティブな地図作成)
pip install folium

# Matplotlibパッケージのインストール(出版品質の2Dグラフ生成)
pip install matplotlib

# Mapclassifyパッケージのインストール(地図作成におけるデータ分類)
pip install mapclassify

道路ネットワークの可視化

最初に基本的な可視化を行います。たった3行のコードで実現できます。

# OSMnxライブラリのインポート(OpenStreetMapデータ処理用)
import osmnx as ox

# 東京都の道路ネットワークデータをダウンロード(車両通行可能な道路)
road_network = ox.graph_from_place("Tokyo, Japan", network_type="drive")

# ダウンロードした道路ネットワークの可視化
figure, axis = ox.plot_graph(road_network)

GPKG形式での道路ネットワークデータダウンロード

次に、OpenStreetMapの道路ネットワークデータをGPKG形式で保存します。ここでは東京都を例にします。

import osmnx as ox

# 対象地域を東京都に設定
target_location = "Tokyo, Japan"

# 東京都の道路ネットワークグラフを取得
street_graph = ox.graph_from_place(target_location)

# GeoPackageファイルとして保存
ox.save_graph_geopackage(street_graph, filepath="C:/projects/Tokyo_roads.gpkg")

これによりTokyo_roads.gpkgファイルが生成されます。このファイルにはノードデータレイヤーと道路ネットワークデータレイヤーが含まれており、ArcGIS Proにインポートすると以下のように表示されます。

属性テーブルには道路ID、名称、車線数、道路種別などのデータタグが含まれていますが、情報が不完全な場合もあります。また、ほとんどの道路ネットワークは双方向で表現されているため、単一線に変換する場合は別途処理が必要です。

複数地域の道路ネットワーク一括ダウンロード

複数の地域の道路ネットワークを一括でダウンロードする方法を紹介します。

import osmnx as ox

# 対象地域リストの定義
locations = ["Shibuya, Tokyo, Japan", "Shinjuku, Tokyo, Japan", "Ginza, Tokyo, Japan"]

# 各地域について道路ネットワークを取得し保存
for location in locations:
    # 道路ネットワークグラフを取得
    network_graph = ox.graph_from_place(location, network_type='drive')
    
    # ファイル名からスペースとカンマを除去しアンダースコアに置換
    safe_filename = location.replace(' ', '_').replace(',', '')
    output_path = f"C:/projects/{safe_filename}_roads.gpkg"
    
    # GeoPackageファイルとして保存
    ox.save_graph_geopackage(network_graph, filepath=output_path)
    
    # 保存したファイル名を出力
    print(f"保存完了: {output_path}")

OSM/SVG形式での保存

必要に応じて、道路ネットワークをOSMまたはSVG形式で保存することも可能です。

SVG形式で保存する場合:

import osmnx as ox

# 対象地域を東京都に設定
location_name = "Tokyo, Japan"

# 東京都の道路ネットワークグラフを取得
city_network = ox.graph_from_place(location_name)

# SVGファイルとして保存
figure, axis = ox.plot_graph(city_network, show=False, save=True, close=True, filepath="C:/projects/tokyo_roads.svg")

OSM形式で保存する場合:

import osmnx as ox

# OSMnxの設定を構成
ox.config(all_oneway=True, log_console=True)

# 東京都の車両通行可能な道路ネットワークを取得
road_system = ox.graph_from_place("Tokyo, Japan", network_type="drive", simplify=False)

# OSMファイルとして保存
ox.save_graph_xml(road_system, filepath="C:/projects/tokyo_network.osm")

タグ: OSMnx OpenStreetMap Python 地理空間データ 道路ネットワーク

6月16日 16:26 投稿