Point() în MySQL

Creează un punct din coordonatele lui x și y; este cel mai simplu mod de a construi o geometrie.

Sintaxă
Point(x, y)

Ce face Point()

Point() construiește direct o valoare de tip POINT, fără text WKT. Rezultatul are SRID 0, adică un plan cartezian obișnuit (coordonate x, y fără unitate). Este potrivit pentru planuri, hărți locale sau jocuri.

Pentru puncte reale pe glob (latitudine și longitudine) ai nevoie de SRID 4326. Cu Point() se face așa: ST_SRID(Point(longitudine, latitudine), 4326). Varianta recomandată de manual este ST_GeomFromText('POINT(lat long)', 4326), care creează direct punctul în sistemul corect.

Valoarea rezultată este binară; ca s-o citești, transform-o în text cu ST_AsText().

Parametri

Parametru Descriere
x Prima coordonată (pe plan: orizontala).
y A doua coordonată (pe plan: verticala).

Ce returnează

O valoare POINT cu SRID 0.

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));

Exemplul 1: Un punct și coordonatele lui

SELECT ST_AsText(Point(3, 4)) AS punct,
       ST_X(Point(3, 4)) AS x,
       ST_Y(Point(3, 4)) AS y,
       ST_SRID(Point(3, 4)) AS srid;

Rezultat

+------------+------+------+------+
| punct      | x    | y    | srid |
+------------+------+------+------+
| POINT(3 4) |    3 |    4 |    0 |
+------------+------+------+------+

Exemplul 2: Puncte salvate într-o coloană POINT

SELECT nume, ST_AsText(loc) AS pozitie
FROM magazine
ORDER BY id;

Rezultat

+-----------------+-------------+
| nume            | pozitie     |
+-----------------+-------------+
| Librăria Ana    | POINT(1 1)  |
| Florăria Dan    | POINT(2 6)  |
| Brutăria Ioana  | POINT(5 3)  |
| Cafeneaua Mara  | POINT(4 2)  |
| Atelierul Radu  | POINT(12 1) |
+-----------------+-------------+

Exemplul 3: Punct geografic: Iași, cu longitudinea pe primul loc

SET @iasi = ST_SRID(Point(27.6014, 47.1585), 4326);

SELECT ST_Longitude(@iasi) AS longitudine,
       ST_Latitude(@iasi) AS latitudine,
       ST_AsText(@iasi) AS wkt;

Rezultat

+-------------+------------+------------------------+
| longitudine | latitudine | wkt                    |
+-------------+------------+------------------------+
|     27.6014 |    47.1585 | POINT(47.1585 27.6014) |
+-------------+------------+------------------------+

Greșeli frecvente

  • Afișezi coloana direct, cu SELECT loc. Primești octeți binari greu de citit; folosește ST_AsText(loc).
  • Scrii Point(47.1585, 27.6014) pentru Iași și apoi îl treci în SRID 4326. Point() primește longitudinea primul, deci ai obține un punct în Arabia Saudită. Ordinea corectă este Point(27.6014, 47.1585).

Comenzi înrudite

  • ST_GeomFromText(): Creează o geometrie de orice tip din textul ei WKT („Well-Known Text”), opțional cu SRID.
  • 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.
  • ST_AsText(): Transformă o geometrie în text WKT, ușor de citit: POINT(1 2), LINESTRING(…), POLYGON(…).