获取几何的外环,并将其放在geojson对象中 - Postgis - SQL

时间:2017-09-26 10:11:05

标签: sql json postgresql postgis geojson

我一直在搜索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 ......

任何想法如何解决这个问题?

1 个答案:

答案 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