🗺️

OpenLayersでPMTilesを表示する方法

に公開

はじめに

PMTilesとは、タイル化されたデータを単一ファイルに格納したアーカイブ形式です。
https://docs.protomaps.com/pmtiles/

PMTilesを地図上に表示する方法を調べると、(MapLibre GL JS)[https://maplibre.org/maplibre-gl-js/docs/]が使われていることが多いです。
(ほとんどそうかも・・・)

そこで、OpenLayersを使っている場合は表示できるのか調べてみました。

結論

ライブラリol-pmtilesを使う!
https://github.com/protomaps/PMTiles/tree/main/openlayers

pmtiles

そもそも、MapLibre GL JSでの実装で、pmtilesというライブラリが使われてると思います。
https://github.com/protomaps/PMTiles/tree/main?tab=readme-ov-file

そこで、OpenLayers×pmtilesで調べると、OpenLayersの公式で以下のサンプルがヒットします。
https://openlayers.org/en/latest/examples/pmtiles-image.html
https://openlayers.org/en/latest/examples/pmtiles-elevation.html

確かに上記コードをそのまま使うと表示はできるのですが、今回扱いたいPMTIlesは中身がベクトルタイル(.pbf形式)なので、このコードのままだと動きません。

ちなみに、MapLibre GL JSを実装例では、基本PMTilesファイルのパスを読み込ませるだけで特別な記述は不要です。
OpenLayaersでは、PMTilesの読み込みに加え、中身のタイルのロード処理を自分で実装しないといけないので、実装難易度は上がります。
(何度か国土地理院最適化ベクトルタイルのロード処理の実装に挑戦しましたが、上手くいかず断念しました...)

ol-pmtiles

OpenLayersでPMTilesを扱うなら、ol-pmtiles一択でしょう!
https://docs.protomaps.com/pmtiles/openlayers

pmtilesでは自分で実装しないといけないロード処理を内包してくれていルので、コードが簡潔になります、
PMTilesの中身がラスターデータか、ベクトルデータかでコードが変わりますが、ロード処理を実装しなくていいので、こちらを使うしかないです!

こちらを使うと国土地理院最適化ベクトルタイルもサンプルコードのまま使って表示することができました!
(スタイルは何も設定していないですが、スタイル設定もできることは確認できています。)
OpenLayersを使った国土地理院最適化ベクトルタイルの表示

最後に

今回の実装コードは以下のリポジトリにあげています。
https://github.com/htomo1122/ol-gsi-pmtiles-demo

Discussion