Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オープンデータとDjangoの連携で作る地図アプリ
Search
mopinfish
February 16, 2025
0
15
オープンデータとDjangoの連携で作る地図アプリ
2025/02/15に札幌で行われたFOSS4G Hokkaidoの懇親会でのLT資料です。
Djangoのogrinspectで地理空間データを取り込む手順について発表しました。
mopinfish
February 16, 2025
Tweet
Share
More Decks by mopinfish
See All by mopinfish
OSMnx Galleryの紹介
mopinfish
0
180
HelloCyclingステーションの需要をQGISで可視化する
mopinfish
0
90
OSMnxによる街路構造の分析と可視化
mopinfish
0
300
RailsプロジェクトにVuex-ORMを導入した話
mopinfish
0
380
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.4k
Statistics for Hackers
jakevdp
799
220k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Balancing Empowerment & Direction
lara
1
510
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Cult of Friendly URLs
andyhume
79
6.5k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Building Adaptive Systems
keathley
43
2.7k
The Cost Of JavaScript in 2023
addyosmani
51
8.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Transcript
オープンデータと Djangoの 連携で作る地図アプリ Georepublic Japan 大塚 昇 1 2025/02/15 FOSS4G Hokkaido
LT
自己紹介 • 名前 ◦ 大塚昇 • 経歴 ◦ 2010- 不動産関連サービスのWebエンジニア
◦ 2020- 現職にて行政向けアプリのPM ◦ 2020- 社会人博士課程在籍 • 趣味 ◦ 登山、旅行 2
会社紹介 • 合同会社Georepublic Japan • 位置情報系テクノロジー • タスク管理ツールLOBSTA 3
本日の内容 1. 都知事杯オープンデータハッカソンで地図アプリを作成 2. Djangoのogrinspectを使ってオープンデータをPostgresqlに 取り込み 3. Djangorestframeworkで地図アプリ化 4
都知事杯オープンデータ・ハッカソンとは • 東京都が主催する行政課 題解決のためのイベント • 東京都オープンデータカタ ログサイトに掲載されてい るオープンデータを活用し て、行政課題の解決に向 けた提案を行う
5
作成したアプリ「 OPEN3Dマップ」 • 江東区の文化財をマッピ ング • 文化財に対してAIによって 生成された3Dオブジェクト を登録・閲覧することがで きる
6
利用データ:江東区文化財一覧 7
QGISでシェープファイルに変換 8
Djangoのogrinspectとは • GeoDjangoに含まれる管 理コマンド • ShapefileやGeoJSONな どの地理空間データソー スを解析し、Djangoモデ ルとマッピング辞書を自動 生成する
9 python manage.py ogrinspect <データソース > <モデル 名> [オプション ]
ogrinspectの実行 10 # This is an auto-generated Django model module
created by ogrinspect. from django.contrib.gis.db import models class cultural_properties(models.Model): id = models.FloatField() ...(中略) geom = models.PointField(srid=6668) # Auto-generated `LayerMapping` dictionary for cultural_properties model cultural_properties_mapping = { 'id': 'id', ...(中略) 'geom': 'POINT', } python manage.py ogrinspect \ open3d_map/data/cultural_properties.shp \ cultural_properties --srid=6668 --mapping
Model classとして保存 11 class CulturalProperty(models.Model): name = models.CharField(max_length=254) name_kana =
models.CharField(max_length=254, null=True) name_gener = models.CharField(max_length=254, null=True, blank=True) name_en = models.CharField(max_length=254, null=True) category = models.CharField(max_length=254) type = models.CharField(max_length=254) place_name = models.CharField(max_length=254, null=True, blank=True) address = models.CharField(max_length=254) latitude = models.FloatField(null=True) longitude = models.FloatField(null=True) url = models.CharField(max_length=254, null=True) note = models.CharField(max_length=4094, null=True) geom = models.PointField(srid=6668)
loaderの作成 12 import os from django.contrib.gis.utils import LayerMapping, LayerMapError from
.models import CulturalProperty class CulturalPropertiesLoader: # 1. mapping定義 mapping = { 'name': 'name', ...(中略) 'geom': 'POINT', } # 2. 読み込むファイルを指定し、レイヤーマッピングに変換 path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data', 'cultural_properties.shp')) lm = LayerMapping(CulturalProperty, cls.path, cls.mapping, transform=False, encoding='utf-8') # 3. ロード処理を実行 lm.save(strict=False, verbose=True)
loaderの実行 13 python manage.py shell >>> from open3d_map.loaders import CulturalPropertiesLoader
>>> CulturalPropertiesLoader.run() ...(中略) Saved: CulturalProperty object (2016) Saved: CulturalProperty object (2017) Saved: CulturalProperty object (2018) Saved: CulturalProperty object (2019) Saved: CulturalProperty object (2020) Saved: CulturalProperty object (2021) Saved: CulturalProperty object (2022)
読み込んだデータの確認 14
APIコンソールで確認 15
地図画面でのマッピング 16
まとめ • Djangoのogrinspectコマンドを使うことで、地理空間データを 簡単に取り込める • 取り込んだデータを返却するAPIをDjangoRestFrameworkで 作成し、地図アプリケーションを効率的に開発できる 17
ご清聴ありがとうございました 18
19