ST_AsMVT3D

将MVTGeom数据编码成MVT(Mapbox Vector Tile)标准的二进制格式。

语法

  • 语法一

    bytea ST_AsMVT3D(anyelement set row);
  • 语法二

    bytea ST_AsMVT3D(anyelement row, text name);
  • 语法三

    bytea ST_AsMVT3D(anyelement row, text name, integer extent);
  • 语法四

    bytea ST_AsMVT3D(anyelement row, text name, integer extent, text geom_name);
  • 语法五

    bytea ST_AsMVT3D(anyelement row, text name, integer extent, text geom_name, text feature_id_name);

参数

参数名称

描述

row

至少包含一个Geometry3D列的行数据。

name

图层的名称,默认值Default

extent

屏幕空间中的平铺范围。

取值范围:256~8192,默认值是4096。

geom_name

行数据中几何列的名称,默认是第一个几何列。

feature_id_name

行数据中Feature ID列的名称。

如果为NULL或为负值,则不设置Feature ID

描述

  • 该函数是一个聚合函数,将MVTGeom数据编码成MVT(Mapbox Vector Tile)标准的二进制格式。

  • 行数据必须包含一个几何列,该列将被编码为空间要素的几何属性。

  • ST_AsMVTGeom3D可用于将3D数据处理成瓦片坐标空间,其他行列被编码为空间要素的非几何属性。

  • 可以通过使用||STRING_AGG来创建多个图层的VectorTile,例如SELECT ST_AsMVT3D() || ST_AsMVT3D() AS tile;

Z坐标的编码方式:

  1. CommandID编码:新增3D图形编码指令MoveTo3D(5)\LineTo3D(6) XYZXYZ...

  2. Z坐标的数值计算方式:value = 7 * (z + 450),表达范围是(-450, 8848)

说明

更多信息,请参见vector tile spec

使用MVT3D瓦片技术展示大规模三维场景:

image..png

示例

WITH mvtgeom AS
(
  SELECT ST_AsMVTGeom3D(
    ST_Transform('SRID=4326; MULTIPOLYGON(((100 50 0, -100 50 1, -100 -50 2, 100 -50 3, 100 50 0)), ((0 0 0, 1 0 1, 2 2 2, 0 0 0)))'::geometry, 3857),
    ST_TileEnvelope(1, 0, 0)) AS geom,  'test' AS name
)
SELECT ST_AsMVT3D(mvtgeom.*) FROM mvtgeom;
                                                                                                                     st_asmvt3d                                                                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 \x1a760a0764656661756c74125812020000180322500d8044a842b83116ff23d80105802400080f0d810481041d162e000e2e590e0f0dd920dc0405168024d70106c727f3160d0f0dc827f4160e1600f31615c72700080f0d0000001600cc1808c80300000f1a046e616d6522060a04746573742880207802
(1 row)