首页 / Turf.js / API 文档
booleanContains
先看结论
第一个几何是否完全包住第二个:内部相交,且第二个不越出第一个的外边界。
turf.booleanContains(feature1, feature2) → boolean
参数
| 参数 | 类型 | 说明 |
|---|---|---|
feature1 | Geometry | Feature | 容器几何,主体 |
feature2 | Geometry | 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 包含 b | a 是容器 |
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)。