上下级行政区范围不一致问题解决

问题:

pg数据库中的省市县行政区数据库的数据有问题, 省级范围和市县合并后的范围接边不一致, 导致查下出的结果错误

解决方法:

通过合并小行政区得到大行政区
省市县的表结构如下

CREATE TABLE "public"."shengj" (
  "gw_objectcid" int4 NOT NULL DEFAULT nextval('shengj_gid_seq'::regclass),
  "code" varchar(10) COLLATE "pg_catalog"."default",
  "name" varchar(50) COLLATE "pg_catalog"."default",
  "type" varchar(50) COLLATE "pg_catalog"."default",
  "gw_shape" "public"."geometry"
)
;

CREATE TABLE "public"."xianj" (
  "gw_objectcid" int4 NOT NULL DEFAULT nextval('xianj_gid_seq'::regclass),
  "code" varchar(10) COLLATE "pg_catalog"."default",
  "name" varchar(60) COLLATE "pg_catalog"."default",
  "prov_code" varchar(10) COLLATE "pg_catalog"."default",
  "prov_name" varchar(50) COLLATE "pg_catalog"."default",
  "pref_code" varchar(10) COLLATE "pg_catalog"."default",
  "pref_name" varchar(50) COLLATE "pg_catalog"."default",
  "type" varchar(50) COLLATE "pg_catalog"."default",
  "gw_shape" "public"."geometry"
)
;
CREATE TABLE "public"."shij" (
  "gw_objectcid" int4 NOT NULL DEFAULT nextval('shij_gid_seq'::regclass),
  "prov_code" varchar(10) COLLATE "pg_catalog"."default",
  "prov_name" varchar(50) COLLATE "pg_catalog"."default",
  "code" varchar(10) COLLATE "pg_catalog"."default",
  "name" varchar(50) COLLATE "pg_catalog"."default",
  "type" varchar(50) COLLATE "pg_catalog"."default",
  "gw_shape" "public"."geometry"
)
;

县合并成市

UPDATE shij sj SET gw_shape = ( SELECT st_union ( xj.gw_shape ) FROM xianj xj WHERE xj.pref_code = sj.code ) 

市合并成省

UPDATE shengj sheng  SET gw_shape = ( SELECT st_union ( shi.gw_shape ) FROM shij shi WHERE shi.prov_code = sheng.code )

重复点去除

update shengj set gw_shape = st_removerepeatedpoints(gw_shape);
update shij set gw_shape = st_removerepeatedpoints(gw_shape);
update xianj set gw_shape = st_removerepeatedpoints(gw_shape);

如果查询效率慢在不影响业务精度的前提下可以做抽稀处理, 先对最小行政区抽稀, 然后再逐级合并, 这样效果会稍微好一点, 但是也会导致接边问题

附pg抽稀方法

st_simplify(geom, 抽稀比例)

抽稀比例过大会导致行政区边角细节部位变形, 所以要控制好尺度

posted @   iminifly  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示