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

bbox

先看结论

计算任意 GeoJSON 的最小外包矩形,返回四个数字。

最后验证 2026-11-03 · Turf.js 7.x · 更新 2026-10-27 · 引用本文
turf.bbox(geojson) → BBox

参数

参数类型说明
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)。