Postgresql 在mvt中获取单独的层
我们的平台目前使用pbf瓷砖(在s3上)在前端的Mapbox上渲染矢量层。pbf平铺中有单独的层,我们使用Mapbox层的源层属性将它们设置为单独的层。我们现在转向PostGIS,我们希望避免s3,直接在前端将矢量图块渲染为mvt 我试图从mvt中获得单独的层,但我看到的唯一层是“默认”层。我用这个来识别这个。我目前正在使用此查询获取mvt-Postgresql 在mvt中获取单独的层,postgresql,mapbox,postgis,mapbox-gl-js,mapbox-gl,Postgresql,Mapbox,Postgis,Mapbox Gl Js,Mapbox Gl,我们的平台目前使用pbf瓷砖(在s3上)在前端的Mapbox上渲染矢量层。pbf平铺中有单独的层,我们使用Mapbox层的源层属性将它们设置为单独的层。我们现在转向PostGIS,我们希望避免s3,直接在前端将矢量图块渲染为mvt 我试图从mvt中获得单独的层,但我看到的唯一层是“默认”层。我用这个来识别这个。我目前正在使用此查询获取mvt- WITH mvtgeom AS ( SELECT ST_AsMVTGeom(ST_Transform(ST_Force2D(geom), 385
WITH mvtgeom AS (
SELECT ST_AsMVTGeom(ST_Transform(ST_Force2D(geom), 3857),
ST_TileEnvelope(${z}, ${x}, ${y}))
AS geom,
layer,
gid
FROM site-name
WHERE ST_Intersects(geom, ST_Transform(ST_TileEnvelope(${z}, ${x}, ${y}), 4326)))
SELECT ST_AsMVT(mvtgeom.*) AS mvt FROM mvtgeom;
这个问题与我的问题非常接近,但答案建议使用联合,考虑到我们必须渲染数百层,如果可能的话,我希望避免使用联合。
我也试过了。在本例中,当我将层ID的值放入In时,我看到这些层集被渲染为一个层
(为了了解矢量图块是如何生成的,这样我就可以确切地知道各个层是如何生成的,我是否需要探索一些东西呢?我是PostGIS的新手,我不确定我是否做错了什么或遗漏了什么。任何建议都非常感谢)下面是
ST_AsMvt
的完整返回签名
bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name, text feature_id_name);
本报告稍后部分:
名称是图层的名称。Default是字符串“Default”
尝试使用id(或标签,或特定于每个层的其他东西)为每个层创建不同的层名称:
WITH mvtgeom AS (
SELECT
ST_AsMVTGeom(ST_Transform(ST_Force2D(geom), 3857) AS geom
, layer
, gid
FROM
site-name
WHERE
ST_Intersects(
geom,
ST_Transform(ST_TileEnvelope(${z}, ${x}, ${y}), 4326)
)
)
SELECT
ST_AsMVT(
mvtgeom.*,
'layer_' || layer -- this is the layer name argument
) AS mvt
FROM
mvtgeom
GROUP BY
layer;
顺便说一句,这个
名称
属性就是mapbox用作的属性。非常感谢您,逐层分组
才是真正缺少的!