Name

ST_RemoveIrrelevantPointsForView — Supprime les points qui ne sont pas pertinents pour le rendu d'une vue rectangulaire spécifique d'une géométrie.

Synopsis

geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);

Description

Renvoie une geometry sans les points non pertinents pour le rendu de la géométrie dans une vue rectangulaire donnée.

Cette fonction peut être utilisée pour prétraiter rapidement les géométries qui ne doivent être rendues qu'à l'intérieur de certaines limites.

Seules les géométries de type (MULTI)POLYGONE et (MULTI)LINESTRING sont évaluées. Les autres géométries restent inchangées.

Contrairement à ST_ClipByBox2D(), cette fonction

  • trie les points sans calculer de nouveaux points d'intersection, ce qui évite les erreurs d'arrondi et augmente généralement les performances,

  • renvoie une géométrie dont le nombre de points est égal ou similaire,

  • conduit au même résultat de rendu dans la vue spécifiée, et

  • peut introduire des auto-intersections qui rendraient la géométrie résultante invalide (voir l'exemple ci-dessous).

Si cartesian_hint est défini à true, l'algorithme applique des optimisations supplémentaires impliquant des mathématiques cartésiennes pour réduire davantage le nombre de points résultant. Veuillez noter que l'utilisation de cette option peut introduire des artefacts de rendu si les coordonnées résultantes sont projetées dans un autre système de coordonnées (non cartésien) avant le rendu.

[Warning]

Pour les polygones, cette fonction ne garantit pas actuellement que le résultat est valide. Cette situation peut être vérifiée avec ST_IsValid et réparée avec ST_MakeValid.

Exemple : ST_RemoveIrrelevantPointsForView() appliqué à un polygone. Les points bleus restent, le résultat du rendu (zone bleu clair) à l'intérieur de la boîte de visualisation grise reste également.

Exemple : Étant donné que les points sont simplement triés et qu'aucun nouveau point n'est calculé, le résultat de ST_RemoveIrrelevantPointsForView() peut contenir des auto-intersections.

Disponibilité : 3.5.0

Exemples

SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('MULTILINESTRING((0 0, 10 0,20 0,30 0), (0 15, 5 15, 10 15, 15 15, 20 15, 25 15, 30 15, 40 15), (13 13,15 15,17 17))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                        MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    LINESTRING EMPTY
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    POLYGON((15 30,30 0,0 0,15 30))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18)));
                
                st_astext
                ---------
                    POLYGON((0 30,30 30,30 0,0 0,0 30))