ST_SwapXY() în MySQL

Inversează coordonatele X și Y ale fiecărui punct dintr-o geometrie.

Sintaxă
ST_SwapXY(geometrie)

Ce face ST_SwapXY()

ST_SwapXY() schimbă între ele cele două coordonate ale tuturor punctelor: POINT(1 2) devine POINT(2 1). Este folosită mai ales pentru a repara date importate cu latitudinea și longitudinea inversate.

SRID-ul rămâne același. Pentru a citi sau scrie doar textul în altă ordine, fără a modifica geometria, folosește opțiunea 'axis-order=long-lat' din ST_AsText() și ST_GeomFromText().

Parametri

Parametru Descriere
geometrie Valoarea spațială.

Ce returnează

Geometria cu X și Y inversate.

Exemple

Exemplul 1: Linie cu coordonatele inversate

SET @g = ST_GeomFromText('LINESTRING(0 5,5 10,10 15)');

SELECT ST_AsText(@g) AS initial, ST_AsText(ST_SwapXY(@g)) AS inversat;

Rezultat

+----------------------------+----------------------------+
| initial                    | inversat                   |
+----------------------------+----------------------------+
| LINESTRING(0 5,5 10,10 15) | LINESTRING(5 0,10 5,15 10) |
+----------------------------+----------------------------+

Exemplul 2: Repararea unor puncte importate greșit

CREATE TABLE import_vechi (nume VARCHAR(20), loc POINT SRID 4326);
-- textul WKT a fost scris greșit, cu longitudinea pe primul loc
INSERT INTO import_vechi VALUES ('Iași', ST_GeomFromText('POINT(27.6014 47.1585)', 4326));

SELECT nume, ST_Latitude(loc) AS lat_gresita,
       ST_Latitude(ST_SwapXY(loc)) AS lat_corecta,
       ST_AsText(ST_SwapXY(loc)) AS corectat
FROM import_vechi;

UPDATE import_vechi SET loc = ST_SwapXY(loc);
SELECT nume, ST_Latitude(loc) AS latitudine, ST_Longitude(loc) AS longitudine FROM import_vechi;

Rezultat

+-------+-------------+-------------+------------------------+
| nume  | lat_gresita | lat_corecta | corectat               |
+-------+-------------+-------------+------------------------+
| Iași  |     27.6014 |     47.1585 | POINT(47.1585 27.6014) |
+-------+-------------+-------------+------------------------+
+-------+------------+-------------+
| nume  | latitudine | longitudine |
+-------+------------+-------------+
| Iași  |    47.1585 |     27.6014 |
+-------+------------+-------------+

Greșeli frecvente

  • Aplici ST_SwapXY() de două ori pe aceleași date (de exemplu la două rulări ale unui script). A doua oară le strici la loc; marchează rândurile deja corectate.

Comenzi înrudite

  • ST_AsText(): Transformă o geometrie în text WKT, ușor de citit: POINT(1 2), LINESTRING(…), POLYGON(…).
  • ST_X() și ST_Y(): Returnează coordonata X sau Y a unui punct; cu al doilea argument, returnează punctul cu coordonata schimbată.
  • ST_SRID(): Returnează sistemul de coordonate (SRID) al unei geometrii sau, cu al doilea argument, îl schimbă fără a muta coordonatele.