ST_AsGeoJSON() în MySQL

Transformă o geometrie în GeoJSON, formatul folosit de hărțile web (Leaflet, Mapbox, OpenLayers).

Sintaxă
ST_AsGeoJSON(geometrie [, max_zecimale [, optiuni]])

Ce face ST_AsGeoJSON()

GeoJSON este un format JSON pentru date geografice. ST_AsGeoJSON() produce un obiect de forma {"type": "Point", "coordinates": [27.6014, 47.1585]}. În GeoJSON coordonatele sunt mereu în ordinea longitudine, latitudine, indiferent de SRID.

max_zecimale rotunjește coordonatele. optiuni este o mască de biți: 1 adaugă dreptunghiul de încadrare (bbox), 2 adaugă sistemul de coordonate în forma scurtă (EPSG:4326), 4 în forma lungă (urn:ogc:def:crs:EPSG::4326). Pentru SRID 0 nu se adaugă sistemul de coordonate.

Parametri

Parametru Descriere
geometrie Valoarea spațială.
max_zecimale Opțional: numărul maxim de zecimale ale coordonatelor.
optiuni Opțional: 0 (implicit), 1 = bbox, 2 = CRS scurt, 4 = CRS lung; se pot aduna (ex. 3).

Ce returnează

Un text JSON (GeoJSON).

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: Orașe ca GeoJSON, rotunjite la 2 zecimale

SELECT nume, ST_AsGeoJSON(loc, 2) AS geojson
FROM orase
ORDER BY id;

Rezultat

+-------------+--------------------------------------------------+
| nume        | geojson                                          |
+-------------+--------------------------------------------------+
| Iași        | {"type": "Point", "coordinates": [27.6, 47.16]}  |
| Cluj-Napoca | {"type": "Point", "coordinates": [23.62, 46.77]} |
| București   | {"type": "Point", "coordinates": [26.1, 44.43]}  |
| Timișoara   | {"type": "Point", "coordinates": [21.21, 45.75]} |
| Constanța   | {"type": "Point", "coordinates": [28.63, 44.16]} |
+-------------+--------------------------------------------------+

Exemplul 2: Linie cu bbox și sistem de coordonate

SET @traseu = ST_GeomFromText('LINESTRING(47.1585 27.6014, 46.7712 23.6236)', 4326);

SELECT ST_AsGeoJSON(@traseu, 2, 3) AS geojson;

Rezultat

+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| geojson                                                                                                                                                                   |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"crs": {"type": "name", "properties": {"name": "EPSG:4326"}}, "bbox": [23.62, 46.77, 27.6, 47.16], "type": "LineString", "coordinates": [[27.6, 47.16], [23.62, 46.77]]} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Exemplul 3: Rezultatul este JSON valid

SET @g = ST_AsGeoJSON(Point(3, 4));

SELECT JSON_EXTRACT(@g, '$.type') AS tip, JSON_EXTRACT(@g, '$.coordinates[0]') AS x;

Rezultat

+---------+------+
| tip     | x    |
+---------+------+
| "Point" | 3.0  |
+---------+------+

Greșeli frecvente

  • Te aștepți la ordinea lat-long din WKT. GeoJSON folosește mereu longitudine, latitudine; nu le inversa la afișarea pe hartă.

Comenzi înrudite

  • ST_GeomFromGeoJSON(): Citește un obiect GeoJSON și returnează geometria; implicit, rezultatul are SRID 4326.
  • ST_AsText(): Transformă o geometrie în text WKT, ușor de citit: POINT(1 2), LINESTRING(…), POLYGON(…).
  • JSON_EXTRACT(): Citește o valoare dintr-un document JSON după o cale ca ‘$.adresa.strada’.