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

booleanContains

先看结论

第一个几何是否完全包住第二个:内部相交,且第二个不越出第一个的外边界。

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

参数

参数类型说明
feature1Geometry | Feature容器几何,主体
feature2Geometry | Feature被判断的几何,必须整体落在前者内部

没有选项参数。几何顺序不能反,反过来的判断用 booleanWithin。

示例

var park = turf.polygon([[
  [116.38, 39.90],
  [116.42, 39.90],
  [116.42, 39.94],
  [116.38, 39.94],
  [116.38, 39.90]
]]);

var bench = turf.point([116.40, 39.92]);
var outside = turf.point([116.50, 39.92]);

console.log(turf.booleanContains(park, bench));    // true
console.log(turf.booleanContains(park, outside));  // false

线也能作为容器

var road = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);
var onRoad = turf.point([1, 2]);

console.log(turf.booleanContains(road, onRoad));   // true

线的「内部」指线段本身,不是缓冲区。偏离线哪怕一米, 点就落在外部,结果为假。需要容差时先给线做 buffer,再判断面包含点。

与相近函数的区别

函数含义方向
booleanContains(a, b)a 包含 ba 是容器
booleanWithin(a, b)a 在 b 内部b 是容器,结果与上者相反
booleanPointInPolygon点是否在面内只处理点与面
booleanIntersects是否有公共点不要求包含

边界情形

被判断的几何如果恰好压在容器边界上,结果取决于几何类型与顶点顺序。 业务规则要求「边界也算在内」或「边界一律排除」时, 不要依赖单次调用的结果:先做一次轻微缓冲, 或改用 booleanPointInPolygon 并显式控制边界参数。

性能

先算两者的 bbox,容器 bbox 装不下被判断对象时直接返回假, 可以省掉完整的几何运算。批量点面判断优先用 booleanPointInPolygon,它针对点做了专门优化。

参数顺序写反是常见错误。 booleanContains(point, polygon) 永远返回假, 因为点装不下任何面。批量运行时不会报错,只会静默筛掉全部记录。 函数命名以「第一个包含第二个」为准,调用处建议加注释。

引用本文

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