ST_StartPoint() și ST_EndPoint() în MySQL

Returnează primul, respectiv ultimul punct al unei linii (LINESTRING).

Sintaxă
ST_StartPoint(linie)
ST_EndPoint(linie)

Ce face ST_StartPoint() și ST_EndPoint()

Pentru un traseu, ST_StartPoint() dă punctul de plecare, iar ST_EndPoint() destinația. Rezultatul este un POINT cu același SRID ca linia.

Cele două funcții sunt echivalente cu ST_PointN(linie, 1) și ST_PointN(linie, ST_NumPoints(linie)).

Parametri

Parametru Descriere
linie Un LINESTRING.

Ce returnează

Un POINT.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE trasee (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  linie LINESTRING NOT NULL
);

INSERT INTO trasee VALUES
  (1, 'Autobuz 28',  ST_GeomFromText('LINESTRING(0 0,3 0,3 4,6 4)')),
  (2, 'Tramvai 3',   ST_GeomFromText('LINESTRING(1 6,1 2,5 2)')),
  (3, 'Pistă biciclete', ST_GeomFromText('LINESTRING(0 0,2 2,0 4,0 0)'));

Exemplul 1: Capetele traseelor

SELECT nume,
       ST_AsText(ST_StartPoint(linie)) AS plecare,
       ST_AsText(ST_EndPoint(linie)) AS sosire
FROM trasee
ORDER BY id;

Rezultat

+------------------+------------+------------+
| nume             | plecare    | sosire     |
+------------------+------------+------------+
| Autobuz 28       | POINT(0 0) | POINT(6 4) |
| Tramvai 3        | POINT(1 6) | POINT(5 2) |
| Pistă biciclete  | POINT(0 0) | POINT(0 0) |
+------------------+------------+------------+

Exemplul 2: Distanța în linie dreaptă între capete

SET @drum = ST_GeomFromText('LINESTRING(47.1585 27.6014, 46.7712 23.6236, 45.7489 21.2087)', 4326);

SELECT ROUND(ST_Length(@drum) / 1000) AS km_pe_traseu,
       ROUND(ST_Distance(ST_StartPoint(@drum), ST_EndPoint(@drum)) / 1000) AS km_in_linie_dreapta;

Rezultat

+--------------+---------------------+
| km_pe_traseu | km_in_linie_dreapta |
+--------------+---------------------+
|          524 |                 515 |
+--------------+---------------------+

Greșeli frecvente

  • Folosești funcțiile pe un poligon ca să obții un colț. Pentru poligon, ia mai întâi conturul cu ST_ExteriorRing().

Comenzi înrudite

  • ST_PointN() și ST_NumPoints(): ST_PointN() returnează al n-lea punct al unei linii, iar ST_NumPoints() numărul de puncte.
  • ST_IsClosed(): Verifică dacă o linie este închisă, adică primul și ultimul punct coincid.
  • ST_ExteriorRing(): Returnează conturul exterior al unui poligon, ca LINESTRING închis.