Slide 1

Slide 1 text

©OpenStreetMap contributors 2022.10.14 - PyCon2022 GeoDjango ORMと地理空間データの世界

Slide 2

Slide 2 text

©Project PLATEAU / MLIT Japan 阿部 涼平 自己紹介 ABE Ryohei @selfsryo Backend engineer バックエンド担当 2021年2月からMIERUNE 北海道出身 https://selfs-ryo.com/

Slide 3

Slide 3 text

© 地理院地図 全国最新写真(シームレス) MIERUNEはこんな会社です MIERUNEは位置情報に関する 豊富な技術や実績を持つ ソリューションカンパニーです み え る ね

Slide 4

Slide 4 text

© 地理院地図 全国最新写真(シームレス) 位置情報は身近なところで使われています インフラ 防災 交通 ナビ ゲーム 環境 マーケティ ング 位置情報 データ (GIS)

Slide 5

Slide 5 text

©Project PLATEAU / MLIT Japan 事業紹介 ●商用ソフトより使いやすく  多機能 ●プラグイン開発や講習会   技術コンサルを提供中 QGIS 世界的なOSS-GISソフトウェア

Slide 6

Slide 6 text

©Project PLATEAU / MLIT Japan 事業紹介 ●自由で美しいウェブ地図 ●低廉なコストで導入可能 ●カスタマイズや開発も可能 MapTiler Google MapsやMapboxから 乗り換えませんか

Slide 7

Slide 7 text

©Project PLATEAU / MLIT Japan 事業紹介 ●組織内に散在している   データを一括で共有 ●最新データがすぐわかる ●ソフト無しでも閲覧可能 MIERUNE BASE GISデータ共有サービス

Slide 8

Slide 8 text

© 地理院地図 全国最新写真(シームレス) Python MIERUNEのソリューション QGIS DEM 点群 3D MapTiler PLATEAU オープンソース 位置情報 可視化 標高断面図 住所検索 ルート検索 気象データ GTFS LiDAR FOSS4G OSGeo OpenStreetMap MapLible deck.gl Cesium Mapbox OpenLayers Turf.js Geoserver OpenMapTiles GeoDjango Amazon Location Service AWS Leaflet

Slide 9

Slide 9 text

©OpenStreetMap contributors 概要 ● この題材を選んだ理由やきっかけ ○ GISへのニーズの高まりを受けて、PyConで以下を紹介 ■ GISデータをDjangoで扱うことができること ■ DjangoのORMを用いてGISデータの演算ができること ● このセッションで話すこと ○ GeoDjangoについて ○ GeoDjangoが持つORMについて

Slide 10

Slide 10 text

©OpenStreetMap contributors 01 GISとDjangoについて 02 PostGISと空間関数 03 GeoDjangoのセットアップ 04 ORM実行 / 表示 05 REST API紹介 06 まとめ 目次

Slide 11

Slide 11 text

©OpenStreetMap contributors 01 GISとDjangoについて

Slide 12

Slide 12 text

©Project PLATEAU / MLIT Japan ● 言わずと知れた Python製 Webフレームワーク ● 色々な機能が備わっている GISとDjangoについて Djangoとは

Slide 13

Slide 13 text

©Project PLATEAU / MLIT Japan GISとDjangoについて Djangoとは ● 言わずと知れた Python製 Webフレームワーク ● 色々な機能が備わっている GISデータを扱える・・?

Slide 14

Slide 14 text

©Project PLATEAU / MLIT Japan GISとDjangoについて GeoDjangoとは ● Djangoが持つ GIS Webフレームワーク用ライブラリ ● サードパーティではなく公式 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/

Slide 15

Slide 15 text

©Project PLATEAU / MLIT Japan GISとDjangoについて ● 公式(日本語ページ)の紹介文によると・・・ GeoDjango は世界規模の地理情報 Web フレームワークを目指していま す。 GeoDjango の目的は、地理情報システム (GIS) のWeb アプリケー ションの開発をより簡単にし、空間データ (spatially enabled data) を活用 することにあります。 GeoDjangoとは 出典 https://docs.djangoproject.com/ja/4.1/#geographic-framework

Slide 16

Slide 16 text

©Project PLATEAU / MLIT Japan GISとDjangoについて ● 直訳すると地理情報システム  (Geographic Information System) ● 位置情報データを扱う技術 GISとは

Slide 17

Slide 17 text

©Project PLATEAU / MLIT Japan GISとDjangoについて ● ベクタデータ ○ ポイント(点) ○ ライン(線) ○ ポリゴン(面) ● ラスタデータ(画像データ) GISで扱うデータ ポリゴン ポイント ライン ラスタ

Slide 18

Slide 18 text

©Project PLATEAU / MLIT Japan GISとDjangoについて ● ベクタデータ ○ ポイント(点) ○ ライン(線) ○ ポリゴン(面) ● ラスタデータ(画像データ) GISで扱うデータ ポリゴン ポイント ライン ラスタ

Slide 19

Slide 19 text

©Project PLATEAU / MLIT Japan GISとDjangoについて GeoDjangoのフィールド ● モデルに以下のようなフィールドが追加される(ジオメトリフィールド) ○ PointField ○ LineStringField ○ PolygonField etc. ※ジオメトリフィールドは、型(ポイント?ポリゴン?etc.)と位置情報と座標系を持つ

Slide 20

Slide 20 text

©Project PLATEAU / MLIT Japan GISとDjangoについて GeoDjangoのDB https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/install/#spatial-database ● 対応しているDB ○ PostgreSQL(PostGIS) ○ MySQL ○ Oracle ○ SQLite(SpatiaLite) GeoDjangoの公式で推奨

Slide 21

Slide 21 text

©OpenStreetMap contributors 02 PostGISと空間関数

Slide 22

Slide 22 text

©Project PLATEAU / MLIT Japan PostGISとは ● PostgreSQLの拡張モジュール ○ GISデータを扱うためのモジュール ○ オープンソース ○ ジオメトリ型が追加 ○ 空間演算用の関数が追加(空間関数) PostGISと空間関数 http://www.refractions.net/products/postgis/ http://www.postgis.net/

Slide 23

Slide 23 text

©Project PLATEAU / MLIT Japan PostGISの空間関数 ● PostGISで地理空間データの演算(空間演算)を行う関数 ● 関数名は ST_〇〇 (〇〇は動詞などが入る) ○ ST_Contains ○ ST_Intersects ○ ST_Union PostGISと空間関数

Slide 24

Slide 24 text

©Project PLATEAU / MLIT Japan 空間関数の例 ● ST_Contains(geomA, geomB) ○ BがAに含まれる場合True PostGISと空間関数 A B True B A False https://aginfo.cgk.affrc.go.jp/docs/pgisman/3.3.0/postgis-ja.html#ST_Contains

Slide 25

Slide 25 text

©Project PLATEAU / MLIT Japan 空間関数の例 PostGISと空間関数 A B True B A False ● ST_Intersects(geomA, geomB) ○ AとBに共通部分が存在する場合True https://aginfo.cgk.affrc.go.jp/docs/pgisman/3.3.0/postgis-ja.html#ST_Intersects

Slide 26

Slide 26 text

©Project PLATEAU / MLIT Japan ● ST_Union(geomA, geomB) ○ AとBを結合 空間関数の例 PostGISと空間関数 A B https://aginfo.cgk.affrc.go.jp/docs/pgisman/3.3.0/postgis-ja.html#ST_Union

Slide 27

Slide 27 text

©Project PLATEAU / MLIT Japan ● 空間演算用ORM ○ lookup ■ contains, intersects, etc. ○ DB関数 ■ Centroid, Intersection, etc. PostGISと空間関数 GeoDjangoで空間関数 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/ https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/

Slide 28

Slide 28 text

©Project PLATEAU / MLIT Japan ● オブジェクト関係マッピング(Object-Relational Mapping) ○ オブジェクト(プログラミング言語)とRDBをマッピング ○ SQLを直接叩くことなく、オブジェクトのメソッドでDB操作 ○ SQLインジェクション対策 ORMとは SQL Django ORM PostGISと空間関数

Slide 29

Slide 29 text

©Project PLATEAU / MLIT Japan ● GeoDjangoは空間演算用のORMを持っている ○ SQLを意識せずに空間関数を実行できる ○ 地理空間用のDBで実行可能 GeoDjangoとORM ● 実データを用いてORMを実行し、GeoDjangoの持つORMを紹介 PostGISと空間関数

Slide 30

Slide 30 text

©OpenStreetMap contributors 03 GeoDjangoのセットアップ

Slide 31

Slide 31 text

©Project PLATEAU / MLIT Japan ● Dockerを利用 ○ Django ○ PostgreSQL + PostGIS ○ その他必要なGISライブラリ GeoDjangoのセットアップ 環境構築 フロントエンド (Django Template) ● リポジトリ https://github.com/selfsryo/GeoDjangoORMDemo API

Slide 32

Slide 32 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの可視化 ● 地図ライブラリを使用 ○ leaflet ■ JSライブラリ ■ ブラウザで地図表示 ■ オープンソース ● leafletでDjangoTemplateから表示 https://leafletjs.com/

Slide 33

Slide 33 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ 設定ファイル ● INSTALLED_APPSにdjango.contrib.gisを追加

Slide 34

Slide 34 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ ● DATABASEのENGINEをdjango.contrib.gis.db.backends.postgisに変更 設定ファイル

Slide 35

Slide 35 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ 出典:「位置参照情報ダウンロードサービス」(国土交通省)(https://nlftp.mlit.go.jp/ksj/) ● 国土数値情報 「国土数値情報」は、国土形成計画、国土利用計画の策定等の国土政策の推進に 資するために、地形、土地利用、公共施設などの国土に関する基礎的な情報をGIS データとして整備したものです。そのうち公開に差し支えないものについて、「地理空 間情報活用推進基本法」等を踏まえて無償で提供しています。 使用データ(国土数値情報)

Slide 36

Slide 36 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ 使用データ(国土数値情報) 出典:「位置参照情報ダウンロードサービス 行政区域データ」(国土交通省)(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v3_1.html)     「位置参照情報ダウンロードサービス 空港データ」(国土交通省)(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-C28-v3_0.html) ● 行政区域データ ○ 北海道 ○ ポリゴンデータ ● 空港データ ○ 全国分 ○ ポリゴンデータ

Slide 37

Slide 37 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの取り込み ● Djangoのデータ取り込み ○ データの属性を確認 ○ models.pyを定義 ■ 可能ならばinspectdb等 ○ データ(fixture)を用意 ○ 取り込みコマンド実行 ■ loaddata ● GeoDjangoのデータ取り込み ○ データ(GISデータ)を用意 ○ データの属性を確認 ○ models.pyを定義 ○ 取り込み実行 ※順番は前後

Slide 38

Slide 38 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの取り込み ● Djangoのデータ取り込み ○ データ構造を確認 ○ models.pyを定義 ■ 可能ならばinspectdb等 ○ データ(fixture)を用意 ○ 取り込みコマンド実行 ■ loaddata ● GeoDjangoのデータ取り込み ○ データ(GISデータ)を用意 ○ データの属性を確認 ○ models.pyを定義 ○ 取り込み実行 ※順番は前後

Slide 39

Slide 39 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの取り込み ● Djangoのデータ取り込み ○ データ構造を確認 ○ models.pyを定義 ■ 可能ならばinspectdb等 ○ データ(fixture)を用意 ○ 取り込みコマンド実行 ■ loaddata ● GeoDjangoのデータ取り込み ○ データ(GISデータ)を用意 ○ データの属性を確認 ○ models.pyを定義 ○ 取り込み実行 ※順番は前後

Slide 40

Slide 40 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの属性を確認 ● 国土数値情報のページを確認 ○ 属性情報が記載 ○ 名称、説明、型 出典:「位置参照情報ダウンロードサービス 行政区域データ」(国土交通省)(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v3_1.html)

Slide 41

Slide 41 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの属性を確認 ● ogrinspect ○ 管理コマンド ○ 以下を出力 ■ データの構造 ■ 実データとのマッピング https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/commands/#django-admin-ogrinspect

Slide 42

Slide 42 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの取り込み ● Djangoのデータ取り込み ○ データ構造を確認 ○ models.pyを定義 ■ 可能ならばinspectdb等 ○ データ(fixture)を用意 ○ 取り込みコマンド実行 ■ loaddata ● GeoDjangoのデータ取り込み ○ データ(GISデータ)を用意 ○ データの属性を確認 ○ models.pyを定義 ○ 取り込み実行 ※順番は前後

Slide 43

Slide 43 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ データの取り込み ● LayerMapping ○ ベクタデータをマップ ○ 座標系の変換も可能(省略) ○ saveメソッドで取り込み https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/layermapping/

Slide 44

Slide 44 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ 行政区域モデル ● モデル名 ○ AdminiBoundary ● 今回は政令都市名または 市町村名を持つデータのみ取得

Slide 45

Slide 45 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ 空港データモデル https://leafletjs.com/ ● モデル名 ○ Airport ● 今回は必要なフィールドは 名称(c28_005)と ジオメトリ だけ

Slide 46

Slide 46 text

©Project PLATEAU / MLIT Japan ● GeoJSON形式でのシリアライザがデフォルトで用意されている ○ django.core.serializers.serialize ○ 第一引数に”geojson”と入力 ※GeoJSONとは ○ JSON形式 ○ type, geometory, propertiesを持つ ○ APIに利用 GeoDjangoのセットアップ シリアライザ https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/serializers/ https://geojson.org/

Slide 47

Slide 47 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ レスポンス ● 新千歳空港のポリゴンを取得

Slide 48

Slide 48 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ レスポンス ● 新千歳空港のポリゴンを取得 ○ GeoJSON形式でレスポンス

Slide 49

Slide 49 text

©Project PLATEAU / MLIT Japan GeoDjangoのセットアップ レスポンス ● フロントエンドから確認

Slide 50

Slide 50 text

©OpenStreetMap contributors 04 ORM実行 / 表示

Slide 51

Slide 51 text

©Project PLATEAU / MLIT Japan ● 空間演算用ORM ○ lookup ■ contains, intersects, etc. ○ DB関数 ■ Centroid, Intersection, etc. PostGISと空間関数 GeoDjangoで空間関数(再掲) https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/ https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/

Slide 52

Slide 52 text

©Project PLATEAU / MLIT Japan intersects ● フロントエンドから確認 ○ 苫小牧市 ○ 千歳市 ORM実行 / 表示

Slide 53

Slide 53 text

©Project PLATEAU / MLIT Japan ● 空間演算用ORM ○ lookup ■ contains, intersects, etc. ○ DB関数 ■ Centroid, Intersection, etc. PostGISと空間関数 GeoDjangoで空間関数(再掲) https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/ https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/

Slide 54

Slide 54 text

©Project PLATEAU / MLIT Japan ● DjangoのQuerySetを様々な条件で取得できる ● 一般的に以下のように書く ○ .objects.filter(フィールド名__lookup=値) ● 例:contains(名称に”田”の文字を含む空港データを取得) lookupとは https://docs.djangoproject.com/ja/4.1/ref/models/querysets/#field-lookups ORM実行 / 表示

Slide 55

Slide 55 text

©Project PLATEAU / MLIT Japan ● 共通部分が存在する場合TRUE ● 新千歳空港と共通部分が存在する行政界ポリゴンのみ取得 intersects https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#intersects ORM実行 / 表示

Slide 56

Slide 56 text

©Project PLATEAU / MLIT Japan ● 内部のみに存在する場合TRUE ● 女満別空港を内部に含む行政界ポリゴンのみ取得 contains https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#contains ORM実行 / 表示 ※新千歳空港は複数のポリゴンにまたがるためFALSEとなる

Slide 57

Slide 57 text

©Project PLATEAU / MLIT Japan ● フロントエンドから確認 ○ 大空町 contains ORM実行 / 表示

Slide 58

Slide 58 text

©Project PLATEAU / MLIT Japan ● containsと引数が逆になる ● 北海道のみに含まれる空港ポリゴンのみ取得 within https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#within ORM実行 / 表示

Slide 59

Slide 59 text

©Project PLATEAU / MLIT Japan ● フロントエンドから確認 within ORM実行 / 表示

Slide 60

Slide 60 text

©Project PLATEAU / MLIT Japan ● 共通部分が存在し、かつ一方がもう一方に含まれていない場合TRUE ● 旭川空港と共通部分が存在し、かつ内部に含んでいない行政界ポリゴンのみ取得 overlaps https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#overlaps ORM実行 / 表示

Slide 61

Slide 61 text

©Project PLATEAU / MLIT Japan ● フロントエンドから確認 ○ 旭川市 ○ 東神楽町 overlaps ORM実行 / 表示

Slide 62

Slide 62 text

©Project PLATEAU / MLIT Japan ● 共通部分が存在しない場合TRUE ● 稚内空港と共通部分が存在しない行政界ポリゴンのみ取得 disjoint https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#disjoint ORM実行 / 表示

Slide 63

Slide 63 text

©Project PLATEAU / MLIT Japan ● フロントエンドから確認 disjoint ORM実行 / 表示

Slide 64

Slide 64 text

©Project PLATEAU / MLIT Japan ● 左または右に存在する場合のみTRUE ● 帯広空港の左に存在する行政界ポリゴンのみ取得 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#right https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#left ORM実行 / 表示 left / right

Slide 65

Slide 65 text

©Project PLATEAU / MLIT Japan ● left left / right ● right ORM実行 / 表示

Slide 66

Slide 66 text

©Project PLATEAU / MLIT Japan ● 上または下に存在、またはoverlapsしている場合のみTRUE ● 釧路空港の上に存在、またはoverlapsする行政界ポリゴンのみ取得 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#overlaps-above https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#overlaps-below ORM実行 / 表示 overlaps_above / overlaps_below

Slide 67

Slide 67 text

©Project PLATEAU / MLIT Japan overlaps_above / overlaps_below ● overlaps_above ● overlaps_below ORM実行 / 表示

Slide 68

Slide 68 text

©Project PLATEAU / MLIT Japan ● 指定した距離より大きい、または小さい場所に存在する場合のみTRUE ● distance_gte、distance_lteでそれぞれ以上、以下になる(=も含む) ● 中標津空港から100kmより大きい距離にある行政界ポリゴンのみ取得 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#distance-gt https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/#distance-lt ORM実行 / 表示 distance_gt / distance_lt

Slide 69

Slide 69 text

©Project PLATEAU / MLIT Japan ● distance_gt ● distance_lt ORM実行 / 表示 distance_gt / distance_lt

Slide 70

Slide 70 text

©Project PLATEAU / MLIT Japan ● 空間演算用ORM ○ lookup ■ contains, intersects, etc. ○ DB関数 ■ Centroid, Intersection, etc. PostGISと空間関数 GeoDjangoで空間関数(再掲) https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/geoquerysets/ https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/

Slide 71

Slide 71 text

©Project PLATEAU / MLIT Japan ● 集計関数(annotate、aggregate)、フィルタの中で利用 ● GeoDjangoでは以下が追加 データベース関数とは https://docs.djangoproject.com/en/4.1/ref/contrib/gis/functions/ ORM実行 / 表示

Slide 72

Slide 72 text

©Project PLATEAU / MLIT Japan ● ジオメトリフィールドのGeoJSON表現を取得 ● 完全なGeoJSONではなく、ジオメトリ部分のみ ● 函館空港のAsGeoJSON ORM実行 / 表示 AsGeoJSON https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/#asgeojson

Slide 73

Slide 73 text

©Project PLATEAU / MLIT Japan ● 函館空港のジオメトリからGeoJSONを作成 ORM実行 / 表示 AsGeoJSON https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/#asgeojson

Slide 74

Slide 74 text

©Project PLATEAU / MLIT Japan ORM実行 / 表示 AsGeoJSON ● フロントエンドから確認

Slide 75

Slide 75 text

©Project PLATEAU / MLIT Japan ● 中心点のポイントのジオメトリを取得 ● 紋別空港の中心点のポイントを取得 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/#centroid ORM実行 / 表示 Centroid

Slide 76

Slide 76 text

©Project PLATEAU / MLIT Japan ORM実行 / 表示 ● フロントエンドから確認 Centroid

Slide 77

Slide 77 text

©Project PLATEAU / MLIT Japan ● 2つのジオメトリの距離を取得 ● 新千歳空港と旭川空港の距離を取得 https://docs.djangoproject.com/ja/4.1/ref/contrib/gis/functions/#distance ORM実行 / 表示 Distance

Slide 78

Slide 78 text

©OpenStreetMap contributors 05 REST API紹介

Slide 79

Slide 79 text

©Project PLATEAU / MLIT Japan ● Django REST framework ○ DjangoでREST API実行 ○ サードパーティ製 ○ ブラウザ操作可能 REST API紹介 DjangoでのREST API https://www.django-rest-framework.org/

Slide 80

Slide 80 text

©Project PLATEAU / MLIT Japan ● django-rest-framework-gis ○ DRFのGIS拡張ライブラリ ○ GIS処理の機能が追加 GeoDjangoでのREST API https://github.com/openwisp/django-rest-framework-gis REST API紹介

Slide 81

Slide 81 text

©Project PLATEAU / MLIT Japan 機能 ● URLで様々なフィルタリングが可能(distance、bbox等) ● ページネーションがGeoJSON仕様 ● レスポンスにbboxを含められる etc. REST API紹介

Slide 82

Slide 82 text

©Project PLATEAU / MLIT Japan セットアップ ● INSTALLED_APPSに以下追加 ○ rest_framework ○ rest_framework_gis ○ django_filters REST API紹介

Slide 83

Slide 83 text

©Project PLATEAU / MLIT Japan シリアライザ ● geo_fieldにジオメトリのフィールド名を指定 ● auto_bbox=Trueとすることでレスポンスにbboxが追加 REST API紹介

Slide 84

Slide 84 text

©Project PLATEAU / MLIT Japan ビュー ● distanceとbboxでのフィルタを追加 REST API紹介

Slide 85

Slide 85 text

©Project PLATEAU / MLIT Japan ● 対象のpointからの距離でフィルタ ○ URLに以下を追加してみる (新千歳空港のpoint) ?dist=1&point=141.683497,42.784556 ● 新千歳空港と札幌飛行場が返ってくる ● bboxが含まれている レスポンス REST API紹介

Slide 86

Slide 86 text

©Project PLATEAU / MLIT Japan ● django-debug-toolbarで実行されているSQLを確認 ○ ST_DWithinが実行されている レスポンス REST API紹介

Slide 87

Slide 87 text

©OpenStreetMap contributors おまけ デモアプリケーション紹介

Slide 88

Slide 88 text

©Project PLATEAU / MLIT Japan ● フロントエンドとの疎通アプリケーション https://github.com/selfsryo/GeoDjangoORMDemo アプリケーション紹介 デモアプリ

Slide 89

Slide 89 text

©OpenStreetMap contributors 06 まとめ

Slide 90

Slide 90 text

© 地理院地図 全国最新写真(シームレス) 以下を紹介 ●GISデータについて ●GeoDjangoの環境構築、データ取り込み ●GeoDjangoのORMで空間演算 ●GeoDjangoのREST API ●簡易デモアプリケーション まとめ

Slide 91

Slide 91 text

© 地理院地図 全国最新写真(シームレス) 仲間を募集中 We are hiring! MIERUNE 検索 未来に挑戦する仲間を 募集しています