Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在mvt中获取单独的层_Postgresql_Mapbox_Postgis_Mapbox Gl Js_Mapbox Gl - Fatal编程技术网

Postgresql 在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

我们的平台目前使用pbf瓷砖(在s3上)在前端的Mapbox上渲染矢量层。pbf平铺中有单独的层,我们使用Mapbox层的源层属性将它们设置为单独的层。我们现在转向PostGIS,我们希望避免s3,直接在前端将矢量图块渲染为mvt

我试图从mvt中获得单独的层,但我看到的唯一层是“默认”层。我用这个来识别这个。我目前正在使用此查询获取mvt-

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用作

的属性。非常感谢您,
逐层分组
才是真正缺少的!