Génère une tuile vectorielle Mapbox (MVT) binaire à partir de données de lignes, avec un filtrage intégré des éléments pour réduire la taille des tuiles et améliorer l'efficacité de la visualisation.
ST_AsMVTEx fonctionne comme ST_AsMVT, mais filtre les éléments vectoriels ayant peu d'impact sur l'affichage en se basant sur les relations entre eux. Deux paramètres supplémentaires contrôlent ce comportement : scale_factor définit l'intensité du filtrage et mvt_size_limit limite le nombre total d'éléments dans la tuile de sortie.
Syntaxe
bytea ST_AsMVTEx(anyelement row);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name, text feature_id_name);
Valeur de retour
Renvoie une valeur bytea — une MVT binaire représentant une couche de tuile. Le contenu de la tuile est déterminé par l'ensemble des lignes d'entrée.
Paramètres
| Paramètre | Type | Description | Valeur par défaut |
|---|---|---|---|
row |
anyelement | Données de ligne contenant au moins une colonne géométrique. | — |
scale_factor |
int4 | Intensité du filtrage. Des valeurs plus élevées filtrent davantage d'éléments, produisant une MVT plus petite. Valeurs valides : 1 à extent - 1. |
1 |
mvt_size_limit |
int4 | Nombre maximal d'éléments vectoriels dans la MVT de sortie. Si le nombre d'éléments dépasse toujours cette limite après le filtrage, le système supprime aléatoirement l'excédent. | 2147483647 |
name |
text | Nom de la couche. | default |
extent |
int4 | Étendue de la tuile dans l'espace écran, telle que définie par la spécification MVT. | 4096 |
geom_name |
text | Nom de la colonne géométrique dans les données de ligne. | Première colonne géométrique |
feature_id_name |
text | Nom de la colonne ID de fonctionnalité. L'ID de fonctionnalité n'est pas défini pour les valeurs NULL ou négatives. La première colonne correspondant au nom et ayant un type valide (smallint, integer ou bigint) est utilisée comme ID de fonctionnalité ; les colonnes correspondantes suivantes sont ajoutées en tant que propriétés. Les propriétés JSON ne sont pas prises en charge. |
— |
Notes d'utilisation
Une valeur
extentélevée dégrade les performances du système.ST_AsMVTExne convient pas aux jeux de données constitués de grandes surfaces planes.
Exemples
Les exemples ci-dessous utilisent une table contenant un polygone, une ligne et 9 998 points. Tous les exemples utilisent ST_AsMVTGeom pour préparer les géométries et ST_AsMVTEx pour générer la tuile.
Configuration de la table d'exemple :
-- Create a vector data table and insert one plane, one line, and 9998 points.
CREATE TABLE example_table(id integer, geom Geometry);
INSERT INTO example_table(id, geom) VALUES
(1, ST_MakeEnvelope(150, 75, 170, 80, 4326));
INSERT INTO example_table(id, geom) VALUES
(2, ST_GeomFromText('LINESTRING(-160 -70, 160 -70)', 4326));
INSERT INTO example_table(id, geom)
SELECT i,
ST_SetSRID(ST_MakePoint((random() * 20) + 150, (random() * 10) + 70), 4326)
FROM generate_series(3, 10000) i;
Exemple 1 : Utiliser le filtrage par défaut (scale_factor=1)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 1)) FROM mvtgeom;
Sortie :
length
-------
54237
(1 row)
Exemple 2 : Augmenter le filtrage pour réduire la taille de la tuile (scale_factor=4)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4)) FROM mvtgeom;
Sortie :
length
-------
39211
(1 row)
Exemple 3 : Limiter le nombre d'éléments à 100 (scale_factor=4, mvt_size_limit=100)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100)) FROM mvtgeom;
Sortie :
length
-------
1117
(1 row)
Exemple 4 : Définir une résolution de tuile et un nom de couche personnalisés
Définit scale_factor sur 4, mvt_size_limit sur 100, la résolution de la tuile sur 10 000 × 10 000 et le nom de la couche sur layer_name.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000)) FROM mvtgeom;
Sortie :
length
-------
1220
(1 row)
Exemple 5 : Spécifier les colonnes de géométrie et d'ID de fonctionnalité
Définit scale_factor sur 4, mvt_size_limit sur 100, la résolution de la tuile sur 10 000 × 10 000, le nom de la couche sur layer_name, la colonne de géométrie sur geom_field et la colonne d'ID de fonctionnalité sur id_field.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) AS geom_field, id AS id_field FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000, 'geom_field', 'id_field')) FROM mvtgeom;
Sortie :
length
-------
1520
(1 row)