Python の overpass を用いて OpenStreetMap のデータをダウンロード

OpenStreetMap (https://www.openstreetmap.org)は, 世界規模の無料で使えるオンラインの地図データベースシステム.

Python の overpass パッケージは, OpenStreetMap の Overpass API を Python から使えるようにする機能を持ったソフトウェア.

前準備

Python のインストール(Windows上)

注:既にPython(バージョン3.12を推奨)がインストール済みの場合は,この手順は不要である.

winget(Windowsパッケージマネージャー)を使用してインストールを行う

  1. Windowsで,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. winget(Windowsパッケージマネージャー)が利用可能か確認する:
    winget --version
    
  3. Pythonのインストール(下のコマンドにより Python 3.12 がインストールされる).
    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.12
    
  4. 【関連する外部サイト】

    【サイト内の関連ページ】

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

CUDAツールキットは、GPU上でコードをコンパイルするためにC++コンパイラを必要とします。そのため、事前にMicrosoft C++ Build Tools または Visual Studio (C++開発ワークロードを含む) をインストールしておく必要があります。

インストールの判断Build Tools for Visual Studio は,C++コンパイラなどを含む開発ツールセットです. Visual Studio は統合開発環境であり,いくつかのエディションがあり,Build Tools for Visual Studioの機能を含むか連携して使用します.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール する方が、後で機能を追加する手間が省ける場合があります.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)。

    以下のwingetコマンドを実行します。wingetはWindows標準のパッケージマネージャーです。

    --scope machine オプションはシステム全体にインストールすることを意味します。

    次のコマンドは,Build Tools for Visual Studio 2022と、多くのプログラムで必要とされるVC++ 2015以降の再頒布可能パッケージをインストールします.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 で C++ によるデスクトップ開発関連コンポーネントのインストール

    CUDA開発には、標準のC++開発ツールに加えて、特定のコンポーネントが必要になる場合があります。

    1. Visual Studio Installer を起動します。

      起動方法: スタートメニューから「Visual Studio Installer」を探して実行します.

    2. Visual Studio Build Tools 2022 の項目で「変更」ボタンをクリックします.
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」をクリックして選択します。画面右側の「インストールの詳細」で、必要に応じて「v143 ビルドツール用 C++/CLI サポート(最新)」、「ATL」、「MFC」などをチェックします(これらは一般的なC++開発や特定のプロジェクトタイプで必要になる場合があります)。その後、「変更」をクリックしてインストールまたは変更を適用します.

Visual Studio Community 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します。
  2. インストールコマンドの実行

    以下のwingetコマンドを実行します。--override "--add ..." 部分で、インストールするワークロードやコンポーネントを指定しています。

    winget install Microsoft.VisualStudio.2022.Community --scope machine --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Component.CoreEditor Microsoft.VisualStudio.Component.NuGet Microsoft.VisualStudio.Component.Roslyn.Compiler Microsoft.VisualStudio.Component.TextTemplating Microsoft.VisualStudio.Component.Windows.SDK.Latest Microsoft.VisualStudio.Component.VC.Tools.x86.x64 Microsoft.VisualStudio.Component.VC.ATL Microsoft.VisualStudio.Component.VC.ATLMFC"
    winget install Microsoft.VisualStudio.2022.Community --scope machine Microsoft.VCRedist.2015+.x64
    

    インストールされる主要なコンポーネントの説明:

    • NativeDesktop (C++によるデスクトップ開発): CUDA開発に必要なC++コンパイラ(VC.Tools.x86.x64)やWindows SDK (Windows.SDK.Latest)など、基本的な開発ツール一式を含みます。
    • CoreEditor: Visual Studioの基本的なコードエディタ機能を提供します。
    • VC.CLI.Support: C++/CLIを用いた開発サポート(通常、純粋なCUDA C++開発では不要な場合もあります)。
    • NuGet: .NETライブラリ管理用(C++プロジェクトでも利用されることがあります)。
    • VC.ATL / VC.ATLMFC: 特定のWindowsアプリケーション開発フレームワーク(通常、CUDA開発自体には直接必要ありません)。

    システム要件と注意事項:

    • 管理者権限でのインストールが必須です。
    • 必要ディスク容量:10GB以上(選択するコンポーネントにより変動)。
    • 推奨メモリ:8GB以上のRAM。
    • インストール過程でシステムの再起動が要求される可能性があります。
    • 安定したインターネット接続環境が必要です。

    後から追加のコンポーネントが必要になった場合は,Visual Studio Installerを使用して個別にインストールすることが可能です.

  3. インストール完了の確認

    インストールが成功したか確認するには、管理者権限のコマンドプロンプトで以下のコマンドを実行します。

    winget list Microsoft.VisualStudio.2022.Community
    

    リストに表示されればインストールされています。

    トラブルシューティング:

    インストール失敗時は,以下のログファイルを確認すると原因究明の手がかりになります:

    %TEMP%\dd_setup_.log
    %TEMP%\dd_bootstrapper_.log

    ( は実行日時に対応する文字列)

  4. (オプション) Visual Studio Installer での確認と変更

    wingetでのインストール後も、Visual Studio Installerを使ってインストール内容を確認・変更できます。

    1. Visual Studio Installer を起動します。
    2. Visual Studio Community 2022 の項目で「変更」をクリックします。
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」がチェックされていることを確認します。必要であれば、「個別のコンポーネント」タブで特定のツール(例: 特定バージョンのMSVCコンパイラ、CMakeツールなど)を追加・削除できます。「インストールの詳細」で「v143 ビルドツール用 C++/CLI サポート(最新)」などが選択されているかも確認できます。変更後、「変更」または「インストール」をクリックします。

必要なPythonライブラリのインストール(Windows上)

  1. Windowsで,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. 以下のコマンドを実行し,必要なライブラリをインストールする.
    pip install -U overpass
    pip install -U geopandas
    

Google Map を用いて緯度経度を調べてみる

あとでデータをダウンロードするときのために,Google Map を使って緯度・経度を調べてみる

  1. Google Map を開く

    https://www.google.co.jp/maps

  2. Google Map で好きな場所に移動する
  3. 右クリックして,「この場所について」を選ぶ
  4. 緯度,経度が表示されるので,メモしておく

Python を用いて OpenStreetMap のデータをダウンロード

Python プログラムの実行

【サイト内の関連ページ】 Python のまとめ: 別ページ »

  1. Python で,ダウンロードしたい地図の緯度と経度の設定

    次の Python プログラムを実行

    *さきほど調べた緯度と経度

    (実行例)

    import overpass
    lat = 34.4461
    lon = 133.2315
    api = overpass.API()
    map_query = overpass.MapQuery(lat - 0.001, lon - 0.001, lat + 0.001, lon + 0.001)
    response = api.Get(map_query)
    
  2. 結果である response オブジェクトの確認

    GeoJSON 形式のデータになっていることを確認

    print(response)
    
  3. 欲しいデータのタイプの設定

    OpenStreetMapの「ライン」のデータのうち,「highway」であるようなデータが欲しいとする.OpenStreetMap には,ポイントやラインやエリアには,「highway」のようなタグが付いている.

    次の Python プログラムを実行

    import json
    # GeoJSON データから必要な情報を抽出
    data = json.loads(response)
    # highway タグを持つラインのみを抽出
    highways = []
    for feature in data['features']:
        if feature['geometry']['type'] == 'LineString':
            if 'highway' in feature['properties']:
                highways.append(feature)
    print(f"highway タグを持つラインの数: {len(highways)}")
    # 最初の highway を表示
    if highways:
        print(highways[0])
    
  4. ライン」のデータの確認
    • ラインが線分のとき: 端のポイントが2個
    • ラインが折れ線のとき: 端のポイントが2個で,途中のポイントがある

    次の Python プログラムを実行

    # ラインのデータ構造を確認
    for i, highway in enumerate(highways[:3]):  # 最初の3つだけ表示
        print(f"ライン {i+1}:")
        print(f"  ID: {highway['id']}")
        print(f"  タイプ: {highway['properties'].get('highway', '不明')}")
        print(f"  名前: {highway['properties'].get('name', '名前なし')}")
        # 座標点の数を確認
        coords = highway['geometry']['coordinates']
        print(f"  ポイント数: {len(coords)}")
        print(f"  座標: {coords}")
        print()
    
    • 表示の1行: 1個の「ライン」オブジェクト
    • 各行の nodes = [] の中身: 端のポイントや途中のポイントのID
  5. ノード」のデータの確認

    次の Python プログラムを実行

    # ノード(ポイント)のデータを抽出
    nodes = []
    for feature in data['features']:
        if feature['geometry']['type'] == 'Point':
            nodes.append(feature)
    
    print(f"ポイントの総数: {len(nodes)}")
    # 最初の数個のノードを表示
    for i, node in enumerate(nodes[:3]):  # 最初の3つだけ表示
        print(f"ノード {i+1}:")
        print(f"  ID: {node['id']}")
        print(f"  緯度経度: {node['geometry']['coordinates']}")
        print(f"  タグ: {node['properties']}")
        print()
    
    • 表示の1行: 1個の「ポイント」オブジェクト
    • 各行の中身: ID,緯度,経度

まとめ