You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:30:54