ST_AsMVTGeom — ジオメトリをMVTタイルの座標空間に変換します。
geometry ST_AsMVTGeom(
geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true)
;
ジオメトリをMVT (Mapbox Vector Tile)タイルの座標空間に変換し、必要ならタイルの境界で切り抜きます。ジオメトリは対象地図の座標系でなければなりません (必要ならST_Transformを使います)。一般にこれはWeb Mercator (SRID:3857)です。
この関数は、ジオメトリに妥当性を保持しようとし、必要なら修正します。これによって、結果ジオメトリが低い次元に落ちる可能性があります。
対象地図の座標空間内のタイルを示す四角形の境界を与えなければなりません。ジオメトリが変換され、必要なら切り抜きます。境界はST_TileEnvelopeで生成できます。
この関数はジオメトリをST_AsMVTが求める座標空間に変換するために使います。
geom
は変換するジオメトリで、対象地図の座標系です。
bounds
は地図の座標空間内のタイルの四角形境界で、バッファはありません。
extent
はMVT specificationで定義されるタイル座標空間でのタイルのサイズです。デフォルトは4096です。
buffer
は、ジオメトリの切り抜きを行うためのタイル座標空間におけるバッファサイズです。デフォルトは256です。
clip_geom
はジオメトリを切り抜くかそのままで符号化するかを制御する真偽値です。デフォルトはTRUEです。
Availability: 2.4.0
3.0からは、MVTポリゴンのクリップと検証にコンフィギュア時にWagyuを選択することができるようになりました。このライブラリは、デフォルトの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)))
クエリを実行してジオメトリをクリップするために計算されたタイル境界を使うウェブメルカトルのタイルの標準的な例です。
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))