GIS数据GIS DATA

村界里的飞地与洞:MultiPolygon 解剖实测

技术专栏 · 数据处理 · 2026-10-17

上一篇讲点在面内判定时踩过 MultiPolygon 的坑,这篇干脆把全国六份村界包(成都、重庆、广州、武汉、宜春、铜鼓,合计 21,781 个村级面)全部解剖了一遍:MultiPolygon 到底多不多、有没有真的飞地、内环「洞」里装的是什么。结论有三条,其中一条——最大的洞是 16.32 平方公里的长江水面——值得单独讲。

普查表:六份包的几何形态

逐面统计几何类型、面件数与内环数量,六份包的账如下:

样本村级面MultiPolygon 占比多件面(真飞地)内环(洞)
成都市2,8161.1%039
重庆市10,8475.6%0811
广州市2,6316.2%0296
武汉市2,6398.3%0299
宜春市2,7510.8%026
铜鼓县970%00

三条读法。第一,没有任何一个真正的多件面——六份包 21,781 个面逐个拆开,每个 MultiPolygon 里都只有一个面件。第二,MultiPolygon 类型的占比随城市化程度爬升(铜鼓 0%、武汉 8.3%),说明这是清洗管线对某些面做的类型归一,而不是几何事实。第三,洞在山地库区城市明显更多:重庆 811 个对宜春 26 个,三峡库区的水域岸线贡献了大头。

最大的洞:一条叫「长江」的村

把面积超过 0.05 平方公里的 1,031 个洞按大小排队,冠军在广州龙穴街道——30.19 平方公里的洞,质心落在伶仃洋水域;亚军在武汉,一个村名就叫「天兴乡长江」的面,挖掉了 16.32 平方公里的长江主槽。把它的村级面画出来:

武汉天兴乡长江村级面解剖:浅绿陆域岸线环绕蓝色长江主槽水面洞
浅绿为村级面的陆域部分,蓝色是挖掉的洞——长江主槽水面。村界沿水岸走、水面不属任何村,「洞」正是这种口径的几何表达。

洞里装的是谁,验证方法是把洞的质心坐标拿回同一份包里再做一遍点在面内判定。本文对 1,031 个大洞逐一验证:质心几乎全部无面覆盖——水域、独立图斑或未划归的线状地物。这不是数据缺陷,而是「村级管理边界止于水岸」口径的正确表达;反过来,若某个洞的质心落进了另一个村的面里,那就是「村中村」图斑,需要按上级单元的口径处理。

解析时的三件事

统计与解析村界几何,按这三步走就不会栽。第一步按类型摊环:Polygon 的坐标是一层环列表,MultiPolygon 是「面→环」两层,先摊平再处理——上一篇的 0 命中 bug 就是栽在这里。第二步数内环从每面第二个环起:每个面的第一个环是外环,其余是洞;洞的存在完全正常,别当成自相交去修。第三步算面积外环加、内环减:漏掉内环,天兴乡长江这样的水面村会凭空多出十几平方公里。三步的完整代码在《把1.4万座山峰落到村界:网格索引快了102倍》与《村界面积怎么算才准:三种公式的实测差距》里各有一份。

想亲手拆一份村界包看看自己的数据长什么样,按市、按县的包在村界数据 · 按市页按需取用;拆完的几何体检(缝隙、重叠、自相交)直接复用《边界数据拓扑检查:一段脚本查出缝隙与重叠》的脚本。

常见问题

村界数据里有飞地吗?MultiPolygon 多不多?
类型标注上有——本文六份包 21,781 个村级面里,0.8% 到 8.3% 被标为 MultiPolygon;但逐个拆开看,全部只含一个面件,没有一个真正的多件飞地面。MultiPolygon 在这里是类型层的写法差异,不是几何层的飞地事实,解析器按两层结构兼容即可,不必当异常处理。
村级面里的「洞」是什么?数据错了吗?
洞是面内不属于该村的外部区域,最常见的是水域。本文实测六份包共 1,471 个内环,最大的洞在广州龙穴街道(30.19 平方公里,伶仃洋水域)和武汉天兴乡长江(16.32 平方公里,长江主槽)——村界沿水岸走、水面不属任何村,洞正是这种口径的几何表达,不是数据错误。
怎么确认洞里装的是别的单元?
取洞的质心坐标,回到同一份包里做一遍点在面内判断。本文对超过 0.05 平方公里的洞逐一验证:绝大多数洞的质心不被任何村级面覆盖,对应水域或独立图斑;若洞内发现了其他村级面,说明存在真正的「村中村」图斑,此时按洞所属的上级单元处理即可。
解析村界数据时,几何类型要注意什么?
三件事:按 geometry.type 分支处理 Polygon 与 MultiPolygon,MultiPolygon 要把「面→环」两层摊平到环一级;统计内环时从每面第二个环数起;面积计算要区分外环与内环的符号。任何一步按固定层数硬编码,换一份来源就会静默出错。
洞会影响面积统计吗?
会,而且是往小里算——洞不属于该村,村界面积必须扣掉洞。实测武汉天兴乡长江的村级面挖掉长江主槽后仅剩岸线条带;若解析时忽略内环,该村的面积会凭空多出 16 平方公里的水面。本文的球面面积脚本对每个外环加、每个内环减,洞的扣除是自动的。