2023年2月13日月曜日

MapLibre 3D TerrainのサンプルをAPEXで実装してみる

 Oracle APEXのマップ・コンポーネントはMapLibre GL JSを組み込んでいます。

MapLibreに限りませんが、こういったライブラリのサンプルを、とりあえずAPEXのアプリに組み込む方法を紹介します。

MapLibreの3D Terrainのサンプルは以下のページで紹介されています。

https://maplibre.org/maplibre-gl-js-docs/example/3d-terrain/

一部を除きmetaタグの設定はできず、またviewportはAPEXのユニバーサル・テーマが設定するものなので、こちらはAPEXアプリには設定しません。

script要素でJavaScriptのライブラリが指定されています。また、link要素としてCSSのスタイルシートが指定されています。

<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<script src="https://unpkg.com/maplibre-gl@2.4.0/dist/maplibre-gl.js"></script>
<link href="https://unpkg.com/maplibre-gl@2.4.0/dist/maplibre-gl.css" rel="stylesheet" />

scriptで指定されているJavaScriptファイルは、ページ・プロパティJavaScriptファイルURLに指定します。スタイルシートCSSファイルURLに指定します。



ページにマップ・リージョンが含まれないと、APEXはMapLibreのライブラリをロードしません。また、MapLibreの3D Terrainの例で使用されているライブラリのバージョンが、APEXで使用されているものより新しいため、ファイルURLにJavaScriptとCSSのファイルを指定しています。

静的コンテンツのリージョンを作成し、ソースHTMLコードとして<div id="map"></div>を書き込みます。このDIV要素が、MapLibreのライブラリによって描かれる地図のコンテナになります。(3D Terrainのサンプルのソースに<div id="map"></div>が記述されています。)


作成したAPEXのリージョンのテンプレートテンプレート・オプションを設定します。テンプレートの選択やテンプレート・オプションの設定によっては、地図が適切に表示されません。


scriptとして記述されているJavaScriptのコードをJavaScriptページ・ロード時に実行に転記します。


3D Terrainのサンプルには、idがmapの要素に対して、CSSの指定が含まれています。

#map { position: absolute; top: 0; bottom: 0; width: 100%; }

これは、ページ・プロパティCSSインラインに転記します。


以上の作業の結果が、本記事の先頭の画面になります。

まずはサンプルをAPEXで動かさないことには、それを使った実装を確認していくのも難しいでしょう。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/maplibre-3d-terrain.zip

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