Name

ST_RemoveIrrelevantPointsForView — Removes points that are irrelevant for rendering a specific rectangluar view of a geometry.

Synopsis

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

Beschreibung

Returns a geometry without points being irrelevant for rendering the geometry within a given rectangluar view.

This function can be used to quickly preprocess geometries that should be rendered only within certain bounds.

Es wird nur die Geometrie vom Typ (MULTI)POLYGON und (MULTI)LINESTRING ausgewertet. Die restliche Geometrie bleibt unverändert.

Im Gegensatz zu ST_ClipByBox2D() werden von dieser Funktion

  • sortiert Punkte aus, ohne neue Schnittpunkte zu berechnen, was Rundungsfehler vermeidet und in der Regel die Leistung erhöht,

  • gibt eine Geometrie mit gleicher oder ähnlicher Anzahl an Punkten zurück,

  • führt zu demselben Rendering-Ergebnis innerhalb der gegebenen Ansicht, und

  • es kann zu Selbstüberschneidungen kommen, welche die resultierende Geometrie ungültig machen können (siehe Beispiel unten).

Wenn cartesian_hint auf true gesetzt ist, wendet der Algorithmus zusätzliche Optimierungen unter Verwendung kartesischer Mathematik an, um die resultierende Punktanzahl weiter zu reduzieren. Beachten Sie bitte, dass die Verwendung dieser Option Rendering-Artefakte verursachen kann, wenn die resultierenden Koordinaten in ein anderes (nicht-kartesisches) Koordinatensystem projiziert werden, bevor sie gerendert werden.“

[Warning]

Für Polygone stellt diese Funktion derzeit nicht sicher, dass das Ergebnis gültig ist. Diese Situation kann mit ST_IsValid überprüft und mit ST_MakeValid repariert werden.

Beispiel: ST_RemoveIrrelevantPointsForView() angewendet auf ein Polygon. Blaue Punkte bleiben erhalten, das Rendering-Ergebnis (hellblauer Bereich) innerhalb der grauen Viewbox bleibt ebenfalls erhalten.

Beispiel: Da die Punkte nur aussortiert werden und keine neuen Punkte berechnet werden, kann das Ergebnis von ST_RemoveIrrelevantPointsForView() Selbstüberschneidungen enthalten.

Verfügbarkeit: 3.5.0

Beispiele

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))