本节摘要:叠加分析把多个图层组合出新几何。本节讲相交、并集、擦除、缓冲区——空间分析的核心运算。
阅读完本节,你应当能够:
叠加分析把两个图层的几何组合,生成新几何和属性。比如用地范围和生态红线相交,得到冲突区域。

| 操作 | 含义 | 应用 |
|---|---|---|
| Intersect | 取公共部分 | 冲突/重叠区 |
| Union | 合并所有 | 完整覆盖 |
| Erase | A 减去 B | 剔除区域 |
| Buffer | 周围范围 | 影响范围 |
-- 用地和生态红线相交(冲突区) SELECT ST_Intersection(a.geom, b.geom) AS conflict_geom, a.land_use, b.zone FROM land a JOIN eco_redline b ON ST_Intersects(a.geom, b.geom); -- 生成 500 米缓冲区 SELECT ST_Buffer(geom, 500) AS buffer_geom FROM roads WHERE type = 'highway';
缓冲区是几何周围一定距离的范围:
缓冲区用于影响范围分析(如道路噪声 500 米内、学校 1 公里内)。
叠加分析计算量大,性能注意:
⚠️ 常见坑:叠加前不做空间索引——全表扫描慢死。先建空间索引粗筛候选,再精确叠加。
💡 关键直觉:相交取公共、并集合并、擦除剔除、缓冲生成周围范围。叠加生成新几何+属性,缓冲生成单一几何。性能靠空间索引、简化、分块、并行。
叠加操作不只是几何裁剪,还会把两个图层的属性拼到结果里,拼接规则直接影响业务统计。以相交为例:
-- 叠加时保留来源标识,方便统计 SELECT ST_Intersection(a.geom, b.geom) AS geom, a.parcel_id, b.zone_id, ST_Area(ST_Intersection(a.geom, b.geom)) AS area FROM parcels a JOIN zones b ON ST_Intersects(a.geom, b.geom);
ST_Buffer 有三个常用参数:距离、端点样式、连接样式。画道路缓冲时,round 连接更接近真实道路形态;miter 连接(尖角)在数据生产里更常见:
-- 圆头端点 + 圆角连接(默认,适合展示) SELECT ST_Buffer(geom, 20) FROM roads; -- 平头端点 + 直角连接(适合数据测量) SELECT ST_Buffer(geom, 20, 'endcap=flat join=mitre') FROM roads;
缓冲距离的单位和坐标系一致:3857 里是米,4326 里是度(1 度约 111 公里,不适合直接缓冲)。做米级缓冲务必先投影到米制坐标系。
叠加分析不只在矢量里做。栅格叠加是逐像元运算:把多个栅格(坡度、降雨、土地覆盖)按像元组合成新的评价栅格,常见于适宜性分析。矢栅混合时,先把矢量栅格化(polygonize 的逆过程),再统一到同一分辨率逐像元算。PostGIS 的栅格函数配合 ST_MapAlgebra 可以完成这类分析,工具链相对重,建议数据量不大时先用 QGIS 的栅格计算器验证思路。
需求:给充电站选址,条件是"位于商业用地、距主干道 300 米内、不在公园绿地内"。三条条件分别对应相交、缓冲、擦除:
-- 商业用地 ∩ 主干道300米缓冲 - 公园绿地 CREATE TABLE candidate AS SELECT ST_Intersection(c.geom, b.geom) AS geom FROM ( SELECT ST_Buffer(r.geom, 300) AS geom FROM roads r WHERE r.type='主干道' ) b JOIN commercial c ON ST_Intersects(c.geom, b.geom) WHERE NOT EXISTS ( SELECT 1 FROM parks p WHERE ST_Intersects(ST_Intersection(c.geom, b.geom), p.geom) );
结果表 candidate 就是候选区,再按面积排序、叠加人口数据做优先级,就能给运营决策提供依据。叠加分析的威力正在于把多个空间条件自由组合成业务规则。
下一节讲网络分析和路径规划。