GIS数据GIS DATA

量出最大的村: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 秒。面积的绝对精度在《村界面积怎么算才准》里已经验证过(球面公式与高精度公式的偏差在万分位量级),做排行与分档绰绰有余。

榜单:最大的「村」在太湖里

排行一出来,前十名的构成完全超出「村」的日常想象——三片水域、三个国有林场、一座山的村域:

村级面面积 TOP10 榜:最大的村在太湖里
村级面面积 TOP10(条长按面积开方缩放),蓝为水域与兜底面、青为山区村域、灰绿为国有林场。

榜首「湖桥村委会」在苏州吴中区,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,2098.33km²9.70km²
合肥市1,5716.09km²7.25km²
重庆市10,8476.02km²7.57km²
北京市8,0210.587km²2.04km²
天津市5,8470.662km²1.85km²
上海市5,6010.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 环境十分钟跑完全部地市。