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

booleanTouches

先看结论

两个几何共享边界点、但内部互不相交时返回真,用来识别「贴在一起但不叠」。

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

参数

参数类型说明
feature1Geometry | Feature第一个几何
feature2Geometry | Feature第二个几何

没有选项参数。返回值只回答「是否仅接触」,不给出接触的位置或长度。

示例

var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);

console.log(turf.booleanTouches(turf.point([1, 1]), line));   // true,端点
console.log(turf.booleanTouches(turf.point([1, 2]), line));   // false,内部点

var left = turf.polygon([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]);
var right = turf.polygon([[[1, 0], [2, 0], [2, 1], [1, 1], [1, 0]]]);

console.log(turf.booleanTouches(left, right));                // true,共边

共边的两块地在拓扑上相邻,交集是一条线,维度低于面, 因此判定为接触而不是重叠。

三种关系的对照

关系booleanTouchesbooleanIntersectsbooleanOverlap
完全分离falsefalsefalse
仅接触truetruefalse
部分重叠falsetruetrue
完全包含falsetruefalse

拓扑检查

function classify(a, b) {
  if (!turf.booleanIntersects(a, b)) { return '分离'; }
  if (turf.booleanTouches(a, b)) { return '相邻'; }
  if (turf.booleanOverlap(a, b)) { return '部分重叠'; }
  return '包含或相等';
}

地块数据入库前用这组判断检查「应相邻的地块是否出现重叠」, 比肉眼在图上找缝隙可靠。

浮点与容差

两块面理论上共边、但顶点坐标有微小差异时,可能被判为分离或重叠。 这类误差来自数据生产环节,不是函数缺陷。 检查前统一坐标精度,或先做一次极小的负缓冲再比较。

接触不等于连通。 共点接触(两地块只共享一个角点)也返回真,但实际不可穿行。 需要判断「是否可以通过」时,应检查接触部分的长度是否大于零, 用 turf.intersect 求交后再算 turf.length。

引用本文

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