ST_RemoveIrrelevantPointsForView — Removes points that are irrelevant for rendering a specific rectangluar view of a geometry.
geometry ST_RemoveIrrelevantPointsForView(
geometry geom, box2d bounds, boolean cartesian_hint = false)
;
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.“
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. |
Verfügbarkeit: 3.5.0
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))