ST_LineInterpolatePoint - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

ST_LineInterpolatePoint

ST_LineInterpolatePoint gibt einen Punkt entlang einer Linie in einem Bruchabstand vom Anfang der Linie zurück.

Um die Punktgleichheit zu bestimmen, wird ST_LineInterpolatePoint auf der 2D-Projektion der Eingabegeometrie ausgeführt. Wenn die Eingabegeometrie leer ist, wird eine Kopie dieser Geometrie in derselben Dimension wie die Eingabe zurückgegeben. Bei 3DZ-, 3DM- und 4D-Geometrien ist die z- oder m-Koordinate der Durchschnitt der z- oder m-Koordinaten des Segments in dem sich der Punkt befindet.

Syntax

ST_LineInterpolatePoint(geom, fraction)

Argumente

geom

Ein Wert vom Datentyp GEOMETRY oder ein Ausdruck, der zu einem GEOMETRY-Typ ausgewertet wird. Der Subtyp ist LINESTRING.

fraction

Ein Wert des Datentyps DOUBLE PRECISION, der die Position eines Punktes entlang des Linestrings für die Linie darstellt. Der Wert ist ein Bruchteil im Bereich 0–1.

Rückgabetyp

GEOMETRY des Subtyps POINT.

Wenn geom oder fraction null ist, wird null zurückgegeben.

Wenn geom leer ist, wird der leere Punkt zurückgegeben.

Der SRID-Wert (Spatial Reference System Identifier) der zurückgegebenen Geometrie ist der SRID-Wert der Eingabegeometrie.

Wenn fraction außerhalb des Bereichs liegt, wird ein Fehler zurückgegeben.

Wenn geom kein Linestring ist, wird ein Fehler zurückgegeben.

Beispiele

Die folgende SQL-Anweisung gibt einen Punkt auf halber Strecke entlang eines Linestrings zurück.

SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.50));
st_asewkt ----------- POINT(5 5)

Die folgende SQL-Anweisung gibt einen Punkt auf 90 % der Strecke entlang eines Linestrings zurück.

SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.90));
st_asewkt ----------- POINT(9 9)