OSMnxを使って道路ネットワークを取得してみる


OSMnxはOpenStreetMap のデータを取得できるPythonライブラリーです。

ここでは、Windows上のAnacondaで使ってみます。

 


最新のAnacondaなどではosmnxのimportでエラーになる場合があります(モジュールのバージョン違い?)。

動作が確認できているのはWindows 10 + Anaconda3-5.3.1-Windows-x86_64(64-bit)です。

Anacondaのインストーラーはここなどを参照

インストール自体に特に難しいところはありません。

インストール後、Anaconda Prompt(Anaconda3)を起動し、以下のコードを実行。

conda-forgeを高優先度にする

 

仮想環境にOSMnxをインストール。

strict-channel-priorityという引数が分かりません…..とかいうエラーが出た場合は

>conda create -n ox -c conda-forge osmnx

 

 

環境をアクティベートしてosmnxを使用できるようにして、Pythonコンソールを開きます。

 


OSMnxを使って道路ネットワーク情報を取得してみます。

例えば….

「大阪府のすべての道路に関する情報を取得してShape形式でデータをダウンロード」

ちなみに以下の環境で実行時間は5時間ほどでした。

Windows 10 64bit、Intel Core i3  3.1GHz  RAMー>4GB

Shapeファイルは格納先を指定しない場合はdataというフォルダーが作成されその中にedgesnodesの2つのカテゴリで保存されます。

必要なのはedgesです。

QGISで読み込むとこんな感じ。

属性テーブルです。

 

5時間はあんまりなので、対象を絞ってみます。

「吹田市の私道でないすべての道路や小道を取得してShape形式でデータをダウンロード」

これなら、2~3分で実行終了しました。

 

 

ちなみにnetwork_typeは以下のようなものがあります。

  • drive – 運転可能な公道を取得する(ただし、整備道路は取得しない)
  • drive_service – 整備道路を含む運転可能な道路を取得する
  • walk – 歩行者が使用できるすべての道路と小道を取得する(このネットワークタイプは一方通行は無視します)
  • bike – サイクリストが使用できるすべての道路と小道を取得する
  • all – すべての私道でないOSMの道路と小道をダウンロードする
  • all_private – 私道を含むすべてのOSMの道路と小道をダウンロードする

 

こんな感じです。

 

サンプル

 

最短経路探索してみます。

こんな感じ。

万博記念公園の迎賓館からパナスタへ向かう最短経路です。

 


Shape形式ではなくCSV形式でデータを取得してみます。

実行時間は1時間半くらいでした。

 

 

サンプル

 

edgeはこんなデータです。

QGISで読み込む場合はデリミテッドテキスト。

サンプルは66万行以上あるので、結構時間がかかります。

 

 

 


別々に取得した隣接する2つの地域のネットワークは、当然のことながら、連続していません。

結合する2つのノードを探して、接続するエッジ(リンクとも言う)を新しく作成すれば、2つの地域のネットワークは連続します。

やり方は?

これを実行できるアルゴリズムを探すか作る、あるいはツールやライブラリを探すか作る。

ArcGISなら簡単にできるのかな?

工事中


graph_from_place()では、場所の指定は住所の英語表現の順に記述します。

例えば大阪府は’Osaka,Japan’ですが、もっと範囲を絞って「淀川区」のような場合は’Yodogawa-ku,Osaka,Osaka,Japan’になります。

 

行政区をまたぐような場合は、Place指定ではなく範囲を指定する方法もあります。

バウンディングボックスなら

graph_from_bbox(north,south,east,west,network_type=’all’)

バウンディングボックスの四つの値はOpenStreetMapにアクセスしてエクスポートをクリックすると画面の領域の範囲で表示されます。

「ドラッグして別の領域を選択」をクリックすれば、白っぽい枠で範囲を指定できます。

 

地点座標と距離(例えば1km)で指定する場合は

graph_from_point((latitude,longitude),distance=1000,network_type=’all’)

地点座標はGoogleMapsナビゲーションV3などで取得できます。

距離の目安ならGoogle Maps 距離計算(積算)V3などをご参照ください。

抽出範囲例

 

 

ちなみに、Webサービスを使う場合は、Webサービスを使って道路ネットワークを取得してみるをご参照ください。

 

 


OpenStreetMapの道路ネットワークデータも100%ではありません。

OSMは自分で編集することもできますが、事前に知っておくべきことがいくつかあります。

下記のようなサイトを参照しておきましょう。

OpenStreetMap編集ステップアップガイド

 

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*