Name

ST_LineInterpolatePoint — Gibt einen oder mehrere, entlang einer Linie interpolierte Punkte zurück.

Synopsis

geometry ST_LineInterpolatePoint(geometry a_linestring, float8 a_fraction);

geography ST_LineInterpolatePoint(geography a_linestring, float8 a_fraction, boolean use_spheroid = true);

Beschreibung

Fügt einen Punkt entlang einer Linie ein. Der erste Parameter muss einen Linienzug beschreiben. Der zweite Parameter, in Float8-Darstellung mit den Werten von 0 bis 1, gibt jenen Bruchteil der Gesamtlänge des Linienzuges an, wo der Punkt liegen soll.

Siehe ST_LineLocatePoint um die nächstliegende Linie zu einem Punkt zu berechnen.

[Note]

Diese Funktion berechnet Punkte in 2D und interpoliert dann Werte für Z und M, während ST_3DLineInterpolatePoint Punkte in 3D berechnet und nur den M-Wert interpoliert.

[Note]

Ab Version 1.1.1 interpoliert diese Funktion auch M- und Z-Werte (falls vorhanden), während frühere Versionen diese Werte auf 0.0 setzten.

Verfügbarkeit: 0.8.2, Z und M Unterstützung wurde mit 1.1.1 hinzugefügt

Änderung: 2.1.0. Bis zu 2.0.x wurde diese Funktion mit ST_Line_Interpolate_Point bezeichnet.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Beispiele

Ein Linienzug mit dem interpolierten Punkt bei Position 0.20 (20%)

This example returns the point 20 percent along a line.

SELECT ST_AsEWKT(ST_LineInterpolatePoint(
    'LINESTRING(25 50, 100 125, 150 190)',
    0.2));
POINT(51.5974135047432 76.5974135047432)

Gibt einen oder mehrere, entlang einer Linie interpolierte Punkte zurück.

SELECT ST_AsEWKT(ST_LineInterpolatePoint(
    'LINESTRING(1 2 3, 4 5 6, 6 7 8)',
    0.5));
POINT(3.5 4.5 5.5)

Der Punkt auf einer Linie, der einem Punkt am nächsten liegt:

SELECT ST_AsText(ST_LineInterpolatePoint(
    line.geom,
    ST_LineLocatePoint(line.geom, 'POINT(4 3)')))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As geom) AS line;
POINT(3 4)

An interpolated point can be offset to the left or right of a line by using ST_OffsetCurve before interpolation. This is useful for locating an address point beside a street centerline.

WITH street AS (
    SELECT 'LINESTRING(0 0, 10 0)'::geometry AS geom,
           100 AS from_num,
           200 AS to_num
)
SELECT ST_AsText(
    ST_LineInterpolatePoint(
        ST_OffsetCurve(geom, -2),
        (160 - from_num)::float8 / (to_num - from_num)
    )
) AS interpolated_offset_point
FROM street;
        
interpolated_offset_point
---------------------------
 POINT(6 -2)