---
title: "ST_AsGeoJSON"
draft: false
hidden: true
---
ST_AsGeoJSON — Return a geometry or feature in GeoJSON format.
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
)
;
Returns a geometry as a GeoJSON "geometry" object, or a row as a GeoJSON "feature" object.
The resulting GeoJSON geometry and feature representations conform with the GeoJSON specifications RFC 7946 , except when the parsed geometries are referenced with a CRS other than WGS84 longitude and latitude ( EPSG:4326 , urn:ogc:def:crs:OGC::CRS84 ); the GeoJSON geometry object will then have a short CRS SRID identifier attached by default. 2D and 3D Geometries are both supported. GeoJSON only supports SFS 1.1 geometry types (no curve support for example).
The
geom_column
parameter is used to distinguish
between multiple geometry columns.
If omitted, the first geometry column in the record will be determined.
Conversely, passing the parameter will save column type lookups.
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
|
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
id_column
parameter is used to set the "id" member of the returned GeoJSON features. As per GeoJSON RFC, this SHOULD be used whenever a feature has a commonly used identifier, such as a primary key. When not specified, the produced features will not get an "id" member and any columns other than the geometry, including any potential keys, will just end up inside the feature’s "properties" member.
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:
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.
Changed: 3.5.0 allow specifying the column containing the feature id
This function supports 3d and will not drop the z-index.
Generate a 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"}}]}
Generate a 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"}}
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]]}
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]}