首页 / Turf.js / API 文档
booleanWithin
先看结论
第一个几何是否完全落在第二个几何内部,是 booleanContains 的反向表达。
turf.booleanWithin(feature1, feature2) → boolean
参数
| 参数 | 类型 | 说明 |
|---|---|---|
feature1 | Geometry | Feature | 被判断的几何,需要完全在内部 |
feature2 | Geometry | Feature | 容器几何 |
没有选项参数。两者关系等价于 booleanContains(feature2, feature1)。
示例
var district = turf.polygon([[
[116.30, 39.85],
[116.50, 39.85],
[116.50, 40.00],
[116.30, 40.00],
[116.30, 39.85]
]]);
var site = turf.point([116.39, 39.91]);
var crossing = turf.lineString([[116.45, 39.91], [116.55, 39.91]]);
console.log(turf.booleanWithin(site, district)); // true
console.log(turf.booleanWithin(crossing, district)); // false,线越出了东边界
用它表达业务语义
| 业务问法 | 写法 |
|---|---|
| 这个点属于哪个片区 | booleanWithin(point, polygon) |
| 这条线路是否全在辖区内 | booleanWithin(line, boundary) |
| 这个片区是否被更大区域覆盖 | booleanWithin(small, large) |
语序与自然语言一致:主语在前、范围在后,代码可读性比
booleanContains(boundary, line) 更好。
部分越界
只要被判断几何有任何部分落在容器外,结果就是假。
需要「取交集」而不是布尔判断时,用 turf.intersect;
需要知道越界多少,先 turf.difference 再算 turf.area 或 turf.length。
孔洞
容器是带洞多边形时,洞内区域不属于容器。
被判断的点落在洞里,booleanWithin 返回假。
这一点与 booleanPointInPolygon 默认行为一致,
但后者的 ignoreBoundary 参数只影响边界,不影响孔洞。
不要与 booleanContains 混着用而不检查顺序。
两个函数互为反向,写错顺序会得到完全相反的结果,且不会报错。
团队里统一约定:判断「要素是否在范围内」一律用 booleanWithin。
经纬志(2026)。《booleanWithin》。https://www.jingweizhi.com/turf/api/boolean-within.html(访问日期 2026-11-03)。