ST_AsMVT3D による Mapbox ベクタータイル(MVT)出力の生成に必要なタイル座標系へ、3D ジオメトリを変換します。この関数は、ST_AsMVTGeom を Z 軸対応に拡張したものであり、座標変換時に Z 座標値を保持します。
構文
geometry ST_AsMVTGeom3D(
geometry geom,
box2d bounds,
integer extent = 4096,
integer buffer = 256,
boolean clip_geom = true
);パラメーター
| パラメーター | 型 | 説明 | デフォルト値 | 有効な値 |
|---|---|---|---|---|
geom | geometry | 変換対象の 3D ジオメトリオブジェクトです。 | — | — |
bounds | box2d | バッファーを除く、ターゲット座標参照系(CRS)におけるタイルの矩形境界です。ST_TileEnvelope を使用してこの値を生成します。 | — | — |
extent | integer | MVT 仕様で定義される、タイル座標空間におけるタイルサイズです。 | 4096 | 256–8192 |
buffer | integer | ジオメトリクリッピング用の、タイル座標空間におけるバッファーサイズです。 | 256 | 1–4096 |
clip_geom | boolean | 3D ジオメトリをタイル境界にクリップするかどうかを指定します。 | true | — |
説明
ST_AsMVTGeom3D は、ST_AsMVT3D で使用可能な状態へ 3D ジオメトリを準備します。ジオメトリの座標をタイル空間へ変換し、clip_geom が true の場合、ジオメトリをタイル境界にクリップします。
主な動作は以下のとおりです:
X 座標および Y 座標と同様に Z 軸データも変換し、タイル変換プロセス全体において完全な 3D ジオメトリを保持します。
入力ジオメトリと同じ CRS でタイル境界を指定する必要があります。これにより、ジオメトリを正しく変換およびクリップできます。境界を生成するには、
ST_TileEnvelopeを使用します。内部リングを含む 3D ポリゴンオブジェクトには対応していません。
例
3D ラインストリングをタイル座標空間へ変換
以下の例では、SRID 4326 の 3D ラインストリングを Web メルカトル(SRID 3857)へ変換し、タイル (1, 0, 0) のタイル座標空間へ変換します。
SELECT ST_AsText(
ST_AsMVTGeom3D(
ST_Transform('SRID=4326; LINESTRING(-10 -10 30, -10 -20 30)'::geometry, 3857),
ST_TileEnvelope(1, 0, 0)
)
) AS geom;期待される出力:
geom
------------------------------------------------------------------------------------
MULTILINESTRING Z ((3868.44444444444 4324.7197219642 30,3868.44444444444 4352 30))
(1 row)ST_AsMVT3D を使用した 3D MVT タイルの生成
以下の例では、CTE を使用した完全なタイル生成クエリを示します。テーブルからジオメトリを取得し、タイル座標空間へ変換したうえで、タイル (12, 513, 412) 向けにバイナリ MVT 形式へ集約します。
WITH mvtgeom AS (
SELECT ST_AsMVTGeom3D(
ST_Transform(geom, 3857),
ST_TileEnvelope(12, 513, 412),
extent => 4096,
buffer => 256
) AS geom
FROM your_3d_table
WHERE geom && ST_Transform(ST_TileEnvelope(12, 513, 412), 4326)
)
SELECT ST_AsMVT3D(mvtgeom.*)
FROM mvtgeom;your_3d_table は、3D ジオメトリデータを格納するテーブル名に置き換えてください。
関連ドキュメント
ST_AsMVT3D — タイルジオメトリをバイナリ MVT 形式へ集約します
ST_AsMVTGeom — 本関数が拡張する PostGIS の 2D 関数
ST_TileEnvelope — タイル境界ボックスを生成します