ST_AsGeoJSON
Prev | 8.9.3. Other Formats | Next

## Name

ST_AsGeoJSON — Return a geometry as a GeoJSON element.

## Synopsis

`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`)`;

## Description

Returns a geometry as a GeoJSON "geometry", or a row as a GeoJSON "feature". (See the GeoJSON specifications RFC 7946). 2D and 3D Geometries are both supported. GeoJSON only support SFS 1.1 geometry types (no curve support for example).

The `maxdecimaldigits` argument may be used to reduce the maximum number of decimal places used in output (defaults to 9). If you are using EPSG:4326 and are outputting the geometry only for display, `maxdecimaldigits`=6 can be a good choice for many maps.

Using the `maxdecimaldigits` parameter can cause output geometry to become invalid. To avoid this use ST_ReducePrecision with a suitable gridsize first.

The `options` argument can be used to add BBOX or CRS in GeoJSON output:

- 0: means no 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 if not EPSG:4326 (default)

The GeoJSON specification states that polygons are oriented using the Right-Hand Rule, and some clients require this orientation. This can be ensured by using ST_ForcePolygonCCW . The specification also requires that geometry be in the WGS84 coordinate system (SRID = 4326). If necessary geometry can be projected into WGS84 using ST_Transform: `ST_Transform( geom, 4326 )`.

GeoJSON can be tested and viewed online at geojson.io and geojsonlint.com. It is widely supported by web mapping frameworks:

- OpenLayers GeoJSON Example

- Leaflet GeoJSON Example

- Mapbox GL GeoJSON Example

Availability: 1.3.4

Availability: 1.5.0 geography support was introduced.

Changed: 2.0.0 support default args and named args.

Changed: 3.0.0 support records as input

Changed: 3.0.0 output SRID if not EPSG:4326.

This function supports 3d and will not drop the z-index.

## Examples

Generate a 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"}}]}

Generate a 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"}}

An alternate way to generate Features with an `id` property is to use JSONB functions and operators:

    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"}}

Don't forget to transform your data to WGS84 longitude, latitude to conform with the GeoJSON specification:

    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]]]}

3D geometries are supported:

    SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');

    {"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

## See Also

ST_GeomFromGeoJSON, ST_ForcePolygonCCW , ST_Transform

Prev | Up | Next
ST_AsGeobuf | Home | ST_AsGML