Python

[Python]OSMnxの環境構築と使い方まとめ

今回は、PythonライブラリであるOSMnxを紹介します。

OSMnxって何?っていう方も多いと思います。そんな初心者の方にも分かりやすく解説していきます。

この記事の信憑性としては、2つあります。

  1. 僕自身が研究で使っていたこと
  2. OSMnx 1.1.2__document

OSMnxとは

OSMnxは、OpenStreetMapから地理空間データをダウンロードし、実世界の道路網やその他の地理空間形状をモデル化、投影、視覚化、分析することができるPythonパッケージです。

一行のPythonコードで、歩きやすい、運転しやすい、あるいは自転車に乗りやすい都市ネットワークをダウンロードし、モデル化し、簡単に分析、視覚化することができます。

他のインフラストラクチャの種類、アメニティ/名所、建物のフットプリント、標高データ、道路の方位/方向、速度/移動時間についても同様に簡単にダウンロードし、作業することができます。”

https://osmnx.readthedocs.io/en/stable/

要するに、OpenStreetMapという誰でも使えるオープンなマップから、地図データをダウンロードし可視化するPythonのライブラリです。

また、A地点からB地点までの距離道路の種類などの情報もある優れたパッケージです。

この時点でいまいちピンとこない方も大丈夫です

可視化されているところを見ると分かるかと思います。

環境構築

今回はAnacondaを用いて環境構築を行います。

また、PythonライブラリであるNetworkXも必要となるので下記の記事を参照にインストールしましょう。

環境構築手順
  1. geopandasをインストール
  2. OSMnxをインストール

geopandasをインストールすることがポイントです。

先にインストールしないとOSMnxがインストールできず、僕自身かなり苦戦したので先にgeopandasをインストールして下さい。

geopandasをインストール

conda install -c conda-forge geopandas

OSMnxをインストール

conda install -c conda-forge osmnx

正常にインストールできたらjupyterを開いてインポートしてみましょう。

import osmnx as ox

エラーがでなければ、環境構築はこれで完了です。

OSMnxの使い方

ここからは、OSMnxを用いて道路ネットワークの可視化を行なっていきます。

今回はNetworkXというPythonのライブラリを用いてグラフの生成を行います。

このメソッドを用いて、地図情報をダウンロードします。

osmnx.graph.graph_from_point(center_point, dist=1000, dist_type='bbox', network_type='all_private', simplify=True, retain_all=False, truncate_by_edge=False, clean_periphery=True, custom_filter=None)

使い方は、中心の座標と中心からの距離を指定しダウンロードします。

座標の取得方法は、OpenStreetMap から取得したい地点を決定しアドレスを取得します。

OpenStreetMap

こんな感じでどこでもいいのでアドレスを取得しましょう。

地図の可視化

import osmnx as ox
import networkx as nx
G=nx.Graph()

#座標を指定し地図データをダウンロード
G = ox.graph_from_point(center_point=(34.6946,135.1958), network_type='drive', dist=1000)

#グラフを可視化する
ox.plot_graph(G,node_color='#87cefa',save=True,filepath='kobe.jpg')

dist=1000で中心から1000mの地点をダウンロードしています。

network_typeをdriveにすることで道路ネットワークを取得することができます。

ox.plot_graphでグラフを作成することができます。

分かりやすいようにnodeの色を変更して、以下のような実行結果になります。

範囲を広げすぎると計算時間がかなりかかります。

1000mだとさほど時間はかからないと思いますが、範囲を広げるとnode数が増え計算時間がかなりかかります。

経路を可視化する

ダイクストラ法などで求めた経路を可視化することも簡単できます。

#近くの位置座標を取得する
start_node = ox.get_nearest_node(G, (34.6911,135.1894))
goal_node = ox.get_nearest_node(G, (34.6983,135.2025 ))

# ダイクストラ法で経路を探索
route = nx.dijkstra_path(G, start_node, goal_node)

#経路を可視化する
ox.plot_graph_route(G, route,node_color='#87cefa', route_color='r', route_linewidth=4, route_alpha=0.5, orig_dest_size=100, ax=None, save=True,filepath='kobe_route.jpg')

ox.plot_graph_routeを使用すると経路を可視化することができます。

ox.get_nearest_nodeは、非推奨なメソッドのため警告が出てきます

公式ドキュメントにも、Do not use, deprecated.(非推奨)と記載があります。

ドキュメントに記載があるのに非推奨なのかよと思いましたが、あまり乱用すると良くないメソッドなのかもしれませんね。

まとめ

今回は、PythonライブラリであるOSMnxに使い方を紹介しました。

OSMnxを使用すると地理空間データを取得し可視化することができます。

僕自身、Pythonでこんなことまでできるのかと驚いたことの一つです。興味のある方は実装して頂きたいです。