1 of 35

Static vs Dynamic:

Martinで始めるDynamic Tiling

FOSS4G Tokai 2023

IGUCHI Kanahiro

2 of 35

井口 奏大

自己紹介

IGUCHI Kanahiro

GIS/OSS Enthusiast

CTO at MIERUNE

MapLibre User Group Japan

©Project PLATEAU / MLIT Japan

3 of 35

自己紹介

著書「現場のプロがわかりやすく教える位置情報エンジニア養成講座」

全国の書店・ECサイトにて好評発売中です!

©Project PLATEAU / MLIT Japan

4 of 35

自己紹介

技術評論社「Software Design」にて

「位置情報エンジニアリングのすすめ」連載中

©Project PLATEAU / MLIT Japan

5 of 35

MIERUNEは位置情報に関する

豊富な技術や実績を持つ

ソリューションカンパニーです

MIERUNEはこんな会社です

み え る ね

© 地理院地図 全国最新写真(シームレス)

6 of 35

位置情報は身近なところで使われています

インフラ

防災

交通

ナビ

ゲーム

環境

マーケティング

位置情報

データ

(GIS)

© 地理院地図 全国最新写真(シームレス)

7 of 35

QGIS

QGIS事業紹介

  • 位置データの閲覧・解析が

できる、オープンソースの

デスクトップGISソフト

  • 商用ソフトより使いやすく

多機能

  • 産学官問わず、国内外で

広く使用されている

©Project PLATEAU / MLIT Japan

8 of 35

MapTiler

事業紹介

  • 自由で美しいウェブ地図
  • 低廉なコストで導入可能
  • カスタマイズや開発も可能

Google MapsやMapboxから乗り換えませんか

©Project PLATEAU / MLIT Japan

9 of 35

MIERUNE BASE

事業紹介

  • 組織内に散在している  データを一括で共有
  • 最新データがすぐわかる
  • ソフト無しでも閲覧可能

GISデータ共有サービス

©Project PLATEAU / MLIT Japan

10 of 35

MIERUNEのソリューション

Python

QGIS

DEM

点群

3D

MapTiler

PLATEAU

オープンソース

位置情報

可視化

住所検索

ルート検索

気象データ

GTFS

LiDAR

FOSS4G

OSGeo

OpenStreetMap

MapLibre

Deck.gl

Cesium

Mapbox

OpenLayers

OpenMapTiles

GeoDjango

Amazon Location Service

AWS

Leaflet

Minecraft

衛星データ

機械学習

ベクトルタイル

Cloud-Optimzied

STAC

オープンデータ

© 地理院地図 全国最新写真(シームレス)

11 of 35

自己紹介

©Project PLATEAU / MLIT Japan

12 of 35

SNSもいろいろやってます

Twitter

@MIERUNE_inc

note

mierune

YouTube

mierune

Qiita

mierune

© 地理院地図 全国最新写真(シームレス)

13 of 35

We are hiring!

未来に挑戦する仲間を

募集しています

仲間を募集中

MIERUNE

検索

© 地理院地図 全国最新写真(シームレス)

14 of 35

01|What is Dynamic Tiling?

02|Why Dynamic Tiling?

03|Martin tile server

Contents

©OpenStreetMap contributors

15 of 35

What is Dynamic Tiling?

01

©OpenStreetMap contributors

16 of 35

What is Dynamic Tiling?

  • Dynamic Tilingとは、動的タイル生成のことで、タイルリクエストが生じた際に、タイルデータを作成しレスポンスする仕組みをいいます。
  • ちなみに、動的タイル自体は別に新しい話ではなく、ラスターデータに関して言えば随分前に通ってきた道です。
    • たとえばWMTSによるタイル配信は、Dynamic Tilingと言えるでしょう。
    • また、Tileserver-glのようなスタイル済みのタイル配信も、動的タイル生成と言えます。
  • このセッションではベクトルタイルの動的配信に注目します。

タイルリクエスト

z/x/y

タイル生成

レスポンス

タイルデータ

©Project PLATEAU / MLIT Japan

17 of 35

What is Dynamic Tiling?

  • 一方、現在一般的なタイルの配信方法は、あらかじめ全てのタイルデータを作り切っておく、つまり静的タイル生成ーStatic Tilingです
  • よく使われるソフトウェア:
    • Tippecanoe、Planetiler、PMTiles など…

タイルリクエスト

z/x/y

タイル生成

レスポンス

タイルデータ

©Project PLATEAU / MLIT Japan

18 of 35

Why Dynamic Tiling?

02

©OpenStreetMap contributors

19 of 35

Why Dynamic Tiling?

  • 現在、静的タイル配信が流行しているのは以下の理由によるでしょう:
    • パフォーマンス: ファイルをレスポンスするだけなので速い安い旨い
    • シンプル: 「ファイルを作って配置するだけ」はわかりやすい
    • スケーラビリティ: AWS S3などに置くだけでロバストに配信

©Project PLATEAU / MLIT Japan

20 of 35

Why Dynamic Tiling?

  • ただし静的タイル配信には大きな問題があります:
    • データが変更されるとタイルを再生成しなければならない
    • 最悪のケースでは、全てのタイルの再生成が必要です(例:カラム追加)

©Project PLATEAU / MLIT Japan

21 of 35

Why Dynamic Tiling?

  • たとえば1日に何度も変更されるデータセットがあるとして、毎回タイルを生成しなおすのは現実的ではないでしょう
  • なので、それなりの頻度で更新されうるデータは、静的タイル配信には適していません
    • (トレードオフの話なので、1日1回更新、などで妥協することも一案)

©Project PLATEAU / MLIT Japan

22 of 35

Why Dynamic Tiling?

  • このような随時更新されるデータでも、最新の内容を配信したいことがよくあります、出来ればタイルで。

→そんなときに動的タイル配信!

©Project PLATEAU / MLIT Japan

23 of 35

Why Dynamic Tiling?

  • ベクトルタイルでも動的タイル配信ーリクエスト時にタイルを生成する配信方法を導入し、PostGISにあるデータをタイルとして配信することを考えます。

©Project PLATEAU / MLIT Japan

24 of 35

Martin tile server

03

©OpenStreetMap contributors

25 of 35

Martin tile server

©Project PLATEAU / MLIT Japan

26 of 35

Martin tile server

  • 今回はMartinというRustで書かれたタイルサーバーを利用します。
  • ちなみに、PostGISバックエンドなタイルサーバーは他にもいくつか選択肢があります:
    • tipg: Pythonで書かれている。OGC APIまで含むベクトルデータサーバー、新しめ。
    • pg_tileserv: Goで書かれている、Martinが影響を受けている。
    • tegola: Goで書かれている。古い。
    • t-rex: 始祖。Rustで書かれている。古い。

©Project PLATEAU / MLIT Japan

27 of 35

Martin tile server: 余談

  • Martinを筆頭に、新しめのタイルサーバーは全てST_AsMVTというPostGISの関数に依存しています。
  • この関数によりDB側でタイルデータを作成してバイナリを吐きます。
  • 何度かのアップデートにより動的生成に耐えるくらい速くなっています。

©Project PLATEAU / MLIT Japan

28 of 35

Martin tile server: サーバー構成

クライアント

Martin�SQL実行

PostGIS

タイル生成

Nginx

※今回はNginxは単にHTMLの配信にしか使いません。リバースプロキシ・キャッシュを利用すると、より実践的な構成になるでしょう。

今回はdocker composeでこれらサーバー群を設定していきます。サンプルコードは以下。

https://github.com/Kanahiro/postgis-mvt-servers-demo/tree/main

©Project PLATEAU / MLIT Japan

29 of 35

Martin tile server: DBにデータ投入

PostGISに行政区域データを投入

©Project PLATEAU / MLIT Japan

30 of 35

Martin tile server: DBに接続

これだけ

  • PostgreSQLへのconnection stringを渡してやるだけで、Martinがテーブルを一覧して、利用可能な自動的にエンドポイントを作成してくれます。
  • もちろんより高度な設定もできます。

©Project PLATEAU / MLIT Japan

31 of 35

Martin tile server: クライアントからサーバーへリクエスト

©Project PLATEAU / MLIT Japan

32 of 35

Martin tile server: デモ

©Project PLATEAU / MLIT Japan

33 of 35

Martin tile server: 動的タイルのメリット・デメリット

  • メリット
    • データが更新されるとタイルにも反映される
    • データ変換のパイプラインが不要
  • デメリット
    • サーバー・DBの負荷が大きい=コストが大きい
      • ズームレベルを制限すれば負荷は気にならないが、スケーラビリティは課題になる。
    • 低ズームの地物の自動的な間引き(dropping)が無い

�動的タイルでレッツ最新データ配信!

©Project PLATEAU / MLIT Japan

34 of 35

  • 静的タイル配信はパフォーマンス・コストに優れるが、最新データの配信には不向き
  • MartinとPostGISでかんたんに動的タイル配信!でもサーバー負荷には気を遣おう

まとめ

© 地理院地図 全国最新写真(シームレス)

35 of 35

© 地理院地図 全国最新写真(シームレス)