緯度経度などのデータファイルから,マーカーとイメージポップアップ付きの OpenStreetMap 地図を生成

1. エグゼクティブサマリー

問題定義

緯度経度を含むデータを地図上に可視化する簡易な手段が求められている。

提案技術

Python の pandas と folium を用い,CSV データから OpenStreetMap 上にマーカー付き地図を HTML として生成する。

期待される効果

簡易に構築運用可能な地図サービスシステム構築

こんなことでお困りではありませんか

こんなことができる,こんな用途が考えられます

システム構成

CSV データ → Python(pandas, folium)→ HTML ファイル → Web ブラウザで地図表示

使用している既存の技術

Python,pandas,folium,OpenStreetMap,Leaflet.js

拡張可能である:密度表示,住所やジオコードとの変換

2. 前準備(必要ソフトウェアの入手)

ここでは、最低限の事前準備について説明する。機械学習や深層学習を行う場合は、NVIDIA CUDA、Visual Studio、Cursorなどを追加でインストールすると便利である。これらについては別ページ https://www.kkaneko.jp/cc/dev/aiassist.htmlで詳しく解説しているので、必要に応じて参照してください。

Python 3.12 のインストール(Windows 上) [クリックして展開]

以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --id Python.Python.3.12 -e --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0 Include_pip=1 Include_launcher=1 InstallLauncherAllUsers=1 TargetDir=\"C:\Program Files\Python312\""
powershell -Command "$p='C:\Program Files\Python312'; $s=\"$p\Scripts\"; $m=[Environment]::GetEnvironmentVariable('Path','Machine'); if($m -notlike \"*$s*\") { [Environment]::SetEnvironmentVariable('Path', \"$p;$s;$m\", 'Machine') }"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

AIエディタ Windsurf のインストール(Windows 上) [クリックして展開]

Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。Windsurf がインストール済みの場合、この手順は不要である。

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --scope machine --id Codeium.Windsurf -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --custom "/SP- /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /DIR=""C:\Program Files\Windsurf"" /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

必要なライブラリのインストール [クリックして展開]

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

pip install -U pandas folium

3. 実行のための準備とその確認手順(Windows 前提)

3.1 カレントディレクトリの確認

次の Python プログラムを実行する。

import os
print(os.getcwd())

3.2 データファイルの準備

  1. GitHub の AjinKuriakose/UK-Road-Accident-Data-Analysis の Web ページを開く。

    https://github.com/AjinKuriakose/UK-Road-Accident-Data-Analysis

  2. clean_data.csv」をクリックする。
  3. 画面が変わる。「Download」をクリックする。
  4. ダウンロードしたファイルを,先ほど確認した「カレントディレクトリ」に置く。

    * ファイルの先頭部分は次のようになっている。

3.3 プログラムファイルの準備

第5章に掲載するソースコードをテキストエディタ(メモ帳,Windsurf 等)に貼り付け,map_view.py として保存する(文字コード:UTF-8)。

3.4 実行コマンド

コマンドプロンプトでファイルの保存先ディレクトリに移動し,以下を実行する。

python map_view.py

3.5 動作確認チェックリスト

確認項目期待される結果
カレントディレクトリの確認現在の作業ディレクトリのパスが表示される
clean_data.csv の配置カレントディレクトリにファイルが存在する
プログラム実行後カレントディレクトリに d.html が生成される
d.html を Web ブラウザで開くOpenStreetMap の地図が表示される
マーカーの表示データの先頭100件分のマーカーが地図上に表示される
マーカーにマウスカーソルを合わせる日付がツールチップとして表示される
マーカーをクリック日付と Google マップストリートビューへのリンクがポップアップ表示される
ズームアウトマーカーの分布を広域で確認できる
スケールバー地図左下に距離の目盛りが表示される

4. 概要・使い方・実行上の注意

プログラムの動作

CSV 形式のデータファイル(clean_data.csv)から緯度・経度・日付を読み取り,OpenStreetMap 上にマーカーを配置した HTML ファイル(d.html)を生成する。

マーカーの操作

マーカーをクリックするとポップアップが開き,日付と Google マップのストリートビューへのリンクが表示される。マーカーにマウスカーソルを合わせると,日付がツールチップとして表示される。

表示範囲とデータ件数

地図の初期表示位置は緯度 53.44,経度 -2.24,ズームレベル 16 である。データファイルの先頭100件がマーカーとして表示される。

ズームアウトして確認する。

5. ソースコード

カレントディレクトリの確認

import os
print(os.getcwd())

地図生成プログラム

import pandas as pd
import folium

datafile = "clean_data.csv"
lat, lon = 53.44, -2.24
zoom_start = 16
webfile_name = "d.html"

m = folium.Map(location=[lat, lon], zoom_start=zoom_start, control_scale=True)
X = pd.read_csv(datafile)
for i, r in X.head(100).iterrows():
    p = f'<a href="https://maps.google.com/maps?q=&layer=c&cbll={r.latitude},{r.longitude}&cbp=11,0,0,0,0">{r.date}</a>'
    folium.Marker([r.latitude, r.longitude], popup=p, tooltip=r.date).add_to(m)

m.save(webfile_name)

6. まとめ

OpenStreetMap と folium による地図生成

Python の folium ライブラリにより,OpenStreetMap 上にマーカーとポップアップ付きの地図を HTML ファイルとして生成できる。生成された HTML は Web ブラウザで表示でき,サーバー環境を必要としない。

CSV データからの一括表示

緯度・経度を含む CSV ファイルを pandas で読み込み,各行をマーカーとして地図上に一括表示する。モバイル端末(GPS 付きも可能)で集めた情報を即時に地図へ反映できる。

ポップアップとツールチップ

各マーカーには,クリック時のポップアップとマウスホバー時のツールチップが設定されている。ポップアップには日付と Google マップストリートビューへのリンクが含まれる。

簡易な構築と運用

Python と pip によるライブラリインストールのみで環境構築が完了する。従来型システム開発と比較して,クイックに地図サービスを構築・運用できる。

多様な用途への応用

ヒヤリハット地図,道路等の検査・調査結果,団体行動の把握など,地図に基づくパーソナル・特定業務用途の情報表示に応用できる。密度表示や住所・ジオコードとの変換への拡張も可能である。