ST_Latitude() și ST_Longitude() în MySQL

Returnează latitudinea sau longitudinea unui punct geografic (de exemplu SRID 4326) ori îl modifică.

Sintaxă
ST_Latitude(punct [, latitudine_noua])
ST_Longitude(punct [, longitudine_noua])

Ce face ST_Latitude() și ST_Longitude()

Funcțiile lucrează doar cu puncte într-un sistem geografic, cum este 4326. Pe un punct cu SRID 0 primești eroare, pentru că un plan cartezian nu are latitudine. Au apărut în MySQL 8.0.12.

Avantajul față de ST_X() și ST_Y(): numele spune exact ce primești, indiferent de ordinea axelor din sistemul de coordonate. Cu al doilea argument returnează punctul cu latitudinea (sau longitudinea) înlocuită; valoarea trebuie să fie în interval (latitudine între -90 și 90, longitudine între -180 și 180).

Parametri

Parametru Descriere
punct Un POINT cu SRID geografic.
latitudine_noua / longitudine_noua Opțional: noua valoare, în grade.

Ce returnează

Un număr în grade sau, cu două argumente, 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 orase (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  loc POINT NOT NULL SRID 4326,
  SPATIAL INDEX (loc)
);

INSERT INTO orase VALUES
  (1, 'Iași',        ST_GeomFromText('POINT(47.1585 27.6014)', 4326)),
  (2, 'Cluj-Napoca', ST_GeomFromText('POINT(46.7712 23.6236)', 4326)),
  (3, 'București',   ST_GeomFromText('POINT(44.4268 26.1025)', 4326)),
  (4, 'Timișoara',   ST_GeomFromText('POINT(45.7489 21.2087)', 4326)),
  (5, 'Constanța',   ST_GeomFromText('POINT(44.1598 28.6348)', 4326));

Exemplul 1: Coordonatele orașelor

SELECT nume, ST_Latitude(loc) AS latitudine, ST_Longitude(loc) AS longitudine
FROM orase
ORDER BY ST_Latitude(loc) DESC;

Rezultat

+-------------+------------+-------------+
| nume        | latitudine | longitudine |
+-------------+------------+-------------+
| Iași        |    47.1585 |     27.6014 |
| Cluj-Napoca |    46.7712 |     23.6236 |
| Timișoara   |    45.7489 |     21.2087 |
| București   |    44.4268 |     26.1025 |
| Constanța   |    44.1598 |     28.6348 |
+-------------+------------+-------------+

Exemplul 2: Punct mutat pe aceeași latitudine

SET @iasi = ST_GeomFromText('POINT(47.1585 27.6014)', 4326);

SELECT ST_AsText(ST_Longitude(@iasi, 23.6236)) AS alt_punct,
       ROUND(ST_Distance(@iasi, ST_Longitude(@iasi, 23.6236)) / 1000) AS km_spre_vest;

Rezultat

+------------------------+--------------+
| alt_punct              | km_spre_vest |
+------------------------+--------------+
| POINT(47.1585 23.6236) |          302 |
+------------------------+--------------+

Greșeli frecvente

  • Folosești funcțiile pe coloane fără SRID (SRID 0). Primești eroarea că sistemul nu este geografic; definește coloana cu SRID 4326.

Comenzi înrudite

  • ST_X() și ST_Y(): Returnează coordonata X sau Y a unui punct; cu al doilea argument, returnează punctul cu coordonata schimbată.
  • ST_GeomFromText(): Creează o geometrie de orice tip din textul ei WKT („Well-Known Text”), opțional cu SRID.
  • ST_Distance_Sphere(): Returnează distanța pe o sferă (în metri) dintre două puncte; un calcul rapid, aproximativ, pentru coordonate GPS.