名称

ST_AsGeoJSON — 将几何作为 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);

说明

将几何作为 GeoJSON “几何”或将行作为 GeoJSON “要素”返回。(请参阅 GeoJSON 规范 RFC 7946)。2D 和 3D 几何均受支持。GeoJSON 仅支持 SFS 1.1 几何类型(例如不支持曲线)。

可以使用 maxdecimaldigits 参数来减少输出中使用的最大小数位数(默认为 9)。如果您使用 EPSG:4326 并且仅输出几何以供显示,则 maxdecimaldigits=6 对于许多地图来说都是不错的选择。

[Warning]

使用 maxdecimaldigits 参数可能会导致输出几何无效。为避免这种情况,请先使用 ST_ReducePrecision 和合适的网格大小。

可以使用 options 参数在 GeoJSON 输出中添加 BBOX 或 CRS

  • 0:表示无选项

  • 1:GeoJSON BBOX

  • 2:GeoJSON 简短 CRS(例如 EPSG:4326)

  • 4:GeoJSON 长 CRS(例如 urn:ogc:def:crs:EPSG::4326)

  • 8:GeoJSON 简短 CRS(如果非 EPSG:4326)(默认)

GeoJSON 规范指出,多边形使用右手定则进行定向,并且某些客户端需要这种定向。可以通过使用 ST_ForcePolygonCCW 来确保这一点。该规范还要求几何位于 WGS84 坐标系中(SRID = 4326)。如有必要,可以使用 ST_Transform 将几何投影到 WGS84 中:ST_Transform( geom, 4326 )

可以在 geojson.iogeojsonlint.com 上在线测试和查看 GeoJSON。它得到 Web 制图框架的广泛支持

可用性:1.3.4

可用性:1.5.0 引入了地理支持。

已更改:2.0.0 支持默认参数和命名参数。

已更改:3.0.0 支持记录作为输入

已更改:3.0.0 输出 SRID(如果不是 EPSG:4326)。

此函数支持 3d,并且不会删除 z 索引。

示例

生成 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"}}]}

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

使用 JSONB 函数和运算符生成具有 id 属性的 Feature 的另一种方法

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

不要忘记将数据转换为 WGS84 经度、纬度以符合 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]]]}

支持 3D 几何

SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

另请参阅

ST_GeomFromGeoJSON ST_ForcePolygonCCW ST_Transform