经纬志
首页 / Turf.js / API 文档

booleanOverlap

先看结论

两个同维度几何有交集、但谁也不完全包含谁时返回真,用来识别「部分压盖」。

最后验证 2026-11-03 · Turf.js 7.x · 更新 2026-10-29 · 引用本文
turf.booleanOverlap(feature1, feature2) → boolean

参数

参数类型说明
feature1Geometry | Feature线或面,含 Multi 变体
feature2Geometry | Feature另一条线或面

支持的组合是 LineString / MultiLineString / Polygon / MultiPolygon。 点与点、点与面不在判定范围内。

示例

var a = turf.polygon([[[0, 0], [0, 5], [5, 5], [5, 0], [0, 0]]]);
var b = turf.polygon([[[1, 1], [1, 6], [6, 6], [6, 1], [1, 1]]]);
var c = turf.polygon([[[10, 10], [10, 15], [15, 15], [15, 10], [10, 10]]]);
var inner = turf.polygon([[[2, 2], [2, 3], [3, 3], [3, 2], [2, 2]]]);

console.log(turf.booleanOverlap(a, b));      // true
console.log(turf.booleanOverlap(a, c));      // false,分离
console.log(turf.booleanOverlap(a, inner));  // false,inner 被完全包含

判定表

关系结果说明
完全分离false交集为空
仅边界接触false交集维度低于输入
部分交集true交集仍与输入同维度
完全包含false小几何被大几何包住
完全相等false交集等于两者,不算部分重叠

找重叠地块

var overlaps = [];

for (var i = 0; i < parcels.length; i++) {
  for (var j = i + 1; j < parcels.length; j++) {
    if (turf.booleanOverlap(parcels[i], parcels[j])) {
      overlaps.push([i, j]);
    }
  }
}

双重循环的复杂度是 O(n²)。地块上千时,先按 bbox 分桶, 只在相邻桶内两两比较,否则调用次数会迅速失控。

面积重叠但不是几何重叠

部分重叠必然带来面积交叠,但「面积计算出的重叠」不一定经过这一步判断。 需要量化重叠程度时,用 turf.intersect 求交, 再用 turf.area 计算面积,与两者各自面积对比。

它不适合点数据。 传入点要素时结果没有业务意义。判断点是否落在面内用 booleanPointInPolygon,判断两组点是否有重合用 booleanEqual 或按属性去重。

引用本文

经纬志(2026)。《booleanOverlap》。https://www.jingweizhi.com/turf/api/boolean-overlap.html(访问日期 2026-11-03)。