bbox
计算任意 GeoJSON 的最小外包矩形,返回四个数字。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
geojson | 任意 GeoJSON | 点、线、面、几何集合、FeatureCollection 均可 |
返回值
四个数字组成的数组:[最小经度, 最小纬度, 最大经度, 最大纬度]。
经度在前,与 GeoJSON 坐标顺序一致,这一点和 Leaflet 的
LatLngBounds 不同。
var fc = turf.featureCollection([
turf.point([116.39, 39.90]),
turf.point([121.47, 31.23]),
turf.point([113.26, 23.12])
]);
var box = turf.bbox(fc);
console.log(box); // [113.26, 23.12, 121.47, 39.90]
直接可用的几何
bboxPolygon 把数组转成一个矩形面,常用来在图上画出
查询范围或数据覆盖范围。
var rect = turf.bboxPolygon(box);
rect.properties = { kind: 'coverage' };
/* 反过来,从一个面取回外包矩形 */
console.log(turf.bbox(rect));
用 bbox 做粗筛
外包矩形是成本极低的预筛选:矩形不相交,几何一定不相交。 在批量空间判断前先比一次 bbox,可以过滤掉大部分无关要素。
function bboxHit(a, b) {
return !(a[0] > b[2] || a[2] < b[0] || a[1] > b[3] || a[3] < b[1]);
}
var target = turf.bbox(queryPolygon);
var candidates = parcels.filter(function (p) {
return bboxHit(target, turf.bbox(p));
});
过滤后仍要用精确判断确认,外包矩形相交不等于几何相交。 对倾斜的长条形面,矩形会明显大于实际形状,粗筛留下的候选偏多, 但绝不会漏掉真正的相交。
空数据与无效坐标
空 FeatureCollection 的 bbox 是
[Infinity, Infinity, -Infinity, -Infinity]。
直接用它画矩形会得到一片空白或坐标越界的图形,使用前先判断
isFinite(box[0])。
var box = turf.bbox(fc);
if (!isFinite(box[0])) {
console.log('没有可用要素');
}
跨 180 度经线
bbox 按数值取极值。要素分布在东经 170 度和西经 170 度时, 得到的矩形经度范围是 -170 到 170,几乎覆盖全球, 而真实范围只是跨线的一条窄带。跨线数据要么先平移经度, 要么改用专门的分裂处理。
bbox 与视野范围不是一回事。把 bbox 传给地图的
fitBounds 前,记得确认参数顺序:
MapLibre 接受 [[西, 南], [东, 北]],
Leaflet 接受 [[南, 西], [北, 东]]。
经纬志(2026)。《bbox》。https://www.jingweizhi.com/turf/api/bbox.html(访问日期 2026-11-03)。