ST_Length() în MySQL

Returnează lungimea unei linii (sau suma lungimilor dintr-un MULTILINESTRING); pe SRID 4326, în metri.

Sintaxă
ST_Length(linie [, unitate])

Ce face ST_Length()

Pentru SRID 0 lungimea este calculată în plan, în aceleași unități ca și coordonatele. Pentru un SRID geografic, ca 4326, lungimea este calculată pe elipsoidul Pământului și este exprimată în metri.

Al doilea argument (din MySQL 8.0.16) cere rezultatul în altă unitate: 'kilometre', 'foot', 'nautical mile' etc. (lista e în INFORMATION_SCHEMA.ST_UNITS_OF_MEASURE). Pe SRID 0 unitatea dă eroare, pentru că planul nu are unitate. Pentru alte tipuri decât linii, rezultatul este NULL.

Parametri

Parametru Descriere
linie Un LINESTRING sau MULTILINESTRING.
unitate Opțional: unitatea de lungime (doar pentru SRID diferit de 0).

Ce returnează

Un număr cu zecimale.

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: Lungimea traseelor din planul orașului

SELECT nume, ST_Length(linie) AS km
FROM trasee
ORDER BY id;

Rezultat

+------------------+------------------+
| nume             | km               |
+------------------+------------------+
| Autobuz 28       |               10 |
| Tramvai 3        |                8 |
| Pistă biciclete  | 9.65685424949238 |
+------------------+------------------+

Exemplul 2: Traseul Iași, Cluj-Napoca, Timișoara pe glob

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

SELECT ROUND(ST_Length(@traseu)) AS metri,
       ROUND(ST_Length(@traseu, 'kilometre'), 1) AS km,
       ROUND(ST_Length(@traseu, 'nautical mile'), 1) AS mile_marine;

Rezultat

+--------+-------+-------------+
| metri  | km    | mile_marine |
+--------+-------+-------------+
| 523856 | 523.9 |       282.9 |
+--------+-------+-------------+

Greșeli frecvente

  • Calculezi lungimea unui traseu GPS salvat cu SRID 0. Rezultatul este în „grade”, fără sens practic; salvează coordonatele cu SRID 4326.

Comenzi înrudite

  • ST_Distance(): Returnează distanța minimă dintre două geometrii; pentru SRID 4326, în metri, calculată pe elipsoidul Pământului.
  • LineString(): Construiește o linie frântă (LINESTRING) din două sau mai multe puncte.