Name

ST_RemoveIrrelevantPointsForView — Tar bort punkter som är irrelevanta för rendering av en specifik rektangulär vy av en geometri.

Synopsis

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

Beskrivning

Returnerar en geometry utan punkter som är irrelevanta för rendering av geometrin inom en given rektangulär vy.

Denna funktion kan användas för att snabbt förbehandla geometrier som endast ska återges inom vissa gränser.

Endast geometrier av typen (MULTI)POLYGON och (MULTI)LINESTRING utvärderas. Övriga geometrier förblir oförändrade.

I motsats till ST_ClipByBox2D() är denna funktion

  • sorterar ut punkter utan att beräkna nya skärningspunkter, vilket undviker avrundningsfel och vanligtvis ökar prestandan,

  • returnerar en geometri med samma eller liknande punktnummer,

  • leder till samma renderingsresultat inom den angivna vyn, och

  • kan ge upphov till självskärningar som skulle göra den resulterande geometrin ogiltig (se exempel nedan).

Om cartesian_hint är satt till true tillämpar algoritmen ytterligare optimeringar som involverar cartesisk matematik för att ytterligare minska det resulterande punktantalet. Observera att om du använder det här alternativet kan det leda till renderingsartefakter om de resulterande koordinaterna projiceras till ett annat (icke-kartesiskt) koordinatsystem före rendering.

[Warning]

För polygoner säkerställer denna funktion för närvarande inte att resultatet är giltigt. Denna situation kan kontrolleras med ST_IsValid och repareras med ST_MakeValid.

Exempel: ST_RemoveIrrelevantPointsForView() tillämpas på en polygon. Blå punkter finns kvar, renderingsresultatet (ljusblått område) inom den grå visningsrutan finns också kvar.

Exempel på detta: Eftersom punkterna bara sorteras bort och inga nya punkter beräknas, kan resultatet av ST_RemoveIrrelevantPointsForView() innehålla självskärande punkter.

Tillgänglighet: 3.5.0

Exempel

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