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’.