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