Skip to content

Ajouter Vector tiles

il suffit de parameter z,x,y et sysma_object_type_id

le inputs du controleur :

  • {sysma_object_type_id}/{z}/{x}/{y}
-- retourne du bytea Protobuf 
-- TODO AR : vérifier st_transform et SRID
WITH 
zxy as (
   SELECT {z}::int as z, {x} as x, {y} as y 
)
, mvtgeom AS (
  SELECT 
   ST_AsMVTGeom(
     ST_transform (geom, 3857) 
     , ST_TileEnvelope(zxy.z, zxy.x, zxy.y)
     , extent => 4096
     , buffer => 64
     , clip_geom => true
   ) AS geom
   , sysma_object_id
   , sysma_object
  FROM sysma.sysma_object
  , zxy
  WHERE geom && ST_transform (ST_TileEnvelope(zxy.z, zxy.x, zxy.y, margin => (64.0 / 4096)),2154)
    AND sysma_object_type_id= {sysma_object_type_id}  -- ici le sysma_object_type_id
    AND ST_intersects(geom , ST_transform (ST_TileEnvelope(zxy.z, zxy.x, zxy.y, margin => (64.0 / 4096)),2154))
)
SELECT ST_AsMVT(mvtgeom.*) 
FROM mvtgeom
-- exemle sql pour tester la taille d'une taille

WITH
zxy as ( SELECT 12::int as z, 2033::int as x, 1439::int as y ) 
, mvtgeom AS ( SELECT ST_AsMVTGeom(
      st_transform(geom, 3857) 
    , ST_TileEnvelope(zxy.z, zxy.x, zxy.y) , extent => 4096 , buffer => 64 , clip_geom => true
   ) AS geom 
  , sysma_object_id , sysma_object 
   FROM sysma.sysma_object , zxy 
    WHERE geom && ST_transform (ST_TileEnvelope(zxy.z, zxy.x, zxy.y, margin => (64.0 / 4096)),2154)
    AND sysma_object_type_id= 102663 
    AND ST_intersects(geom , ST_transform (ST_TileEnvelope(zxy.z, zxy.x, zxy.y, margin => (64.0 / 4096)),2154))
 )


, st as (SELECT --st_length(
	ST_AsMVT(mvtgeom.*)
--) 
FROM mvtgeom
)
select pg_size_pretty(length(ST_AsMVT)::bigint) as filesize
from st;
Modification effectuée par Antoine RIVIERE
Pour téléverser des designs, il est nécessaire d'activer LFS et que l'administrateur ait activé le stockage haché. En savoir plus