我一直在搜索SQL查询几天,这将允许我创建一个GeoJSON,它将为我提供数据库中多边形的轮廓。
第一个查询工作正常,它允许只在一个单元格中获取1个Geojson对象,所有多边形。
SELECT json_build_object(
'type', 'FeatureCollection',
'features', json_agg(
json_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(
the_geom
)::json,
'properties', json_build_object(
'name', name
)
)
)
)
FROM layer
现在我试图获得相同的GeoJson对象但使用Linestring而不是multipolygons。似乎函数ST_ExteriorRing()不能与函数json_agg()一起使用?我不知道我要改变什么才能让它有效...... 这是我试过的最后一个查询,但不起作用:
SELECT json_build_object(
'type', 'FeatureCollection',
'features', json_agg(
json_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(
ST_ExteriorRing( -- get the exterior lines of multipolygons
ST_GeometryN(
the_geom,
generate_series(
1,
ST_NumGeometries(the_geom)
)
)
)
)::json,
'properties', json_build_object(
'name', name
)
)
)
)
FROM layer
如果我抑制json_agg()函数它工作正常,但在这种情况下我没有得到输出中的单个单元格。 如果我使用ExteriorRing()函数它也可以正常工作,但我有MultiPolygons而不是像我想要的LineString ......
任何想法如何解决这个问题?
答案 0 :(得分:0)
几个月后我发现了,所以答案是:
SELECT json_build_object(
'type', 'FeatureCollection',
'features', json_agg(feature)
) as geojson
FROM (
SELECT json_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(
ST_ExteriorRing(
ST_GeometryN(
ST_Union(the_geom),1
)
)
)::json
) as feature
FROM layer
) t