3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

unvt を つかって GeoJSONやシェープファイルからPMtilesを簡単につくる(Docker利用)

Last updated at Posted at 2023-01-06

はじめに

tippecanoe (felt/tippecanoe)の v2.17 から PMTilesがサポートされたというつぶやきをみました。

私はまだPMTiles初心者ですが、最近注目の技術ということもあり、簡単にPMtilesを作ってみる実験をしてみました。

Docker環境ですぐにできます。unvt/nanban と それに含まれる unvt/kata と felt/tippecanoe を使うと簡単です。

環境

  • Windows 10
  • Docker
    • unvt/nanban イメージを使います
      • unvt/kata v1.0.4
      • tippecanoe v2.17.0
      • gdal(ogr2ogr) GDAL 3.4.1, released 2021/12/27

手順

Docker コンテナ起動とデータの準備

今回は、もともとGeoJSON形式でインターネット上にあるファイル2つと、ダウンロードしてきた海岸線のシェープファイルを使います。

シェープファイルはNaturalEarthの50mスケールの海岸線をダウンロードしてsrcフォルダに入れておいてから、gdalでGeoJSONに変換します。
image.png

Dockerのunvt/nanbanイメージを起動して、シェープファイルをGeoJSONに変換するために以下のようにコマンドを実行します。(拡張子をgeojsonsにするとGeoJSONseq形式になりますが、unvt/kataがGeoJSONseqのファイルをよまないので今回はgeojsonに出力します。)

docker run -it --rm -v ${PWD}:/data unvt/nanban
cd /data
mkdir src
# srcフォルダにデータを入れておく
ogr2ogr coastline.geojson src/ne_50m_coastline.shp

これで使うデータが以下の通りで準備できました。

ソース、レイヤ、ズームレベルを整理してYAMLファイルにする

YAMLファイルに書いた通りですが、ソース名(キーというか、これがベクトルタイルのレイヤ名になる)、URL、ズームレベルなどを決めます。以下のように整理しました。本当はsalb-senとsalb-codは同じsalbというレイヤにしたかったのですが、キーが同じだとエラーになるのでできませんでした。今後のkataの改良ポイントですね。

kata.yml
coastline: #this will be a layer name
  source: ./coastline.geojson
  minzoom: 0
  maxzoom: 5
salb-sen:
  source: https://geoportal.un.org/arcgis/sharing/rest/content/items/3b628266c28345ecbcac152255eba4be/data
  properties:
    country: SEN
  minzoom: 0
  maxzoom: 5
salb-cod: 
  source: https://geoportal.un.org/arcgis/sharing/rest/content/items/2b37e02f41f942e69892b95ea49b56f0/data
  properties:
    country: COD
  minzoom: 0
  maxzoom: 5

出力をテスト

作ったYAMLファイルを使ってkataのフィルタ機能を試します。まずは、stdoutのまま、画面で確認します。

kata filter kata.yml

きちんと出力されていそうなことを確認します。
image.png

出力をtippecanoeにパイプする

今度は出力をベクトルタイル作成ツールのtippecanoeにつなぎます。TippecanoeでPMTilesを作るためには、-o オプションで拡張子をmbtilesの代わりにpmtilesにすればよいみたいです。試しに圧縮なしとありで出力してみました。

kata filter kata.yml | tippecanoe -o test.pmtiles --no-tile-compression --no-feature-limit --no-tile-size-limit
kata filter kata.yml | tippecanoe -o test2.pmtiles --no-feature-limit --no-tile-size-limit

若干ファイルサイズが違いますが、PMtilesができました。

Protomapsのページでプレビューしてみる

作成したPMtilesをドラッグ、ドロップするだけでプレビューできるそうなのでためします。
image.png

https://protomaps.github.io/PMTiles/ のページでプレビューしてみます。
image.png

圧縮なしでもありでも同じように見えます。
image.png

ポップアップも見られて便利です。
image.png

まとめ

すごく簡単に、PMtilesの作り方をまとめました。
Dockerが使えれば、すぐにできます。

参考ページ

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?