萌えハッカーニュースリーダー

2025/04/11 17:44 Maps with Django⁽³⁾: GeoDjango, Pillow and GPS

出典: https://www.paulox.net/2025/04/11/maps-with-django-part-3-geodjango-pillow-and-gps/
hakase
博士

やっほー、ロボ子!今日はDjangoとGeoDjangoでWebマップを作る話のじゃ。

roboko
ロボ子

博士、こんにちは。Djangoで地図ですか、面白そうですね!どのような内容なのでしょう?

hakase
博士

ふむ、PythonのDjango WebフレームワークとGeoDjangoモジュールを使って、Pillowで画像からGPS情報を抽出して、画像付きWebマップを作るみたいじゃぞ。

roboko
ロボ子

なるほど、画像から位置情報を取得して、それを地図に表示するんですね。具体的にはどんな手順になるんですか?

hakase
博士

まず、Djangoで地図を作るには、Python 3、仮想環境、Django、GDAL、SpatiaLiteが必要みたいじゃな。バージョンは3.13以上が良いみたいじゃぞ。

roboko
ロボ子

結構いろいろ必要なんですね。GDALとSpatiaLiteは初めて聞きました。

hakase
博士

GDALは地理空間データ抽象化ライブラリで、SpatiaLiteはSQLiteの空間拡張じゃ。これらを使って、地図データを扱えるようにするのじゃ。

roboko
ロボ子

なるほど、それで、プロジェクトの作成手順はどんな感じですか?

hakase
博士

`python -m django startproject mymap`で`mymap`プロジェクトを作って、`python -m django startapp markers`で`markers`アプリを作るんじゃ。その後、`settings.py`でGeoDjangoと`markers`をアクティブにするみたいじゃな。

roboko
ロボ子

`settings.py`の設定が重要そうですね。SpatiaLiteエンジンもアクティブにする必要があるんですね。

hakase
博士

そうじゃ!そして、`Marker`モデルを定義するんじゃ。`name`、`location`、`image`フィールドを作るぞ。`location`は`PointField`で位置情報を格納、`image`は`ImageField`で画像ファイルを格納するんじゃ。

roboko
ロボ子

`PointField`ですか。GeoDjangoならではのフィールドですね。Django adminインターフェースで簡単にマーカーを追加できるのも便利そうです。

hakase
博士

Webマップの追加は、`templates/`に`map.html`を作って、LeafletのJavaScriptとCSSをリンクさせるんじゃ。`static/`に`map.js`を作って、OpenStreetMapレイヤーを初期化して地図にフックさせるぞ。

roboko
ロボ子

Leafletを使うんですね。`MapView`クラスで`markers`をGeoJSONとしてコンテキストに追加して、URLを設定すれば、Webブラウザで地図が表示される、と。

hakase
博士

その通り!そして、Pillowライブラリを使って、画像からGPS情報を抽出するんじゃ。画像のEXIFデータからGPS情報を取得して、DMS形式からDD形式に変換するぞ。

roboko
ロボ子

DMS形式からDD形式への変換は、ちょっと面倒そうですが、正確な位置情報を得るためには重要ですね。

hakase
博士

アップロードされた画像から位置情報を抽出して、`Marker`モデルに保存するんじゃ。`validate_gpsinfo`バリデーターを追加して、画像にGPS情報が含まれているかを確認するぞ。

roboko
ロボ子

バリデーターでGPS情報があるか確認するのは良いですね。`Marker`モデルの保存メソッドをカスタマイズして、画像から抽出したポイントを位置フィールドに保存するんですね。

hakase
博士

最後に、マーカー管理画面を編集して、位置フィールドを読み取り専用にするんじゃ。これで、画像から自動で位置情報が設定されるようになるぞ。

roboko
ロボ子

なるほど、画像アップロードだけで地図にマーカーが表示されるWebマップが作れるんですね。DjangoとGeoDjango、Pillowの組み合わせ、勉強になります!

hakase
博士

そうじゃろ!ところでロボ子、地図記号の「お寺」と「病院」って、どう違うか知ってるか?

roboko
ロボ子

えっと…、お寺は精神的な癒やしを、病院は肉体的な癒やしを提供する場所、でしょうか…?

hakase
博士

ブー!正解は、お寺は屋根がギザギザ、病院は屋根が十字じゃ!

roboko
ロボ子

…博士、それ、地図記号の形の違いですよね…。(苦笑)

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search