GIS数据GIS DATA

同码多面与同名异码:22包8.6万面普查

技术专栏 · 数据处理 · 2026-11-07

村面和村级码的关系,是村界数据处理的第一道逻辑题。把 22 个市包、86,064 个村级面逐个过筛,两种「一对多」都真实存在:一个码对多个面的同码多面有 675 组、涉及 1,771 面;一个名字对多个码的同名异码有 231 组。搞不清这两件事,合并、去重、关联台账时就会出现「合并了不该合的、丢了不该丢的」。

普查口径与总量

22 个市包 86,064 个村级面,其中 18 包、68,774 个面带村级码(天津、武汉、西安、上海 4 包的村级码字段存在但整列为空,上海另有街坊编号可作替代键)。有码面按码分组:675 组出现「一码多面」,涉及 1,771 面;组内最多的是无锡一个码对应 17 个面(320281112202,江阴沿江的一个村级单元),次多 13 面也在江阴。

同码多面组分市普查条形图:喀什 311 组最多
18 个有码市包的同码多面组数量(降序),喀什以 311 组居首,14 个市包为零拆分。

分布高度地理化:喀什 311 组遥遥领先——帕米尔山区的村域被沟壑梁峁切成数块,一个码对应多个不相邻地块是常态;苏州 108、无锡 85、南京 81 组则是江南水网加开发区切割的组合;而广州、长沙、北京等 14 个市包为零拆分,一个码一个面。碎不碎是地理写成的,不是数据错误。

市包同码多面组涉及面单码最多
喀什地区3118499 面
苏州市10824911 面
无锡市8526217 面
南京市811897 面
成都市731857 面
北京 / 重庆 / 菏泽 / 广州 / 信阳51 / 50 / 40 / 25 / 10同名异码组(非同码多面)
广州、长沙、北京等 14 包0零拆分:一码一面

同名异码:231 组重名不是错误,是命名规律

同县之内归一名相同却持不同码的组合,有码包合计 231 组:北京 51 组、重庆 50 组、菏泽 40 组、苏州 27 组、广州 25 组、无锡 14 组、信阳 10 组。抽样看名字:平邑县的「唐村水库管理局」名下 3 个不同码、「官庄」2 个码、「高庄」2 个码——前者是水利设施面按库段拆分,后者是真正的重名村(不同乡镇各有一个官庄)。与《给6.7万村名去重:17市撞名榜实测》的跨市撞名对照,撞名从市内到跨市是一整条谱系。

处理守则:合并看用途,关联只用码

同码多面的处理分用途:面积汇总、按码染色、关联台账,不合并反而更稳——按码分组求和即可;求外轮廓或做渲染抽稀,再按码把多面合成一个 MultiPolygon,只改几何不动属性。合并函数十几行:

function mergeByCode(feats) {
  const by = new Map();
  for (let i = 0; i < feats.length; i++) {
    const c = feats[i].properties['村级码'];
    if (!by.has(c)) by.set(c, []);
    by.get(c).push(feats[i]);
  }
  const merged = [];
  by.forEach((fs, c) => {
    const coords = fs.flatMap(f =>
      f.geometry.type === 'Polygon' ? [f.geometry.coordinates] : f.geometry.coordinates);
    merged.push({ type: 'Feature', properties: fs[0].properties,
                  geometry: { type: 'MultiPolygon', coordinates: coords } });
  });
  return { type: 'FeatureCollection', features: merged };
}
// 喀什 311 组同码多面实测:合并零失败(849 面 → 311 个 MultiPolygon)

同名异码的处理只有一条:机器关联永远用码,名称留给人工核对。231 组同名异码就是最好的反例清单——它们名字相同、位置不同、码不同,合并它们才是真正的错误。

数据从哪来,口径去哪查

本文 22 个市包在「村界数据 · 按市」页按市整包出售,省级批量走「村界数据 · 按省」整包。每份包的村级码、归属链字段的实际口径(满、空、特殊码),站内对应城市文章都有实测说明——选包之前先读口径,数据处理就少走弯路。

常见问题

同码多面是什么?是数据错误吗?
同一个村级码对应多个面就是同码多面。它不是错误:山区村域被梁峁水线切成数块、集体林场跨越山头,一个码自然对应多个不相邻的多边形。实测 22 个市包 86,064 个村级面,有码包里同码多面 675 组、涉及 1,771 面,喀什一个市就占 311 组——帕米尔山区村面被沟壑切碎的如实表达。
同码多面的多个面要合并成一个吗?
看用途:做面积汇总、染色、按码关联台账,不合并反而更稳,直接按码分组求和即可;做渲染抽稀或求外轮廓时,可以按码合并成 MultiPolygon,只改几何不动属性。合并脚本本文已给出,喀什 311 组实测合并零失败。
同名异码又是什么?和同码多面怎么区分?
同码多面是一个码对多个面(一个村的多个地块);同名异码是同一个名字对多个码(不同地方的同类命名)。后者才是重名:比如临沂平邑县的「唐村水库管理局」名下有 3 个不同码的面。两者用键就能区分——按码分组出现多面是前者,按名分组出现多码是后者。
有多少同名的「重名村」?
同县内归一名相同的组:北京 51 组、重庆 50 组、菏泽 40 组、广州 25 组、苏州 27 组、无锡 14 组、信阳 10 组,有码 18 包合计 231 组。跨市的同名更多——17 市撞名实测里「向阳」「花园」全勤。结论不变:名称做人工核对,机器关联只用码。
村级码字段整列为空的包怎么处理?
22 包里有 4 包(天津、武汉、西安、上海,合计 17,290 面)的村级码字段存在但整列为空。这类包改用名称加区县做逻辑键,或借助经纬度质心做空间关联;上海另有街坊编号字段可作为替代键。关联完成后把替代键写回属性列,方便后续维护。
这些市包在哪里能拿到?
本文 22 个市的村界包都在「村界数据 · 按市」页按市整包出售,省级批量走「村界数据 · 按省」整包。每份包的村级码、归属链等字段的实际口径,站内对应文章都有实测说明。