はじめに
OAC(Oracle Analytics Cloud)で郵便番号や行政区画、区画図などの大規模な地理データを地図上に表示しようとした際、描画が重いと感じたことはありませんか?
従来の方式では、すべての形状データを一度にダウンロードして処理するため、データが複雑になるほどリソースを消費してしまいます。これを解決するのが 「ベクトル・タイル」を活用したベクトル・マップ・レイヤーです。
この記事では、ベクトル・マップ・レイヤーの仕組みと設定方法を解説します。
1. ベクトル・タイルとは?
ベクトル・タイルは、地図データを小さく圧縮された「タイル」という単位に分割して配信する技術です。
- 必要な分だけ表示: ズームレベルや表示エリアに合わせて、今見えている部分のタイルだけをストリーミングします。
- 高速・軽量: ネットワーク負荷を大幅に軽減し、スムーズな拡大・縮小やパン(移動)が可能になります。
- 大規模データに最適: 数千から数万もの詳細なポリゴン(多角形)を持つデータセットでも、一貫したパフォーマンスを維持できます。
2. 実装のアーキテクチャ
ベクトル・マップ・レイヤーを表示するためには、以下の3つのコンポーネントが連携します。
-
Oracle Autonomous AI Database: 空間データ(
SDO_GEOMETRY)を保存し、ベクトル・タイルを生成します。 - Oracle REST Data Services (ORDS): データベースで生成したタイルをREST APIのエンドポイントとして公開します。
- Oracle Analytics Cloud: 公開されたREST APIを「マップ・レイヤー」として登録し、視覚化に使用します。
3. 設定の6ステップ
ベクトル・マップ・レイヤーを使えるようにするまでの流れは以下の通りです。
ステップ1:空間データの準備
Oracle Autonomous AI Databaseに、位置情報を含むデータを保存します。形状データ(GEOM列など)が正しく構成されていることを確認します。
desc demouser.SDO_GEM_KANAGAWA
名前 Nullかどうか タイプ
---------- -------- ------------------
CITY VARCHAR2(40)
GEOMETRY MDSYS.SDO_GEOMETRY
ステップ2:ベクトル・タイルの公開
ORDSを使用して、タイルを取得するためのURLパターン(例: /{module}/vt/{z}/{x}/{y}.pbf)を作成します。
- REST Data Serviceモジュールの定義
BEGIN
ORDS.DEFINE_MODULE(
P_MODULE_NAME => 'kanagawapbf',
P_BASE_PATH => '/kanagawapbf/',
P_ITEMS_PER_PAGE => 25,
P_STATUS => 'PUBLISHED',
P_COMMENTS => 'Vector tile service for Kanagawa Pref'
);
END;
/
- タイルURL構造の登録
BEGIN
ORDS.DEFINE_TEMPLATE(
P_MODULE_NAME => 'kanagawapbf',
P_PATTERN => 'vt/:z/:x/:y',
P_PRIORITY => 0,
P_ETAG_TYPE => 'HASH'
);
END;
/
- ベクトル・タイル・ハンドラの実装
BEGIN
ORDS.DEFINE_HANDLER(
P_MODULE_NAME => 'kanagawapbf',
P_PATTERN => 'vt/:z/:x/:y',
P_METHOD => 'GET',
P_SOURCE_TYPE => ORDS.SOURCE_TYPE_MEDIA,
P_SOURCE => q'[
SELECT 'application/vnd.mapbox-vector-tile' AS mediatype,
SDO_UTIL.GET_VECTORTILE(
TABLE_NAME => 'SDO_GEM_KANAGAWA',
GEOM_COL_NAME => 'GEOMETRY',
ATT_COL_NAMES => SDO_STRING_ARRAY('CITY'),
TILE_X => :x,
TILE_Y_PBF => :y,
TILE_ZOOM => :z
) AS vtile
FROM dual
]'
);
END;
/
ステップ3:バウンディング・ボックス(境界)情報の公開
OACが地図のズームレベルやラベルの位置を正しく判断するために、各エリアの「境界(矩形)」や「中心点」の情報をGeoJSON形式で提供するエンドポイントを用意します。
- メタデータ・キャッシュ表の作成
CREATE TABLE KANAGAWA_GEOJSON_CACHE (
ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
GEOJSON_CONTENT CLOB,
CREATED_AT TIMESTAMP DEFAULT SYSTIMESTAMP
);
- メタデータの計算およびGeoJSONのアセンブル
DECLARE
l_geojson CLOB := '{"type":"FeatureCollection","features":[';
first BOOLEAN := TRUE;
BEGIN
FOR r IN (
SELECT CITY,
SDO_UTIL.TO_GEOJSON(SDO_GEOM_MBR(GEOMETRY)) AS geometry,
(SDO_UTIL.INTERIOR_POINT(GEOMETRY)).SDO_POINT.X AS CX,
(SDO_UTIL.INTERIOR_POINT(GEOMETRY)).SDO_POINT.Y AS CY
FROM SDO_GEM_KANAGAWA
)
LOOP
IF NOT first THEN
l_geojson := l_geojson || ',';
END IF;
first := FALSE;
l_geojson := l_geojson ||
'{"type":"Feature","geometry":' || r.geometry ||
',"properties":{"CITY":"' || r.CITY ||
'","CX":' || r.CX ||
',"CY":' || r.CY ||
'}}';
END LOOP;
l_geojson := l_geojson || ']}';
INSERT INTO KANAGAWA_GEOJSON_CACHE (GEOJSON_CONTENT) VALUES (l_geojson);
END;
/
- Oracle REST Data Servicesによるメタデータの公開
BEGIN
ORDS.DEFINE_MODULE(
P_MODULE_NAME => 'kanagawa_meta',
P_BASE_PATH => '/kanagawa_meta/',
P_STATUS => 'PUBLISHED'
);
END;
/
BEGIN
ORDS.DEFINE_TEMPLATE(
P_MODULE_NAME => 'kanagawa_meta',
P_PATTERN => 'geojson',
P_ETAG_TYPE => 'HASH'
);
END;
/
BEGIN
ORDS.DEFINE_HANDLER(
P_MODULE_NAME => 'kanagawa_meta',
P_PATTERN => 'geojson',
P_METHOD => 'GET',
P_SOURCE_TYPE => ORDS.SOURCE_TYPE_MEDIA,
P_SOURCE => q'[
SELECT 'application/geo+json' AS media_type,
GEOJSON_CONTENT
FROM (
SELECT GEOJSON_CONTENT
FROM KANAGAWA_GEOJSON_CACHE
ORDER BY CREATED_AT DESC
)
WHERE ROWNUM = 1
]'
);
END;
/
ステップ4:タイル・キャッシュの有効化
データベース側でタイルのキャッシュ機能を有効にします。これにより、一度生成されたタイルが再利用され、レスポンスがさらに向上します。
EXEC SDO_UTIL.ENABLE_VECTORTILE_CACHE('SDO_GEM_KANAGAWA', 'GEOMETRY');
commit;
ステップ5:OACへのレイヤー登録
ここからはOACの画面操作です。管理者権限でコンソールからレイヤーを登録します。
登録時には、ステップ2と3で用意した2つのURLを入力します。
-
ベクトル・ソース・エンドポイント: タイル(PBF)のURL
https://<host>/ords//kanagawapbf/vt/{z}/{x}/{y}.pbf -
バウンディング・ボックス・エンドポイント: メタデータ(GeoJSON)のURL
https://<host>/ords//kanagawa_meta/geojson
ADBのエンドポイントは、OCI管理コンソールでADBインスタンスの詳細の「ツール構成」で確認できます。
安全ドメインに「*.oraclecloudapps.com」を含めてください。
ステップ6:ワークブックでの視覚化
登録したレイヤーをワークブックで利用します。
-
データセットを登録
神奈川県の市町村別の人口データをデータセットとして登録しました。 -
登録したデータセットで新規ワークブックを作成します。
4. 利用にあたっての注意点とヒント
- ポリゴンのみサポート: 現在のベクトル・タイル生成ワークフローでサポートされているのはポリゴン(多角形)幾何学図形のみです。
-
空間インデックスの推奨: パフォーマンスを最大限に引き出すため、データベース側で空間インデックス(
SPATIAL_INDEX_V2)を作成しておくことが強く推奨されます。 - 初回の読み込み: キャッシュが空の状態での初回表示は少し時間がかかる場合がありますが、一度キャッシュされれば次からは非常に高速になります。
まとめ
ベクトル・マップ・レイヤーを活用することで、これまで表示が難しかった大規模な地図データも、OAC上で快適に分析できるようになります。
データベース(Autonomous Databaseなど)とORDSを組み合わせた強力な地図機能を、ぜひ体験してみてください!
参考資料









