名稱

ST_AsMVTGeom — 將幾何圖形轉換為 MVT 圖磚的座標空間。

概要

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

描述

將幾何圖形轉換為 MVT(Mapbox 向量圖磚)圖磚的座標空間,如果需要,會將其裁剪到圖磚邊界。幾何圖形必須位於目標地圖的座標系統中(如果需要,請使用ST_Transform)。通常這是Web Mercator(SRID:3857)。

此函數會嘗試保留幾何圖形的有效性,並在需要時修正它。這可能會導致結果幾何圖形塌陷到較低的維度。

必須提供目標地圖座標空間中圖磚的矩形邊界,以便可以轉換幾何圖形,並在需要時進行裁剪。可以使用ST_TileEnvelope生成邊界。

此函數用於將幾何圖形轉換為ST_AsMVT所需的圖磚座標空間。

geom是要轉換的幾何圖形,位於目標地圖的座標系統中。

bounds是地圖座標空間中圖磚的矩形邊界,沒有緩衝區。

extent是圖磚座標空間中圖磚範圍大小,由MVT 規範定義。預設為 4096。

buffer是圖磚座標空間中用於幾何圖形裁剪的緩衝區大小。預設為 256。

clip_geom是一個布林值,用於控制幾何圖形是否被裁剪或按原樣編碼。預設為 true。

可用性:2.4.0

[Note]

從 3.0 開始,可以在配置時選擇 Wagyu 來裁剪和驗證 MVT 多邊形。此函式庫比 GEOS 預設值更快,並且產生更正確的結果,但它可能會丟棄小型多邊形。

範例

SELECT ST_AsText(ST_AsMVTGeom(
	ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
	ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
	4096, 0, false));
                              st_astext
--------------------------------------------------------------------
 MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))
		

使用計算的圖磚邊界來查詢和裁剪幾何圖形的 Web Mercator 圖磚的典型範例。這假設 data.geom 資料行具有 4326 的 SRID。

SELECT ST_AsMVTGeom(
            ST_Transform( geom, 3857 ),
            ST_TileEnvelope(12, 513, 412), extent => 4096, buffer => 64) AS geom
  FROM data
  WHERE geom && ST_Transform(ST_TileEnvelope(12, 513, 412, margin => (64.0 / 4096)),4326)