4
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?

OACで大規模な地図データをサクサク表示!「ベクトル・マップ・レイヤー」の活用ガイド

4
Last updated at Posted at 2026-02-24

はじめに

OAC(Oracle Analytics Cloud)で郵便番号や行政区画、区画図などの大規模な地理データを地図上に表示しようとした際、描画が重いと感じたことはありませんか?

従来の方式では、すべての形状データを一度にダウンロードして処理するため、データが複雑になるほどリソースを消費してしまいます。これを解決するのが 「ベクトル・タイル」を活用したベクトル・マップ・レイヤーです。

この記事では、ベクトル・マップ・レイヤーの仕組みと設定方法を解説します。

1. ベクトル・タイルとは?

ベクトル・タイルは、地図データを小さく圧縮された「タイル」という単位に分割して配信する技術です。

  • 必要な分だけ表示: ズームレベルや表示エリアに合わせて、今見えている部分のタイルだけをストリーミングします。
  • 高速・軽量: ネットワーク負荷を大幅に軽減し、スムーズな拡大・縮小やパン(移動)が可能になります。
  • 大規模データに最適: 数千から数万もの詳細なポリゴン(多角形)を持つデータセットでも、一貫したパフォーマンスを維持できます。

2. 実装のアーキテクチャ

ベクトル・マップ・レイヤーを表示するためには、以下の3つのコンポーネントが連携します。

  1. Oracle Autonomous AI Database: 空間データ(SDO_GEOMETRY)を保存し、ベクトル・タイルを生成します。
  2. Oracle REST Data Services (ORDS): データベースで生成したタイルをREST APIのエンドポイントとして公開します。
  3. 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の画面操作です。管理者権限でコンソールからレイヤーを登録します。

image.png

image.png

登録時には、ステップ2と3で用意した2つのURLを入力します。

  • ベクトル・ソース・エンドポイント: タイル(PBF)のURL
    https://<host>/ords//kanagawapbf/vt/{z}/{x}/{y}.pbf
  • バウンディング・ボックス・エンドポイント: メタデータ(GeoJSON)のURL
    https://<host>/ords//kanagawa_meta/geojson

image.png

ADBのエンドポイントは、OCI管理コンソールでADBインスタンスの詳細の「ツール構成」で確認できます。

image.png

安全ドメインに「*.oraclecloudapps.com」を含めてください。

image.png

ステップ6:ワークブックでの視覚化

登録したレイヤーをワークブックで利用します。

  1. データセットを登録
    神奈川県の市町村別の人口データをデータセットとして登録しました。

  2. 登録したデータセットで新規ワークブックを作成します。

  3. 「ビジュアライゼーションの選択」で「マップ」を選択します。
    image.png
    image.png

  4. データセットのキー列を「カテゴリ(位置)」に配置します。
    image.png

  5. プロパティの「レイヤー」タブで、作成したベクトル・レイヤーを選択します。
    image.png

4. 利用にあたっての注意点とヒント

  • ポリゴンのみサポート: 現在のベクトル・タイル生成ワークフローでサポートされているのはポリゴン(多角形)幾何学図形のみです。
  • 空間インデックスの推奨: パフォーマンスを最大限に引き出すため、データベース側で空間インデックス(SPATIAL_INDEX_V2)を作成しておくことが強く推奨されます。
  • 初回の読み込み: キャッシュが空の状態での初回表示は少し時間がかかる場合がありますが、一度キャッシュされれば次からは非常に高速になります。

まとめ

ベクトル・マップ・レイヤーを活用することで、これまで表示が難しかった大規模な地図データも、OAC上で快適に分析できるようになります。
データベース(Autonomous Databaseなど)とORDSを組み合わせた強力な地図機能を、ぜひ体験してみてください!

image.png

参考資料

4
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
4
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?