ST_AsMVTGeom
Name
ST_AsMVTGeom — Transforms a geometry into the coordinate space of a MVT tile.
Synopsis
geometry
ST_AsMVTGeom
(
geometry
geom
, box2d
bounds
, integer
extent=4096
, integer
buffer=256
, boolean
clip_geom=true
)
;
Description
Transforms a geometry into the coordinate space of a MVT ( Mapbox Vector Tile ) tile, clipping it to the tile bounds if required. The geometry must be in the coordinate system of the target map (using ST_Transform if needed). Commonly this is Web Mercator (SRID:3857).
The function attempts to preserve geometry validity, and corrects it if needed. This may cause the result geometry to collapse to a lower dimension.
The rectangular bounds of the tile in the target map coordinate space must be provided, so the geometry can be transformed, and clipped if required. The bounds can be generated using ST_TileEnvelope .
This function is used to convert geometry into the tile coordinate space required by ST_AsMVT .
geom
is the geometry to transform, in the coordinate system of the target map.
bounds
is the rectangular bounds of the tile in map coordinate space, with no buffer.
extent
is the tile extent size in tile coordinate space as defined by the
MVT specification
. Defaults to 4096.
buffer
is the buffer size in tile coordinate space for geometry clippig. Defaults to 256.
clip_geom
is a boolean to control if geometries are clipped or encoded as-is. Defaults to true.
Availability: 2.4.0
From 3.0, Wagyu can be chosen at configure time to clip and validate MVT polygons. This library is faster and produces more correct results than the GEOS default, but it might drop small polygons. |
Examples
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)))
Canonical example for a Web Mercator tile using a computed tile bounds to query and clip geometry.
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))