PythonではじめるGIS処理とFOSS4Gの世界

2.9K Views

January 23, 25

スライド概要

地球とPython - こんなところにPythonが Vol.1 発表資料

profile-image

Georepublic / OSGeo.JP / Japan Unix Society / OpenStreetMap Foundation Japan

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

PythonではじめるGIS処理とFOSS4Gの世界 Taro Matsuzawa (@smellman) https://smellman.hatenablog.com/ https://github.com/smellman 地球とPython - こんなところにPythonが Vol.1 地球とPython - こんなところにPythonが Vol.1 1

2.

自己紹介(1) Georepublic Japan GIS Engineer 日本UNIXユーザ会副会長 OSGeo.JP理事 OpenStreetMap Foundation Japan理事 Lead of United Nation OpenGIS/7 core Breakcore cluster 地球とPython - こんなところにPythonが Vol.1 2

3.

自己紹介(2) 本業はGISエンジニア Python/Ruby on Rails/Typescript/React Nativeなどでインフラからフロントエン ドまで面倒を見ています Rust/Java/Swiftもちょっと書ける Lobstaというサービスをやっています Redmine+位置情報プラグインという仕組み 年に一度JICAで講義を担当しています 地球とPython - こんなところにPythonが Vol.1 3

4.

Python歴 2000年ごろから、Python 1.x時代から触っている 2002年: バイト先でユーティリティをPython+Visual Basic 6で書く 2004年: 大学の卒検をPythonで実装 しばらくは趣味で使っていた 2012年(現職)から仕事でもPythonも使うようになる 2022年: 国土地理院業務でSAR衛星データ解析のサーバでPythonを利用 地球とPython - こんなところにPythonが Vol.1 4

5.

書いた本 React Native+Expoではじめるス マホアプリ開発 内容が古すぎるので絶対に 買わないでください。 他にもFirefox Hacks Rebooted(O'Reilly Japan)など キオクシアの同人誌にも寄稿し ています。 地球とPython - こんなところにPythonが Vol.1 5

6.

本日のお話 関連書籍のご紹介 GISとは PythonでのGIS処理 FOSS4Gの世界 QGISの紹介 Python以外の言語でのGIS処理 地球とPython - こんなところにPythonが Vol.1 6

7.

本日の関連書籍 (1) 位置情報エンジニア養成講座 入門として最適な一冊 クライアントサイドのコー ドなどを紹介している 地球とPython - こんなところにPythonが Vol.1 7

8.

本日の関連書籍 (2) 位置情報デベロッパー養成講座 開発者向けに最適な一冊 サーバサイドのコードなど を紹介している ちなみに査読しました 地球とPython - こんなところにPythonが Vol.1 8

9.

GISとは Geographic Information Systemの略 日本語では地理情報システムと呼ばれている 代表的なソフトウェア QGIS(OSS) ArcGIS(商用ソフト) GRASS GIS(OSS) 地球とPython - こんなところにPythonが Vol.1 9

10.

GIS処理の種類 ラスタデータの処理 標高データ 衛星/航空写真データ ベクタデータの処理 点データ 線データ 面データ 点群の処理 LiDARデータ だいたいこの6つぐらいを押さえておけばOK 地球とPython - こんなところにPythonが Vol.1 10

11.

ラスタデータの処理の例 標高を含むGeoTiffファイルを読み込んで、標高タイルを作成する 衛星データ(SAR)を解析して、地球の変動を観測する 地球とPython - こんなところにPythonが Vol.1 11

12.

GeoTiffとは 地理情報を含むTIFFファイルのこと 標高データの場合、高さの情報がTIFFの1pxごとに格納されている 例えば、標高が1000mの場合、1000という値が格納されている 単一のデータを持つものはグレースケールのTIFFとして扱われる(標高データなど) 3つのデータを持つものはRGBのTIFFとして扱われる(衛星データなど) 地球とPython - こんなところにPythonが Vol.1 12

13.

タイルとは 画像データやベクトルデータを分割して格納仕組み 例えば、地図データをズームレベルごとに分割して格納する OpenStreetMapや地理院地図、Google Mapsなど 1つの画像タイルは256px x 256pxが一般的 画像データの場合、JPEGやPNGなどが使われる ベクタデータの場合、MVT(MapBox Vector Tile)などが使われる Google Maps/Apple Mapsは独自形式 地球とPython - こんなところにPythonが Vol.1 13

14.

タイルの概要図 https://maps.gsi.go.jp/development/siy ou.html から引用 地球とPython - こんなところにPythonが Vol.1 14

15.

ベクターデータの処理の例 都道府県ごとの人口データを含むShapefileファイルを読み込んで、人口が100万人 以上の都道府県を抽出する 都道府県ごとに色分けした地図を作成する OpenStreetMapのデータを読み込んで、特定の地点の情報を取得する 地球とPython - こんなところにPythonが Vol.1 15

16.

Shapefileとは ベクターデータを格納するためのファイルフォーマットの一つ 以下のファイルで構成される .shp: データ本体 .shx: インデックスファイル .dbf: 属性データ .prj: 投影情報 .cpg: 文字コード情報 個人的にはもう使いたくないフォーマット 地球とPython - こんなところにPythonが Vol.1 16

17.

Shapefile Must Die Shapefileは滅ぶべきと解説したサイト Shapefileのなにが悪い? 一ファイルじゃなくて複数ファイルが必須 データベースが.dbfファイル(dBaseファイル)である 2GBもしくは4GBまでのファイルしか扱えない そもそも古い 地球とPython - こんなところにPythonが Vol.1 17

18.

Shapefileの代替フォーマット OGC GeoPackage GeoJSON FlatGeobuf GeoParquet 地球とPython - こんなところにPythonが Vol.1 18

19.

OGC GeoPackageとは OGC(Open Geospatial Consortium)が策定したファイルフォーマット SQLite3ベース ラスタデータ、ベクタデータ、タイルデータを格納できる 1ファイルで完結する(複数のレイヤーが格納できる) 地球とPython - こんなところにPythonが Vol.1 19

20.
[beta]
GeoJSONとは

地理情報を含むJSONファイルのこと
例えば、緯度経度の情報を持つ場合、以下のような形式で記述される

{

}

"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}

若干ファイルが大きくなるが、人間がまだ読みやすい(かもしれない)
地球とPython - こんなところにPythonが Vol.1

20

21.

FlatGeobufとは FlatBuffersベースのファイルフォーマット ベクターデータを格納するためのファイルフォーマット 1ファイル1レイヤー ファイルサイズが小さい Cloud Nativeフォーマット 地球とPython - こんなところにPythonが Vol.1 21

22.

Cloud Native フォーマット とは クラウド環境での利用を意識し たファイルフォーマット HTTP Range Requestsに対応し ているのが特徴 地球とPython - こんなところにPythonが Vol.1 22

23.

GeoParquetとは Apache Arrowベースのファイルフォーマット ベクターデータを格納するためのファイルフォーマット 1ファイル1レイヤー ストリーミング処理などに向いている QGIS for macOSでは利用できないので注意(後述) 地球とPython - こんなところにPythonが Vol.1 23

24.

OpenStreetMapとは 地図のWikipediaとも言われるプロジェクト 世界中の地図と単一のデータベース(Subversionベース)で管理 データはODbLライセンスで提供されている 商用利用可能なオープンなライセンス データはXML形式で提供されている アーカイブはProtocolBuffer形式でも提供されている 地球とPython - こんなところにPythonが Vol.1 24

25.

PythonでのGIS処理 PythonでGIS処理を行うためには、以下のライブラリが利用できる GDAL Fiona Shapely GeoPandas Rasterio Pyproj Cartopy 実際にはもっとある 地球とPython - こんなところにPythonが Vol.1 25

26.

PythonでのGIS処理の例 (1) ラスター処理 GeoTiffファイルを読み込んで、標高タイルを作成する Rasterioを使う 実際にはプラグインを使う 航空写真を画像タイルに変換する gdal2tiles.pyを使う 地球とPython - こんなところにPythonが Vol.1 26

27.

PythonでのGIS処理の例 (2) ベクター処理 線のデータにbufferをかける GeoPandasを使う 地球とPython - こんなところにPythonが Vol.1 27

28.

PythonでのGIS処理の例 (3) OpenStreetMapのデータ処理 OpenStreetMapのデータを解析して、特定の地域のコミット数を取得する PyOsmiumを使う OpenStreetMapのデータを解析して、街路構造の分析や可視化を行う OSMnxを使う 地球とPython - こんなところにPythonが Vol.1 28

29.

おまけ、点群の処理をする LiDARデータを変換する PDALを使う Pythonインターフェイスあり 点群を3DTiles 1.0形式(pnts)に変換する py3dtilesを使う 大きな点群にはちょっと向いてないので注意 地球とPython - こんなところにPythonが Vol.1 29

30.

Pythonでよくある話 PythonでGIS処理をすると内部的にnumpyが使われる事が多い numpyの高度な機能を使うことで、高速に処理ができる GDALの場合、numpyの配列を使ってデータを処理することが多い gdal_calc.pyなどそのまんまPythonのスクリプトもGDALに付属している その他、一緒にpandasやgeoPandasを使うなど Jupiter Notebookを使うことも多い 僕はvenv派! 地球とPython - こんなところにPythonが Vol.1 30

31.

FOSS4Gの世界 地球とPython - こんなところにPythonが Vol.1 31

32.

FOSS4Gとは Free and Open Source Software for Geospatialの略 地理空間情報を扱うためのOSSの総称 OSGeo(Open Source Geospatial Foundation)が中心となって開発されている イベント名としてFOSS4Gというカンファレンスがある 毎年日本でもFOSS4G Japanが開催されている その他FOSS4G Tokai/FOSS4G Hokkaidoなどがある Globalイベントは毎年異なる国で開催される 今年はニュージーランド 来年もしかすると日本、広島の可能性がある 地球とPython - こんなところにPythonが Vol.1 32

33.

FOSS4Gの代表的なライブラリ/ツール QGIS GDAL/OGR PostGIS OpenLayers GeoServer/MapServer GRASS GIS 地球とPython - こんなところにPythonが Vol.1 33

34.

QGISの紹介 QGISはQt5及びGDAL/OGRをベ ースにしたOSSのGISソフトウェ ア 本年度中にQt6に移行する 予定 GPL-2.0 ライセンス 地球とPython - こんなところにPythonが Vol.1 34

35.

QGISの仕組み PyQt5を使ってGUIを構築 主にGDAL/OGRを使ってデータを読み込み 他にもGRASS GISやSAGA GISなども使える 地球とPython - こんなところにPythonが Vol.1 35

36.

QGISの注意点 OSごとにサポートされているライブラリが異なる Windows版は新しいライブラリがサポートされている Linux版はdistributionに依存する macOSはGDALのバージョンが古い そのため、GeoParquetを使う場合は注意が必要 conda-forgeを使うという手もあるが未検証 macOSの問題は現在PRが出ているのでQt6ベースになると問題が解消さ れる可能性がある 地球とPython - こんなところにPythonが Vol.1 36

37.

QGISプラグイン QGISはプラグインを用いて拡張が可能 プラグインはPythonで書かれている 基本的にCross Platform 作ったプラグインは公式レポジトリに登録することができる 地球とPython - こんなところにPythonが Vol.1 37

38.

QGISのプラグインの例 Japanese Grid Mesh メッシュコードを表示する便利なプラグイン GTFS-GO 路線図などのGTFSデータを表示するプラグイン 地球とPython - こんなところにPythonが Vol.1 38

39.

GTFS-GOのデモ 地球とPython - こんなところにPythonが Vol.1 39

40.

Python以外の言語でのGIS処理 地球とPython - こんなところにPythonが Vol.1 40

41.

R言語 数値計算言語として有名 統計解析などに使われる Rのライブラリとしてsfが有名 Rのライブラリとしてはかなり高機能 地球とPython - こんなところにPythonが Vol.1 41

42.

Ruby RubyのライブラリとしてRGeoが有名 Ruby on Railsでも利用可能 rgeo activerecord-postgis-adapterなど 地球とPython - こんなところにPythonが Vol.1 42

43.

JavaScript/TypeScript JavaScript/TypeScriptのライブラリとしてLeaflet/MapLibre GL JSが有名 Turf.jsによる地理空間解析も可能、ブラウザだけでなくNode.jsでも利用可能 React Native上で空間解析もできる サーバサイドの実装も結構ある TileServer GLなど 地球とPython - こんなところにPythonが Vol.1 43

44.

Rust MIERUNE社のPLATEAU GIS CONVERTERなど Rustで書かれたGISデータ変換ツール Martin (ベクタタイルサーバ) MapLibre界隈では最近MapLibre NativeがRustをサポートしたりなど、Rustが 活発に検討されている 地球とPython - こんなところにPythonが Vol.1 44

45.

ご清聴ありがとうございました 地球とPython - こんなところにPythonが Vol.1 45

46.

おまけ JICAの講義資料 2024年度の講義資料(英語) 上記のスクリプト ほぼMakefileで書かれている 地球とPython - こんなところにPythonが Vol.1 46