ST_AsGeoJSON — 以 GeoJSON 格式返回几何图形或要素。
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)
;
将几何图形作为 GeoJSON “geometry” 对象返回,或将行作为 GeoJSON “feature” 对象返回。
生成的 GeoJSON 几何图形和要素表示符合 GeoJSON 规范 RFC 7946,除非解析的几何图形引用的 CRS 不是 WGS84 经度和纬度(EPSG:4326,urn:ogc:def:crs:OGC::CRS84);默认情况下,GeoJSON 几何对象将附加一个短的 CRS SRID 标识符。支持 2D 和 3D 几何图形。GeoJSON 仅支持 SFS 1.1 几何类型(例如,不支持曲线)。
geom_column
参数用于区分多个几何列。如果省略,则将确定记录中的第一个几何列。相反,传递该参数将节省列类型查找。
maxdecimaldigits
参数可用于减少输出中使用的最大小数位数(默认为 9)。如果您正在使用 EPSG:4326 并且仅输出几何图形以进行显示,则 maxdecimaldigits
=6 对于许多地图来说是一个不错的选择。
使用 |
options
参数可用于在 GeoJSON 输出中添加 BBOX 或 CRS
0:表示没有选项
1:GeoJSON BBOX
2:GeoJSON 短 CRS(例如 EPSG:4326)
4:GeoJSON 长 CRS(例如 urn:ogc:def:crs:EPSG::4326)
8:如果不是 EPSG:4326,则为 GeoJSON 短 CRS(默认值)
id_column
参数用于设置返回的 GeoJSON 要素的 “id” 成员。根据 GeoJSON RFC,只要要素具有常用的标识符(例如主键),就应该使用此参数。如果未指定,则生成的要素将不会获得 “id” 成员,并且除几何图形之外的任何列(包括任何潜在的键)都将最终出现在要素的 “properties” 成员中。
GeoJSON 规范声明多边形使用右手规则定向,并且一些客户端需要此方向。这可以通过使用 ST_ForcePolygonCCW 来确保。该规范还要求几何图形位于 WGS84 坐标系中(SRID = 4326)。如有必要,可以使用 ST_Transform 将几何图形投影到 WGS84 中:ST_Transform( geom, 4326 )
。
可以在 geojson.io 和 geojsonlint.com 在线测试和查看 GeoJSON。它受到 Web 地图框架的广泛支持
可用性:1.3.4
可用性:1.5.0 引入了地理支持。
已更改:2.0.0 支持默认参数和命名参数。
已更改:3.0.0 支持将记录作为输入
已更改:3.0.0 如果不是 EPSG:4326,则输出 SRID。
已更改:3.5.0 允许指定包含要素 id 的列
此函数支持 3D,并且不会删除 z 索引。
生成一个 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"}}]}
生成一个要素
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"}}
不要忘记将您的数据转换为 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]]}
可以使用 options 参数在 GeoJSON 输出中添加 BBOX 和 CRS
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]}