PostGIS中几何转JSON生成多余行问题排查与解决
在Apache Superset中绘制市政边界的PostGIS数据处理方案
需求与前置准备
- 需在Apache Superset中展示市政级边界,Superset默认仅支持基于ISO-3166-2标准的省级地图
- 已通过
shp2pgsql工具将包含市政边界的Shapefile导入PostGIS数据库,生成表gis.gemeente_2021_v1,表中包含市政标识字段(gm_code、gm_naam等)和存储边界的二进制geometry列
初始错误处理尝试
为让Superset识别边界数据,尝试将geometry列转换为GeoJSON格式并生成新表,执行以下SQL:
CREATE TABLE gis.gemeente_2021_json AS SELECT gm_code, gm_naam, shape_area, json_build_object( 'type', 'Polygon', 'geometry', ST_AsGeoJSON(ST_Transform((ST_DUMP(geom)). geom::geometry(Polygon, 4326), 4326))::json)::text as geojson FROM gis.gemeente_2021_v1;
出现的问题
原表仅包含435条市政数据,但新生成的gis.gemeente_2021_json表却有1140条记录。例如市政GM0034(Almere)对应3条独立的GeoJSON行,无法实现单条记录对应完整市政边界的预期效果。
问题排查与最终解决
- 最初怀疑是MultiPolygon类型导致的问题,但未针对性调整SQL;修正SRID为28992后问题依然存在
- 最终通过直接将几何类型指定为
MultiPolygon并调整SQL逻辑,成功解决数据拆分问题,正确SQL如下:
CREATE TABLE gis.gemeente_2021_json AS SELECT gm_code, gm_naam, shape_area, json_build_object( 'type', 'MultiPolygon', 'geometry', ST_AsGeoJSON(ST_Transform( geom::geometry(MultiPolygon, 28992), 4326))::json)::text as geojson FROM gis.gemeente_2021_v1;
内容的提问来源于stack exchange,提问作者Arnold
相关产品推荐
相关产品推荐

