量出最大的村:7.2万个村面面积排行实测
技术专栏 · 数据处理 · 2026-11-01
一个行政村有多大?凭直觉,几平方公里到头了。我们把 18 个市的 71,938 个村级面逐个算了球面面积,答案是:最大的一条「村」有 1,269 平方公里,它的范围里含着大片太湖水面;最小的只有 5,256 平方米,两极相差 24 万倍。排行、分桶、极值,这篇全部摆出来。
量法:十秒跑完 7.2 万个面
公式沿用《村界面积怎么算才准:三种公式的实测差距》里误差最稳的那一支——球面多边形近似(与 Turf.js 同款),经纬度差乘纬度正弦项累加后乘地球半径平方的一半,内环取负扣减:
const R = 6371000;
function ringArea(ring) { // 环为 [lon, lat]
let s = 0;
ring.forEach((pt, i) => { // 闭合环:上一顶点配当前点
if (!i) return;
const [x1, y1] = ring[i - 1], [x2, y2] = pt;
s += (x2 - x1) * Math.PI / 180 * (2 + Math.sin(y1 * Math.PI / 180) + Math.sin(y2 * Math.PI / 180));
});
return Math.abs(s * R * R / 2);
}
function faceArea(coords, type) { // 内环(洞)取负扣减
const polys = type === 'Polygon' ? [coords] : coords;
return polys.reduce((sum, poly) =>
sum + Math.max(ringArea(poly[0]) - poly.slice(1).reduce((a, r) => a + ringArea(r), 0), 0), 0);
}
18 个市 71,938 个面全部算完约 10 秒。面积的绝对精度在《村界面积怎么算才准》里已经验证过(球面公式与高精度公式的偏差在万分位量级),做排行与分档绰绰有余。
榜单:最大的「村」在太湖里
排行一出来,前十名的构成完全超出「村」的日常想象——三片水域、三个国有林场、一座山的村域:
榜首「湖桥村委会」在苏州吴中区,1,269.12 平方公里——太湖的大片水面被划进了这个村级面的范围。第二名是上海的「区内镇外」(893.34 平方公里),这是政区数据里常见的兜底面:管不到镇的部分统一挂一个名字。合肥包里甚至有一个名为「巢湖」的单元(452.69 平方公里),湖面在数据里的形态比想象中复杂。刨去水域,真正的山区村域冠军是成都大邑县西岭镇云华村——337.48 平方公里的雪山脚下村域;西安的厚畛子林场、成都的几个国有林场也都在 240 平方公里以上。水面、兜底面、林场,是巨型村级面的三种来源。
另一头:0 面积、半公顷与同名面
排行另一端的密度同样惊人。小于 1 公顷的村级面有 2,263 个;最小的非零面只有 5,256 平方米,在江阴。还有 3 个面的量化面积为 0——顶点自相消的退化环,属于数据里的真瑕疵,任何统计前都该先把它们剔除。一个有意思的细节:最小的几个面里「金庄村村委会」出现了三次——江阴不止一个金庄村,同名面又撞上了《给6.7万村名去重:17市撞名榜实测》里那条老结论:区分它们只能靠村级码。
体量分布的大盘:1 到 10 平方公里的面有 44,174 个,占 61.4%,是绝对主力;小于 0.1 平方公里的 7,808 个碎面多为城区面片;而 100 平方公里以上的巨型面只有 34 个,个个都值得在统计前单独看一眼。
中位数的城市性格:89 倍的差距
| 市 | 村级面数 | 面积中位数 | 均值 |
|---|---|---|---|
| 长沙市 | 1,209 | 8.33km² | 9.70km² |
| 合肥市 | 1,571 | 6.09km² | 7.25km² |
| 重庆市 | 10,847 | 6.02km² | 7.57km² |
| 北京市 | 8,021 | 0.587km² | 2.04km² |
| 天津市 | 5,847 | 0.662km² | 1.85km² |
| 上海市 | 5,601 | 0.094km² | 1.44km² |
同样叫「村」,尺度可以完全不同:长沙市的中位数 8.33 平方公里(浏阳山区村域辽阔),是上海 0.094 平方公里的 89 倍。上海的小是街坊面片的颗粒使然,北京、天津偏小也有城市化撤村的因素。拿同一套阈值去套所有城市(比如「小于 1 平方公里算异常」),在北京上海会误伤一大片,在长沙则一个都碰不到——先看本市的中位数再定异常线,是面积体检的第一步。
三条使用提醒
第一,先剔水面再统计。太湖、巢湖的水面在不同批次里处理方式并不一致:苏州侧入了村级面、无锡侧表现为空洞、合肥以湖面单元单列——湖畔城市的面均面积不剔水会被明显抬高。第二,极值面人工核,100 平方公里以上的 34 个面逐个看一眼名称与形状,水域、兜底、林场一眼可辨。第三,面积计算认准球面公式,墨卡托直算的虚胖幅度(最高七成)在《村界面积怎么算才准:三种公式的实测差距》里有完整实测。想自己复跑这份排行,18 个市的村界包在「村界数据 · 按市」按市取用,省级批量走「村界数据 · 按省」。
常见问题
- 最大的村级面有多大?为什么这么大?
- 实测 18 市 71,938 个村级面,最大的是苏州市吴中区的「湖桥村委会」——1,269 平方公里,因为它的范围里含了大片太湖水面。第二、三名是上海的「区内镇外」兜底面(893 平方公里)和合肥包里名为「巢湖」的湖面单元(453 平方公里),同样是水域在撑面积。真正的山区村域冠军是成都大邑县西岭镇云华村,337 平方公里。
- 最小的村级面有多小?零面积的面是怎么回事?
- 最小的非零面只有 5,256 平方米(半个街坊大小),在江阴;另有 3 个面量化面积为 0,属于顶点自相消的退化环。全部样本里小于 1 公顷的面有 2,263 个。最大的面与最小的面相差约 24 万倍——做面积加权统计前,先给极值面做人工核验。
- 面积是怎么算的,准不准?
- 用球面多边形近似公式(与 Turf.js 同款):经纬度差乘以纬度正弦项求和后乘地球半径平方的一半,内环取负扣减。它与《村界面积怎么算才准》里实测的三种公式结论一致:墨卡托平面直算会虚胖,球面公式误差在万分位量级,做排行与分档完全够用。18 市 71,938 个面全部算完约 10 秒。
- 哪个市的村级面平均最大、哪个最碎?
- 按市内中位数排:长沙市最大(8.33 平方公里,浏阳山区村域辽阔),合肥 6.09、重庆 6.02 次之;上海市最小(0.094 平方公里,街坊面片颗粒极细),北京 0.587、天津 0.662 倒数二三。最大与最小的市内中位数相差 89 倍——同样叫「村」,尺度可以完全不同。
- 水面算不算村级面?统计时怎么处理?
- 分批口径并不一致:太湖的大片水面在苏州吴中区被划进「湖桥村委会」,合肥包里有名为「巢湖」的湖面单元,而无锡滨湖一侧的太湖则表现为空洞。做面积统计、密度分析前,先按名称与形状识别水体面并剔除,否则湖畔市的面均面积会被严重抬高。
- 这些村界数据在哪里能拿到?
- 本文 18 个市的村界包都在「村界数据 · 按市」页按市整包出售,省一级还有整包可选;逐面面积计算的脚本本文已给出,Node 环境十分钟跑完全部地市。