2025年2月13日木曜日

国土地理院が試験公開している最適化ベクトルタイルのPMTiles版をマップの背景にする

Oracle APEX 23.2より、開発者が共有コンポーネントとしてマップ背景を設定することができます。このマップ背景として、国土地理院がGitHubで試験公開している最適化ベクトルタイルのPMTiles版を設定してみます。

今回の作業で参照している国土地理院による最適化ベクトルタイル試験公開のページは以下です。

最適化ベクトルタイルは、国土地理院コンテンツ利用規約に従って利用できます。記事に沿って作業を行なう場合は、利用規約について確認してください。問題は無いと思いますが、気になるので今回の記事はAPEXアプリケーションのエクスポートは添付しません。


以下より作成したアプリケーションについて説明します。

空のAPEXアプリケーションを作成します。名前国土地理院最適化ベクトルタイルとします。


アプリケーションが作成されます。

ページ・デザイナホーム・ページを開き、マップ・リージョンを作成します。


新規のリージョンを作成します。識別名前Mapタイプマップを選択します。


マップには最低でも1つのレイヤーが必要なので、レイヤーに最低限の設定を行います。

レイヤー新規を選択し、識別名前ポイントに変更します。レイヤー・タイプとしてポイントを選びます。

ソースタイプSQL問合せを選択し、SQL問合せとして以下のSQLを記述します。東京都の緯度経度を返しています。

select 35.652832 as lat, 139.839478 as lon from dual;

列のマッピングジオメトリ列のデータ型として経度/緯度を選択し、経度列としてLON緯度列としてLATを選びます。


マップ・リージョンを選択し、属性タブを開きます。

初期位置およびズームタイプ静的値とし、経度139.839478緯度35.652832ズーム・レベル6として、東京の周辺を最初に表示するようにします。


この時点でアプリケーションを実行すると、デフォルトのマップ背景が表示されます。


Oracle APEXのマップ・リージョンはMapLibreを使用しています。組み込まれているMapLibreのバージョンはAPEXのバージョンにより異なります。それぞれのバージョンに組み込まれている3rd PartyのJavaScriptライブラリのバージョンは、リリース・ノートに記載されています。

今回はAPEX 24.1でアプリケーションを作成しているため、組み込まれているMapLibreのバージョンは4.0.1になります。

APEXそのままの状態では、MapLibreにPMTilesのプロトコル・ハンドラが登録されていません。ページ・プロパティに以下の設定を追加し、MapLibreにPMTilesのプロトコル・ハンドラを追加します。

ページ・プロパティJavaScriptファイルURLに以下を設定します。PMTilesのプロトコル・ハンドラの実装です。

https://cdn.jsdelivr.net/npm/pmtiles@4.2.1/dist/pmtiles.min.js

ページ・ロード時に実行に以下を記述します。
let protocol = new pmtiles.Protocol();
maplibregl.addProtocol("pmtiles", protocol.tile);
以上で、MapLibreにPMTilesのプロトコル・ハンドラが追加されます。


マップ背景を作成します。

共有コンポーネントマップ背景を開きます。


作成をクリックします。


作成するマップ背景の名前国土地理院 標準地図とします。タイプベクター・タイル・レイヤーを選択します。

スタイルシートをマップするURLとして、GitHubに保存されている標準地図のstyle.jsonである、std.jsonを参照します。

https://raw.githubusercontent.com/gsi-cyberjapan/optimal_bvmap/refs/heads/main/style/std.json

以上で、マップ背景の作成をクリックします。


同様の手順で白地図のマップ背景を作成します。

名前国土地理院 白地図スタイルシートをマップするURLに以下を設定します。

https://raw.githubusercontent.com/gsi-cyberjapan/optimal_bvmap/refs/heads/main/style/skeleton.json


マップ背景として国土地理院 標準地図国土地理院 白地図が作成されました。


マップ背景を変更します。最初に国土地理院 標準地図を表示します。

マップ・リージョンの属性を開き、背景共有コンポーネント標準国土地理院 標準地図を選択します。


ページを実行すると、以下のように地図の表示が変わります。


ズームなどをして、表示を確認します。


マップ背景を国土地理院 白地図に切り替えます。


表示が白地図に切り替わります。


国土地理院からは地理院地図Vector提供実験として、地理院タイル(ラスタ)と同じ方式で配信しているベクトルタイルもあります。

このページにstyle.jsonが掲載されていますが、APEXのマップ・リージョンで読み込もうとすると、version、sources、layersといったプロパティがないというエラーが発生します。このstyle.jsonはOracle APEXでは扱えないようです。


MapLibreにPMTilesのプロトコル・ハンドラが組み込めたので、国土地理院が提供している地図に限らず、PMTilesのプロトコルで提供している地図で、style.jsonへの参照URLがあれば、マップ背景にできるでしょう。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。