Namn

ST_LineInterpolatePoint — Returnerar en punkt som interpolerats längs en linje på en fraktionerad plats.

Synopsis

geometry ST_LineInterpolatePoint(geometry a_linestring, float8 a_fraction);

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

Beskrivning

Returnerar en punkt som interpolerats längs en linje på en fraktionerad plats. Första argumentet måste vara en LINESTRING. Det andra argumentet är ett flyttal mellan 0 och 1 som representerar den fraktion av linjelängden där punkten ska placeras. Z- och M-värdena interpoleras om de finns.

Se ST_LineLocatePoint för att beräkna linjepositionen närmast en punkt.

[Notera]

Den här funktionen beräknar punkter i 2D och interpolerar sedan värden för Z och M, medan ST_3DLineInterpolatePoint beräknar punkter i 3D och endast interpolerar M-värdet.

[Notera]

Sedan version 1.1.1 interpolerar denna funktion även M- och Z-värden (om sådana finns), medan tidigare versioner satte dem till 0,0.

Tillgänglighet: 0.8.2, stöd för Z och M tillkom i 1.1.1

Ändrad: 2.1.0. Fram till 2.0.x hette detta ST_Line_Interpolate_Point.

Denna funktion stöder 3d och kommer inte att tappa z-index.

Exempel

Det här exemplet returnerar punkten vid 20 procent längs en linje.

Kod
SELECT ST_LineInterpolatePoint(
'LINESTRING(25 50,100 125,150 190)',
0.2);
Utdata
POINT(51.5974135047432 76.5974135047432)
Figur
Geometry figure for visual-st-lineinterpolatepoint-01

Mittpunkten för en 3D-linje:

Kod
SELECT ST_LineInterpolatePoint(
'LINESTRING(1 2 3,4 5 6,6 7 8)',
0.5);
Utdata
POINT(3.5 4.5 5.5)
Figur
Geometry figure for visual-st-lineinterpolatepoint-02

Den punkt på en linje som ligger närmast en punkt:

Kod
SELECT ST_LineInterpolatePoint(
    line.geom,
    ST_LineLocatePoint(line.geom, 'POINT(4 3)'))
FROM (SELECT 'LINESTRING(1 2,4 5,6 7)'::geometry As geom) AS line;
Utdata
POINT(3 4)
Figur
Geometry figure for visual-st-lineinterpolatepoint-03

En interpolerad punkt kan förskjutas åt vänster eller höger från en linje genom att använda ST_OffsetCurve före interpoleringen. Detta är användbart för att placera en adresspunkt bredvid en gatas mittlinje.

Kod
WITH street AS (
    SELECT 'LINESTRING(0 0, 10 0)'::geometry AS geom,
           100 AS from_num,
           200 AS to_num
)
SELECT
    ST_LineInterpolatePoint(
        ST_OffsetCurve(geom, -2),
        (160 - from_num)::float8 / (to_num - from_num)
    ) AS interpolated_offset_point
FROM street;
Utdata
interpolated_offset_point
---------------------------
 POINT(6 -2)
Figur
Geometry figure for visual-st-lineinterpolatepoint-04