Name

ST_AsMVTGeom — Transformerar en geometri till koordinatrymden för en MVT-platta.

Synopsis

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

Beskrivning

Transformerar en geometri till koordinatrymden för en MVT-karta(Mapbox Vector Tile) och klipper den till kartans gränser om så krävs. Geometrin måste vara i målkartans koordinatsystem (med hjälp av ST_Transform om det behövs). Vanligtvis är detta Web Mercator (SRID:3857).

Funktionen försöker bevara geometrins validitet och korrigerar den vid behov. Detta kan leda till att resultatgeometrin kollapsar till en lägre dimension.

De rektangulära gränserna för plattan i målkartans koordinatrum måste anges, så att geometrin kan transformeras och klippas vid behov. Gränserna kan genereras med hjälp av ST_TileEnvelope.

Denna funktion används för att konvertera geometrin till det koordinatutrymme för plattor som krävs av ST_AsMVT.

geom är den geometri som ska transformeras, i målkartans koordinatsystem.

bounds är de rektangulära gränserna för plattan i kartkoordinatrymden, utan buffert.

extent är storleken på plattans extent i plattans koordinatutrymme enligt definitionen i MVT-specifikationen. Standardvärdet är 4096.

buffer är buffertstorleken i plattkoordinatrymden för geometriklippning. Standardvärdet är 256.

clip_geom är en boolean som styr om geometrier ska klippas eller kodas som de är. Standardvärdet är true.

Tillgänglighet: 2.4.0

[Note]

Från och med 3.0 kan Wagyu väljas vid konfigurationstillfället för att klippa och validera MVT-polygoner. Det här biblioteket är snabbare och ger mer korrekta resultat än GEOS standard, men det kan tappa små polygoner.

Exempel

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

Kanoniskt exempel för en Web Mercator-platta som använder en beräknad plattgräns för att fråga och klippa geometri. Detta förutsätter att data.geom-kolumnen har srid på 4326.


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)