Name

ST_Segmentize — Gibt eine geänderte Geometrie/Geografie zurück, bei der kein Segment länger als eine bestimmte Entfernung ist.

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Beschreibung

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.

[Note]

Dadurch werden nur lange Segmente verkürzt. Segmente, die kürzer als die maximale Länge sind, werden nicht verlängert.

[Warning]

Bei Eingaben, die lange Segmente enthalten, kann die Angabe einer relativ kurzen max_segment_length dazu führen, dass eine sehr große Anzahl von Scheitelpunkten hinzugefügt wird. Dies kann unbeabsichtigt geschehen, wenn das Argument versehentlich als Anzahl der Segmente und nicht als maximale Länge angegeben wird.

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

Beispiele

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)

Eine geografische Linie, die entlang eines Großkreisbogens segmentiert ist

Siehe auch

ST_LineSubstring