首页 / Turf.js / API 文档
booleanOverlap
先看结论
两个同维度几何有交集、但谁也不完全包含谁时返回真,用来识别「部分压盖」。
turf.booleanOverlap(feature1, feature2) → boolean
参数
| 参数 | 类型 | 说明 |
|---|---|---|
feature1 | Geometry | Feature | 线或面,含 Multi 变体 |
feature2 | Geometry | 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)。