名称

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 是地图坐标空间中切片的矩形边界,没有缓冲区。

extentMVT 规范 中定义的切片坐标空间中的切片范围大小。默认为 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 切片的规范示例。

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

另请参见

ST_AsMVTST_TileEnvelopePostGIS_Wagyu_Version