union
把两个多边形合并成一个整体,重叠部分只保留一次。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
polygon1 | Polygon / MultiPolygon / Feature | 第一个面 |
polygon2 | Polygon / MultiPolygon / Feature | 第二个面 |
返回值
合并后的面。两个面相邻或重叠时返回 Polygon,完全分离时返回 MultiPolygon。 因此下游代码必须同时处理这两种类型。
示例
var west = turf.polygon([[[116.30, 39.88], [116.40, 39.88], [116.40, 39.96],
[116.30, 39.96], [116.30, 39.88]]]);
var east = turf.polygon([[[116.38, 39.90], [116.48, 39.90], [116.48, 39.98],
[116.38, 39.98], [116.38, 39.90]]]);
var merged = turf.union(west, east);
console.log(merged.geometry.type); // Polygon
console.log(turf.area(merged) / 1e6); // 合并后面积
var sum = (turf.area(west) + turf.area(east)) / 1e6;
console.log(sum - turf.area(merged) / 1e6); // 重叠部分的面积
面积核对
合并后的面积等于两者面积之和减去交集面积,这条恒等式是校验结果是否可信的 最直接手段。算出来的差值为负,说明输入的环有重叠或自相交问题。
属性会丢
union 只返回几何,属性通常为空对象。合并行政区、
合并地块时属性怎么处理属于业务决定:取第一个、取并集、
或者按面积占优取一个。写法上先合并,再赋值:
var merged = turf.union(west, east);
merged.properties = {
name: '西部片区 + 东部片区',
source: [west.properties.code, east.properties.code]
};
多个面依次合并
函数只接受两个面。批量合并时成对累加,每次合并的结果作为下一次调用的输入。 合并顺序会影响中间结果的顶点数,但最终几何相同。
var parts = [west, east, north];
var result = parts.reduce(function (acc, cur) {
return turf.union(acc, cur);
});
/* 结果类型可能在中途从 Polygon 变成 MultiPolygon */
console.log(result.geometry.type);
面数量上百时,成对合并的耗时会明显上升。相邻面先按空间索引分组, 每组合并一次,再合并组结果,可以减少重复计算。
和 dissolve 的区别
合并同类要素并去掉内部边界,是 GIS 里的「融合」操作。
union 只处理两个输入,不按属性分组。
需要按字段融合整个图层时,先把同组要素合并,
再把结果收集成 FeatureCollection。
合并前统一环方向。输入面的环方向混乱时,个别版本的合并结果会出现
内环被当成外环的情况。用 turf.rewind 规范化后再合并,
结果更稳定。
经纬志(2026)。《union》。https://www.jingweizhi.com/turf/api/union.html(访问日期 2026-11-03)。