Namn

ST_StartPoint — Returnerar den första punkten i en LineString, CircularLineString eller NURBSCurve.

Synopsis

geometry ST_StartPoint(geometry geomA);

Beskrivning

Returnerar den första punkten i en geometri av typen LINESTRING, CIRCULARLINESTRING eller NURBSCURVE som en POINT. För andra geometrier returneras den första punkten i koordinatordning.

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 7.1.3

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

Denna metod stöder cirkulära strängar och kurvor.

Förbättrad: 3.2.0 returnerar en punkt för alla geometrier. Tidigare beteende returnerade NULL om indata inte var en LineString.

Ändrad: 2.0.0 fungerar inte längre med MultiLineStrings med en geometri. I äldre versioner av PostGIS skulle en MultiLineString med en enda rad fungera bra med den här funktionen och returnera startpunkten. I 2.0.0 returnerar den bara NULL som vilken annan MultiLineString som helst. Det gamla beteendet var en odokumenterad funktion, men personer som antog att de hade sina data lagrade som LINESTRING kan uppleva att dessa returnerar NULL i 2.0.0.

Exempel

Startpunkt för en LineString

Kod
SELECT ST_StartPoint('LINESTRING(0 1,0 2)'::geometry);
Utdata
POINT(0 1)
Figur
Geometry figure for visual-st-startpoint-01

Startpunkten för en Point är själva Point

Kod
SELECT ST_StartPoint('POINT(0 1)'::geometry);
Utdata
POINT(0 1)
Figur
Geometry figure for visual-st-startpoint-02

Startpunkt för en 3D-linjeString

Kod
SELECT ST_StartPoint('LINESTRING(0 1 1,0 2 2)'::geometry);
Utdata
POINT(0 1 1)
Figur
Geometry figure for visual-st-startpoint-03

Startpunkt för en CircularString

Kod
SELECT ST_StartPoint('CIRCULARSTRING(5 2,-3 2,-2 1,-4 2,6 3)'::geometry);
Utdata
POINT(5 2)
Figur
Geometry figure for visual-st-startpoint-04

Startpunkt för en NURBSCurve

Kod
SELECT ST_StartPoint('NURBSCURVE(2, (0 0, 1 1, 2 0))'::geometry);
Utdata
PUNKT(0 0)
Figur
Geometry figure for visual-st-startpoint-05

Bygg kantnodsreferenser från start- och slutpunkterna i en LineString-tabell. Exemplet använder exakt likhet mellan ändpunkter, så linjer med nästan sammanfallande ändpunkter bör snäppas eller på annat sätt rensas först.

Kod
WITH roads(road_id, geom) AS (
  VALUES
    (1, 'LINESTRING(0 0, 1 0)'::geometry),
    (2, 'LINESTRING(1 0, 1 1)'::geometry),
    (3, 'LINESTRING(1 0, 2 0)'::geometry)
),
endpoints AS (
  SELECT road_id, 'from' AS end_name, ST_StartPoint(geom) AS geom,
         ST_AsEWKB(ST_StartPoint(geom)) AS endpoint_key
  FROM roads
  UNION ALL
  SELECT road_id, 'to' AS end_name, ST_EndPoint(geom) AS geom,
         ST_AsEWKB(ST_EndPoint(geom)) AS endpoint_key
  FROM roads
),
nodes AS (
  SELECT dense_rank() OVER (ORDER BY ST_X(geom), ST_Y(geom), endpoint_key) AS node_id,
         endpoint_key
  FROM (
    SELECT DISTINCT ON (endpoint_key) endpoint_key, geom
    FROM endpoints
    ORDER BY endpoint_key
  ) AS distinct_endpoints
)
SELECT e.road_id,
       max(n.node_id) FILTER (WHERE e.end_name = 'from') AS from_node,
       max(n.node_id) FILTER (WHERE e.end_name = 'to') AS to_node
FROM endpoints AS e
JOIN nodes AS n USING (endpoint_key)
GROUP BY e.road_id
ORDER BY e.road_id;
Utdata
road_id | from_node | to_node
---------+-----------+---------
     1 |         1 |       2
     2 |         2 |       3
     3 |         2 |       4
Figur
Geometry figure for visual-st-startpoint-06