ST_Segmentize — Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger als eine bestimmte Entfernung ist.
geometry ST_Segmentize(
geometry geom, float max_segment_length)
;
geography ST_Segmentize(
geography geog, float max_segment_length)
;
Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger ist als max_segment_length
. Die Länge wird in 2D berechnet. Segmente werden immer in Untersegmente gleicher Länge aufgeteilt.
In der Geometrie wird die maximale Länge in den Einheiten des räumlichen Bezugssystems angegeben.
In der Geografie wird die maximale Länge in Metern angegeben. Die Entfernungen werden auf der Kugel berechnet. Hinzugefügte Scheitelpunkte werden entlang der sphärischen Großkreisbögen erstellt, die durch die Endpunkte der Segmente definiert sind.
Dadurch werden nur lange Segmente verkürzt. Segmente, die kürzer als die maximale Länge sind, werden nicht verlängert. |
Bei Eingaben, die lange Segmente enthalten, kann die Angabe einer relativ kurzen |
Verfügbarkeit: 1.2.2
Verbessert: 3.0.0 Segmentize-Geometrie erzeugt jetzt Teilsegmente gleicher Länge
Verbessert: 2.3.0 Die Segmentierung der Geografie erzeugt nun Teilsegmente gleicher Länge
Erweiterung: mit 2.1.0 wurde die Unterstützung des geographischen Datentyps eingeführt.
Geändert: 2.1.0 Infolge der Einführung der Geographie-Unterstützung verursacht die Verwendung ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5)
einen mehrdeutigen Funktionsfehler. Die Eingabe muss korrekt als Geometrie oder Geografie eingegeben werden. Verwenden Sie ST_GeomFromText, ST_GeogFromText oder eine Umwandlung in den erforderlichen Typ (z.B. ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )
Segmentierung einer Zeile. Lange Segmente werden gleichmäßig aufgeteilt, kurze Segmente werden nicht aufgeteilt.
SELECT ST_AsText(ST_Segmentize( 'MULTILINESTRING((0 0, 0 1, 0 9),(1 10, 1 18))'::geometry, 5 ) ); --------------------------------------------------- MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))
Segmentierung eines Polygons:
SELECT ST_AsText( ST_Segmentize(('POLYGON((0 0, 0 8, 30 0, 0 0))'::geometry), 10)); ------------------------------------------------------- POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))
Segmentierung einer geografischen Linie unter Verwendung einer maximalen Segmentlänge von 2000 Kilometern. Scheitelpunkte werden entlang des Großkreisbogens hinzugefügt, der die Endpunkte verbindet.
SELECT ST_AsText( ST_Segmentize(('LINESTRING (0 0, 60 60)'::geography), 2000000)); ------------------------------------------------------------- LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)