ST_AsText() în MySQL

Transformă o geometrie în text WKT, ușor de citit: POINT(1 2), LINESTRING(...), POLYGON(...).

Sintaxă
ST_AsText(geometrie [, optiuni])
ST_AsWKT(geometrie [, optiuni])

Ce face ST_AsText()

MySQL păstrează geometriile într-un format binar intern. ST_AsText() le transformă în textul WKT, pe care îl poți citi, afișa sau trimite altui program. ST_AsWKT() este sinonim.

Pentru SRID 4326, textul are implicit ordinea „latitudine longitudine”. Cu 'axis-order=long-lat' obții ordinea inversă, cerută de multe biblioteci de hărți. Colecția goală apare ca GEOMETRYCOLLECTION EMPTY, iar punctele dintr-un MULTIPOINT apar fiecare între paranteze.

Parametri

Parametru Descriere
geometrie Valoarea spațială de afișat.
optiuni Opțional: 'axis-order=lat-long', 'axis-order=long-lat' sau 'axis-order=srid-defined'.

Ce returnează

Un text WKT; NULL dacă geometria este NULL.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE cartiere (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  forma POLYGON NOT NULL
);

INSERT INTO cartiere VALUES
  (1, 'Centru',   ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
  (2, 'Copou',    ST_GeomFromText('POLYGON((0 4,4 4,4 8,0 8,0 4))')),
  (3, 'Tătărași', ST_GeomFromText('POLYGON((3 1,7 1,7 5,3 5,3 1))')),
  (4, 'Galata',   ST_GeomFromText('POLYGON((10 0,13 0,13 3,10 3,10 0))'));

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: Coloane spațiale afișate ca text

SELECT nume, ST_AsText(forma) AS wkt, ST_AsWKT(ST_Centroid(forma)) AS centru
FROM cartiere
ORDER BY id;

Rezultat

+-------------+-------------------------------------+-----------------+
| nume        | wkt                                 | centru          |
+-------------+-------------------------------------+-----------------+
| Centru      | POLYGON((0 0,4 0,4 4,0 4,0 0))      | POINT(2 2)      |
| Copou       | POLYGON((0 4,4 4,4 8,0 8,0 4))      | POINT(2 6)      |
| Tătărași    | POLYGON((3 1,7 1,7 5,3 5,3 1))      | POINT(5 3)      |
| Galata      | POLYGON((10 0,13 0,13 3,10 3,10 0)) | POINT(11.5 1.5) |
+-------------+-------------------------------------+-----------------+

Exemplul 2: Ordinea axelor pentru coordonate GPS

SELECT nume,
       ST_AsText(loc) AS lat_long,
       ST_AsText(loc, 'axis-order=long-lat') AS long_lat
FROM orase
WHERE id <= 2;

Rezultat

+-------------+------------------------+------------------------+
| nume        | lat_long               | long_lat               |
+-------------+------------------------+------------------------+
| Iași        | POINT(47.1585 27.6014) | POINT(27.6014 47.1585) |
| Cluj-Napoca | POINT(46.7712 23.6236) | POINT(23.6236 46.7712) |
+-------------+------------------------+------------------------+

Greșeli frecvente

  • Compari geometrii cu ST_AsText(a) = ST_AsText(b). Aceeași formă poate avea texte diferite (alt punct de pornire, puncte repetate); folosește ST_Equals().

Comenzi înrudite

  • ST_GeomFromText(): Creează o geometrie de orice tip din textul ei WKT („Well-Known Text”), opțional cu SRID.
  • ST_AsBinary(): Transformă o geometrie în formatul binar standard WKB („Well-Known Binary”), folosit la schimbul de date.
  • ST_AsGeoJSON(): Transformă o geometrie în GeoJSON, formatul folosit de hărțile web (Leaflet, Mapbox, OpenLayers).
  • ST_SwapXY(): Inversează coordonatele X și Y ale fiecărui punct dintr-o geometrie.