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
从 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))