首页 / Turf.js / API 文档
booleanTouches
先看结论
两个几何共享边界点、但内部互不相交时返回真,用来识别「贴在一起但不叠」。
turf.booleanTouches(feature1, feature2) → boolean
参数
| 参数 | 类型 | 说明 |
|---|---|---|
feature1 | Geometry | Feature | 第一个几何 |
feature2 | Geometry | 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,共边
共边的两块地在拓扑上相邻,交集是一条线,维度低于面, 因此判定为接触而不是重叠。
三种关系的对照
| 关系 | booleanTouches | booleanIntersects | booleanOverlap |
|---|---|---|---|
| 完全分离 | false | false | false |
| 仅接触 | true | true | false |
| 部分重叠 | false | true | true |
| 完全包含 | false | true | false |
拓扑检查
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)。