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

booleanWithin

先看结论

第一个几何是否完全落在第二个几何内部,是 booleanContains 的反向表达。

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

参数

参数类型说明
feature1Geometry | Feature被判断的几何,需要完全在内部
feature2Geometry | 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)。