PostGIS
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.
|
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:
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]]}