上下级行政区范围不一致问题解决
问题:
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, 抽稀比例)
抽稀比例过大会导致行政区边角细节部位变形, 所以要控制好尺度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现