Ce face ST_X() și ST_Y()
ST_X() dă prima coordonată, iar ST_Y() pe a doua, ca număr cu zecimale. Funcționează doar pe POINT; pentru alte tipuri primești eroare. Pentru o linie, ia mai întâi un punct cu ST_StartPoint() sau ST_PointN().
Pentru SRID 4326, X este prima axă din definiția sistemului, adică latitudinea, iar Y este longitudinea. Ca să nu te încurci, pentru puncte GPS folosește ST_Latitude() și ST_Longitude().
Cu al doilea argument (din MySQL 8.0), funcția nu mai citește, ci returnează un punct nou, cu X (sau Y) înlocuit.
Parametri
| Parametru | Descriere |
|---|---|
punct |
Un POINT. |
x_nou / y_nou |
Opțional: noua valoare a coordonatei. |
Ce returnează
Un număr (coordonata) 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 magazine (
id INT PRIMARY KEY,
nume VARCHAR(20),
loc POINT NOT NULL
);
INSERT INTO magazine VALUES
(1, 'Librăria Ana', Point(1, 1)),
(2, 'Florăria Dan', Point(2, 6)),
(3, 'Brutăria Ioana', Point(5, 3)),
(4, 'Cafeneaua Mara', Point(4, 2)),
(5, 'Atelierul Radu', Point(12, 1));
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 magazinelor
SELECT nume, ST_X(loc) AS x, ST_Y(loc) AS y
FROM magazine
WHERE ST_X(loc) < 5
ORDER BY id;
Rezultat
+----------------+---+---+
| nume | x | y |
+----------------+---+---+
| Librăria Ana | 1 | 1 |
| Florăria Dan | 2 | 6 |
| Cafeneaua Mara | 4 | 2 |
+----------------+---+---+
Exemplul 2: Mutarea unui punct pe o axă
SELECT ST_AsText(ST_X(Point(2, 6), 10)) AS x_schimbat,
ST_AsText(ST_Y(Point(2, 6), 0)) AS y_schimbat;
Rezultat
+-------------+------------+
| x_schimbat | y_schimbat |
+-------------+------------+
| POINT(10 6) | POINT(2 0) |
+-------------+------------+
Exemplul 3: Pentru SRID 4326, X este latitudinea
SELECT nume, ST_X(loc) AS x, ST_Y(loc) AS y
FROM orase
WHERE id = 1;
Rezultat
+-------+---------+---------+
| nume | x | y |
+-------+---------+---------+
| Iași | 47.1585 | 27.6014 |
+-------+---------+---------+
Greșeli frecvente
- Presupui că pentru puncte GPS
ST_X()dă longitudinea. Pentru SRID 4326 dă latitudinea; foloseșteST_Longitude()ca să fii sigur.
Comenzi înrudite
ST_Latitude() și ST_Longitude(): Returnează latitudinea sau longitudinea unui punct geografic (de exemplu SRID 4326) ori îl modifică.Point(): Creează un punct din coordonatele lui x și y; este cel mai simplu mod de a construi o geometrie.ST_PointN() și ST_NumPoints(): ST_PointN() returnează al n-lea punct al unei linii, iar ST_NumPoints() numărul de puncte.