Name

ST_AsGeoJSON — Renvoyer une géométrie ou un élément au format GeoJSON.

Synopsis

text ST_AsGeoJSON(record feature, text geom_column="", integer maxdecimaldigits=9, boolean pretty_bool=false, text id_column='');

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

Description

Renvoie une géométrie sous forme d'objet GeoJSON "geometry", ou une ligne sous forme d'objet GeoJSON "feature".

Les représentations de géométrie et d'entités GeoJSON résultantes sont conformes aux spécifications GeoJSON RFC 7946, sauf lorsque les géométries analysées sont référencées avec un CRS autre que la longitude et la latitude WGS84 (EPSG:4326, urn:ogc:def:crs:OGC::CRS84) ; l'objet géométrique GeoJSON aura alors un identifiant SRID CRS court attaché par défaut. 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 pour les courbes par exemple).

Le paramètre geom_column est utilisé pour faire la distinction entre plusieurs colonnes géométriques. S'il est omis, la première colonne géométrique de l'enregistrement sera déterminée. Inversement, l'utilisation de ce paramètre permet d'économiser les recherches sur le type de colonne.

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.

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

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)

Le paramètre id_column est utilisé pour définir le membre "id" des caractéristiques GeoJSON renvoyées. Conformément à la RFC GeoJSON, ce paramètre DEVRAIT être utilisé chaque fois qu'un élément a un identifiant couramment utilisé, tel qu'une clé primaire. Si elle n'est pas spécifiée, les entités produites n'auront pas de membre "id" et toutes les colonnes autres que la géométrie, y compris les clés potentielles, se retrouveront dans le membre "properties" de l'entité.

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.

Modifié : la version 3.5.0 permet de spécifier la colonne contenant l'identifiant de l'élément

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Générer une FeatureCollection :

SELECT json_build_object(
    'type', 'FeatureCollection',
    'features', json_agg(ST_AsGeoJSON(t.*, id_column =
> 'id')::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]}, "id": 1, "properties": {"name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "id": 2, "properties": {"name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "id": 3, "properties": {"name": "three"}}]}

Génère une Feature :

SELECT ST_AsGeoJSON(t.*, id_column =
> 'id')
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson
-----------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 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]]}

Options argument can be used to add BBOX and CRS in GeoJSON output:

SELECT ST_AsGeoJSON(ST_SetSRID('POINT(1 1)'::geometry, 4326), 9, 4|1);
{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1.000000000,1.000000000,1.000000000,1.000000000],"coordinates":[1,1]}