イベント・学習

【PyCon JP 2022】地理情報関連講演のまとめ

2022年10月17日

10/15(金)-16(土)の2日間開催されたPyCon JP 2022では、地理情報関連の講演が複数行われました。
今回は、PyCon JP 2022の地理情報関連の3講演について、紹介されたツールやパッケージなどについてみていきます。

PyConとは

PyConとは、プログラミング言語Pythonに関する国際カンファレンスです。
各国で開催されており、日本で毎年開催されるイベントはPyCon JPという名前です。

PyCon JPの講演はYoutubeチャンネルでリアルタイムで配信され、過去の講演も残っているので気軽に聴くことができます。
技術的な講演は一度で理解することが難しく、Youtubeで何度でも戻って聞くことができるのは非常に使い勝手が良いです。

PyCon JP 2022 地理情報関連講演

PyCon JP 2022では、地理空間情報の講演が3つありました。
ここからは、この3講演にしぼって講演概要や紹介されているツールなどについてまとめていきます。

Python/PyQtとQGISではじめる公共交通分析

講演者:Kanahiro Iguchi(株式会社MIERUNE

路線バスの時刻表情報を格納したGTFSというデータフォーマットは、様々な事業者でオープンソースとして公開されているが、Google Mapくらいでしかを活用されていないという課題があり、株式会社MIERUNEではGTFSフォーマットのデータをQGISで可視化できるプラグインを開発したという話でした。

講演でふれられたGTFSPyQtGTFS-GOについて、講演を元に調べた内容などをまとめます。

GTFS

OpenTripPlannerの経路検索結果画面。GTFS形式のデータを活用して乗り換えルートが提案されている。出典:Wikimedia Commons, ©(Screenshot by) User:-stk, CC BY-SA 2.0, 2022/10/15閲覧

GTFS(General Transit Feed Specification)は、路線バスの時刻表・ルート・バス停情報などをひとまとめにしたデータフォーマットです。
Googleが開発した国際的に使われているフォーマットで、経路情報やバス停情報、運行情報などを記載した複数のCSVからなります。

GTFSの主な用途はGoogle Mapの経路検索です。
経路検索で自社のバス路線を使うルートを表示させるためには、バス会社はGoogleと契約してGTFS形式で作成したバス路線・時刻表情報を指定フォルダに格納する必要があります。
バス会社にとっては、自社のバス路線がGoogle Mapの経路検索で表示されることは重要なことだそうです。

このGTFS形式のバス路線・時刻表情報は多くの事業者でCreative Commonsなどのオープンライセンスで公開されています。
こちらのサイトにオープンライセンスでGTFSデータが公開されている各地の事業者の一覧がまとめられています。

たとえば、質疑で(一瞬)出てきた北海道拓殖バスのWebサイトを見ると、過去分も含めてGTFSデータをダウンロードすることができます。
Creative Commons 4.0 BYライセンスで公開されているので、表示義務を守れば商用利用もできます。

PyQt

PyQtはQGISでプラグイン開発を行うためにPythonでコードを実装するツールです。
QGISはC++のフレームワークQtで書かれているのに対し、プラグインはPythonで開発するため、QtのラッパーであるPyQtを使用しています。

講演では、GTFSデータをQGISで可視化できるようなプラグインを開発するという話の流れで登場しました。
交通データを触ってみるというよりは、QGISのプラグイン開発をしたいときに使うツールです。

GTFS-GO

GTFS-GOはQGISのオープンソースのプラグインで、GTFSフォーマットのデータをQGIS上で可視化できます。

バスルートや停留所を可視化したり、バスルートの線の太さを変えることで運行頻度を表現したり、QGISの機能を使って他のデータと重ね合わせることで様々な分析を行うことができます。

講演者がQiitaで使い方を解説している記事もあり、実際に使ってみる際に参考になります。

GeoDjango ORMと地理空間データの世界

講演者:阿部涼平(株式会社MIERUNE

こちらも同じ会社の方の講演です。

GeoDjangoを使ってWebアプリ上で地理空間情報を表示し、API配信する方法に関する解説でした。

講演でふれられたGeoDjangoREST APIについて、講演を元に調べた内容などをまとめます。

GeoDjango

GeoDjangoは、Django上で地理空間情報を扱うためのライブラリです。
DjangoはオープンソースのWebアプリケーション開発用のフレームワークで、PythonでWeb開発を行うことができます。
GeoDjangoを使うことで、Webアプリ/APIを通して空間情報の処理や可視化を行うことができます。

講演では、環境構築としてDocker上でDjangoとPostgreSQL+PostGIS(GISを扱うための拡張モジュール)、その他必要なGIS関連ライブラリをインストールする構成を紹介していました。
データの可視化には、leafletというJavaスクリプトのライブラリを使って表示します。

GeoDjangoでは、地理情報データに対して重なりの判定や共通部分の取得などの操作を行うことができます。
これは、GeoDjangoが空間演算用のORMをもっているためです。
ORM(オブジェクト指向マッピング、Object-relational mapping)は、SQLを書かずにデータベース操作を行う機能のことです。
ORM機能があることで、GeoDjangoではデータベースを意識せずに空間演算の処理を行うことができます。

講演では、北海道の市町村境界データや空港の位置情報を例に、Djangoの取り込んだデータに対して空間関数を使った結果を紹介していました。

Django REST framework

Django REST frameworkは、DjangoでREST APIを実装するためのライブラリです。
REST APIは、Webシステムを外部から利用するためのAPIの一種で、RESTとよばれる特定の制約に基づいて情報をやりとりします。
Django REST frameworkを使うことで、Djangoで開発したWebアプリに対し、ブラウザからAPIを実行することができます。

これにGIS機能を追加したのがdjango-rest-framework-gisです。
講演者の会社ではDjangoはAPIサーバーとして利用する場合がほとんどで、DjangoでGISデータを扱う際にはこのモジュールを導入することが多いそうです(同じ会社の方のQiita記事より)。

Pythonではじめる地理空間情報

講演者:小俣 博司 (Hiroshi Omata)

Pythonで地図を表示したり点群データを簡単に可視化する方法についての解説でした。
最後に地理空間情報関連データを入手元としてG空間情報センターなどの紹介もありました。

講演でふれられたgeemapleafmap点群データについて、講演を元に調べた内容などをまとめます。

geemapとleafmap

geemapleafmapはどちらもPythonで地理空間データの分析や可視化を行うためのパッケージです。
両者の違いは、geemapがGoogle Earth Engine (GEE)に対応しているのに対し、leafmapは非GEE ユーザー向けの軽量なパッケージです。
GEEは様々な衛星画像と地理空間データをクラウド上で解析できるGoogleの有料サービスです。

Leafmapはインタラクティブなマップを表示することができ、geemapではそれに加えてEarth Engine サーバーへの計算リクエストを作成するためのJavaScript APIとPython APIを使うことができます。

点群データ

点群データは、点(ポイント)の位置情報で構成された3次元の空間情報データです。

ポイントデータでは使い勝手が悪いため、メッシュデータに変換して使われることが多いです。

点群データはLAS形式(.las)という米国写真測量学会 (ASPRS)が仕様を制定しているファイル形式が広く使われています。
しかし、点群データの加工に使用するopen3dパッケージはLAS形式での出力に対応していないようで、多くのパッケージに対応しているPLY形式(.ply)へ変換します。
点群データのままだとファイルサイズが膨大な上、データとしては物体の表面が存在せずに扱いづらいので、さらにメッシュデータ(ポリゴン)に変換します。

点群データやメッシュデータは、PLY形式の点群データはopen3Dとmatplotlibで可視化できます。
open3Dにも3D表示用の関数(o3d.visualization.draw_geometries)がありますが、Jupyter Notebookでは表示できるがGoogle Colabではサポートされていないという問題があるそうです。
そのため、講演でもGoogle Colabを使った点群データの可視化例がありましたが、matplotlibで散布図を作成していました。

参考文献

PyCon JP 2022 2022/10/15閲覧
PyCon JP(Yotubeチャンネル) 2022/10/15閲覧
全国のGTFSデータリスト 2022/10/15閲覧
北海道拓殖バス オープンデータ(GTFS) 北海道拓殖バス株式会社 2022/10/15閲覧
Kanahiro Iguchi QGISと「GTFS-GO」でGTFSを可視化しよう! Qiita 2022/10/15閲覧
Kanahiro Iguchi QGIS3.x系向けプラグイン作成手順や各種処理の実装方法について Qiita 2022/10/15閲覧
【プログラミング学習】 ORMの真のメリット note 2022/10/15閲覧
RESTful API IT用語辞典 e-Words 2022/10/15閲覧
RESTful API とは AWS 2022/10/15閲覧
django-rest-framework-gisを触ってみよう Qiita 2022/10/15閲覧
geemap 2022/10/15閲覧
leafmap 2022/10/15閲覧
衛星画像解析が変わる!? 「Google Earth Engine」の何がすごいのか 宙畑 2022/10/15閲覧
Google Earth Engine 入門 Hiroki MIZUOCHI, Google Sites 2022/10/15閲覧
Hiroshi Omata「PyConJP 2022 - Pythonではじめる地理空間情報」 HackMD 2022/10/15閲覧
LAS file format Wikipedia 2022/10/16閲覧
Leafmap/Open3Dを使って掛川城の大規模点群データ(5GB)をPythonで可視化してみよう! Qiita 2022/10/16閲覧
点群データの活用事例 ~点群データの3Dモデル化とは?~ 株式会社ソーキ販売 2022/10/16閲覧
3Dスキャナー活用 ~点群データから自動でCADに変換 CAD Japan.com 2022/10/16閲覧

-イベント・学習
-,