ST_AsGeoJSON — Renvoie une géométrie sous la forme d'un élément GeoJSON.
text ST_AsGeoJSON(
record feature, text geomcolumnname, integer maxdecimaldigits=9, boolean pretty_bool=false)
;
text ST_AsGeoJSON(
geometry geom, integer maxdecimaldigits=9, integer options=8)
;
text ST_AsGeoJSON(
geography geog, integer maxdecimaldigits=9, integer options=0)
;
Renvoie une géométrie sous la forme d'une "géométrie" GeoJSON, ou une ligne sous la forme d'une "caractéristique" GeoJSON. (Voir le spécifications GeoJSON RFC 7946). Les géométries 2D et 3D sont toutes deux supportées. GeoJSON ne supporte que les types de géométrie SFS 1.1 (pas de support des courbes par exemple).
L'argument maxdecimaldigits
peut être utilisé pour réduire le nombre maximum de décimales utilisées dans la sortie (par défaut 9). Si vous utilisez EPSG:4326 et que vous sortez la géométrie uniquement pour l'affichage, maxdecimaldigits
=6 peut être un bon choix pour de nombreuses cartes.
L'utilisation du paramètre |
L'argument options
peut être utilisé pour ajouter BBOX ou CRS dans la sortie GeoJSON :
0 : signifie aucune option
1 : GeoJSON BBOX
2 : GeoJSON Short CRS (e.g. EPSG:4326)
4 : GeoJSON Long CRS (e.g. urn:ogc:def:crs:EPSG::4326)
8 : GeoJSON Short CRS si pas EPSG:4326 (par défaut)
La spécification GeoJSON indique que les polygones sont orientés selon la règle de la main droite, et certains clients exigent cette orientation. Ceci peut être assuré en utilisant ST_ForcePolygonCCW . La spécification exige également que la géométrie soit dans le système de coordonnées WGS84 (SRID = 4326). Si nécessaire, la géométrie peut être projetée en WGS84 en utilisant ST_Transform : ST_Transform( geom, 4326 )
.
GeoJSON peut être testé et visualisé en ligne sur geojson.io et geojsonlint.com. Il est largement pris en charge par les frameworks de cartographie web :
Disponibilité : 1.3.4
Disponibilité : 1.5.0 Le support de la géographie a été introduit.
Modifié : 2.0.0 supporte les args par défaut et les args nommés.
Modifié : la version 3.0.0 prend en charge les enregistrements en tant que données d'entrée
Modifié : 3.0.0 SRID de sortie si ce n'est pas EPSG:4326.
Cette fonction prend en charge la 3D et ne supprime pas l'indice z.
Générer une FeatureCollection :
SELECT json_build_object( 'type', 'FeatureCollection', 'features', json_agg(ST_AsGeoJSON(t.*)::json) ) FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry), (2, 'two', 'POINT(2 2)'), (3, 'three', 'POINT(3 3)') ) as t(id, name, geom);
{"type" : "FeatureCollection", "features" : [{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "properties": {"id": 1, "name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "properties": {"id": 2, "name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "properties": {"id": 3, "name": "three"}}]}
Génère une Feature :
SELECT ST_AsGeoJSON(t.*) FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson ----------------------------------------------------------------------------------------------------------------- {"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "properties": {"id": 1, "name": "one"}}
Une autre façon de générer des caractéristiques avec une propriété id
est d'utiliser les fonctions et les opérateurs JSONB :
SELECT jsonb_build_object( 'type', 'Feature', 'id', id, 'geometry', ST_AsGeoJSON(geom)::jsonb, 'properties', to_jsonb( t.* ) - 'id' - 'geom' ) AS json FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
json ----------------------------------------------------------------------------------------------------------------- {"id": 1, "type": "Feature", "geometry": {"type": "Point", "coordinates": [1, 1]}, "properties": {"name": "one"}}
N'oubliez pas de transformer vos données en longitude et latitude WGS84 pour vous conformer à la spécification GeoJSON :
SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson ----------------------------------------------------------------------------------------------------------- {"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000], [-89.734955999999997,31.492237999999997]]]}
Les géométries 3D sont prises en charge :
SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}