Bounding box là nguyên thủy không gian đơn giản nhất, hữu ích nhất trong bất kỳ mapping stack nào. Đây là bốn con số mô tả một hình chữ nhật trong không gian vĩ độ và kinh độ, và nó xuất hiện trong hầu hết mọi API call, file GeoJSON và thư viện bản đồ bạn từng dùng.
Hướng dẫn này giải thích bounding box là gì, các quy ước định dạng bạn cần biết, các pattern production nơi nó phát huy tác dụng, và các lỗi mà mỗi developer đều gặp ít nhất một lần.
Định Nghĩa
Bounding box (bbox) là hình chữ nhật căn trục nhỏ nhất bao quanh một feature hoặc tập hợp điểm. "Căn trục" có nghĩa là các cạnh của nó chạy dọc theo các trục vĩ độ và kinh độ; hình chữ nhật không bị xoay. Bbox được mô tả bởi bốn số: kinh độ phía tây, vĩ độ phía nam, kinh độ phía đông, và vĩ độ phía bắc.
Với Paris, bbox thành phố chính thức xấp xỉ [2.224, 48.8156, 2.4699, 48.9022]. Với nước Pháp đại lục xấp xỉ [-5.142, 41.333, 9.560, 51.089]. Với cả hành tinh là [-180, -90, 180, 90].
Bbox luôn là hai góc đối diện. Nó không thể mô tả hình dạng không phải chữ nhật, nhưng có thể mô tả hình chữ nhật bao quanh bất kỳ hình dạng nào, điều đó đủ cho spatial filtering nhanh.
Câu Hỏi Về Định Dạng
Các quy ước định dạng cho bbox không nhất quán giữa các hệ thống, và sự không nhất quán là nguồn gốc của hầu hết lỗi bbox.
GeoJSON, chuẩn OGC và hầu hết API hiện đại: [west, south, east, north], tương đương [minLng, minLat, maxLng, maxLat]. Kinh độ trước, vĩ độ sau, cả hai trong WGS84.
Một số thư viện bản đồ web (đối tượng bounds của Leaflet, Mapbox GL): đối tượng LatLngBounds với các góc _southWest và _northEast. Lat trước, rồi lng.
Nhiều API cũ và CSV export: [south, west, north, east] (lat trước). Đọc spec.
Tile service và WMS: bbox theo đơn vị của hình chiếu (Web Mercator mét, không phải lat/lng) khi tile ở EPSG:3857.
Quy tắc phòng thủ: đừng bao giờ dùng mảng 4 phần tử thuần trong code của bạn. Bọc nó trong một object có kiểu với các field có tên ({ west, south, east, north }) để thứ tự rõ ràng. Chuyển đổi tại ranh giới API.
Bounding Box Phát Huy Tác Dụng Ở Đâu
Bbox là spatial filter nhanh nhất có thể. Ba use case kinh điển:
Fit bản đồ vào một feature. Khi người dùng đến kết quả tìm kiếm, bạn gọi map.fitBounds(bbox) và bản đồ zoom và pan để hiển thị feature với padding phù hợp. Mọi thư viện bản đồ hiện đại đều có nguyên thủy này.
Lọc truy vấn API theo khu vực. Database engine và search API index bbox rất hiệu quả. Truy vấn như "hiển thị tất cả địa điểm trong viewport này" gửi bbox hiển thị tới server, server dùng spatial index để trả về chỉ các bản ghi khớp. Đây là nền tảng của viewport-based search.
Làm lệch autocomplete và geocoding. Truyền bbox bản đồ hiện tại của người dùng như viewport bias. Geocoder ưu tiên kết quả trong bbox, vì vậy gõ "Liberty" trong viewport New York trả về Tượng Nữ thần Tự do trước bất kỳ Liberty nào khác trên thế giới.
Một use case ít rõ ràng hơn: bbox là đơn vị quản lý sổ sách của hệ thống vector tile. Mỗi tile bao phủ một bbox đã biết ở một zoom đã biết, và renderer ghép chúng thành bản đồ hiển thị.
API Trả Về Gì
Hầu hết geocoding API trả về bbox cùng với mỗi kết quả khớp, vì nó cho bạn biết cả kích thước của feature được khớp (bbox quốc gia thì lớn, bbox tòa nhà thì nhỏ) và cách fit bản đồ. Response geocoding cho "France" trả về bbox cấp quốc gia; response cho "10 Downing Street" trả về bbox cấp tòa nhà.
Bạn có thể dùng kích thước của bbox trả về như kiểm tra tỉnh của độ chính xác. Truy vấn khớp ở độ chính xác "country" nhưng trả về bbox cỡ tòa nhà thì đáng ngờ. Truy vấn khớp ở độ chính xác "rooftop" nhưng trả về bbox cỡ thành phố thì bị lỗi.
Bounding Box Vượt Qua Đường Chống Kinh Tuyến
Một gotcha tinh tế: bbox vượt qua đường chống kinh tuyến 180 độ (ví dụ với Nga, Thái Bình Dương, Fiji) không thể được mô tả là west < east vì nó bao quanh. Các quy ước khác nhau:
- Một số hệ thống chia bbox như vậy thành hai phần, mỗi phần cho một bên của đường chống kinh tuyến.
- Một số hệ thống cho phép
west > eastvà hiểu là "bao quanh". - GeoJSON cho phép bao quanh nhưng khuyến nghị chia để tương thích.
Với hầu hết use case châu Âu hoặc một quốc gia, điều này không bao giờ xảy ra. Nếu bạn xây dựng sản phẩm toàn cầu (tuyến hàng không, vận tải biển, thủy sản), hãy test trường hợp chống kinh tuyến một cách rõ ràng.
Bounding Box vs Polygon
Bbox là hình chữ nhật. Một feature thực tế hiếm khi là hình chữ nhật. Bbox của nước Pháp bao gồm các phần của Đại Tây Dương và Tây Ban Nha. Bbox của Manhattan bao gồm các phần của New Jersey và Queens.
Khi xấp xỉ hình chữ nhật là đủ (fit bản đồ, pre-filter nhanh), bbox là công cụ phù hợp. Khi bạn cần biết liệu một điểm có thực sự nằm trong feature hay không, bạn cần toán học point-in-polygon với hình học ranh giới thực. Một pattern production phổ biến: lọc bằng bbox trước (nhanh, có thể index, loại 99% bản ghi), rồi chạy point-in-polygon trên những cái còn lại (chậm nhưng chính xác). Phương pháp hai giai đoạn này là cách hầu hết cơ sở dữ liệu không gian hoạt động ngầm.
Bounding Box trong Computer Vision
Bạn có thể thấy "oriented bounding box" được đề cập trong object detection, robotics hoặc 3D rendering. Đó là một khái niệm khác: OBB được xoay để fit feature chặt hơn so với box căn trục. Trong công việc địa không gian, bbox căn trục là tiêu chuẩn vì chúng index sạch, khớp với lưới tile, và dễ kiểm tra overlap. Oriented bbox xuất hiện khi bạn cần toán học hình chữ nhật xoay, điều hiếm trong mapping nhưng phổ biến trong computer vision.
MapAtlas Dùng Bounding Box Như Thế Nào
Mọi kết quả từ Geocoding API và Search API trả về field bbox với phạm vi feature được khớp theo thứ tự kinh độ/vĩ độ WGS84, đúng định dạng mà GeoJSON và thư viện bản đồ hiện đại mong đợi. Bạn có thể truyền tham số boundary.rect.* để làm lệch geocoding về một viewport, và Isochrone API trả về các polygon thời gian di chuyển với bbox bao quanh để bạn có thể fit bản đồ mà không cần tự tính.
Để bắt đầu thực hành với GeoJSON và cách bbox phù hợp với bức tranh dữ liệu không gian lớn hơn, xem GeoJSON là gì và Geocode là gì.
Câu hỏi thường gặp
Bounding box là gì?
Bounding box (thường viết tắt là bbox) là hình chữ nhật căn trục nhỏ nhất bao quanh một feature địa lý hoặc tập hợp điểm. Nó được mô tả bởi bốn số: kinh độ tối thiểu và tối đa, và vĩ độ tối thiểu và tối đa. Bounding box xuất hiện ở khắp nơi trong mapping: để fit bản đồ vào một feature, lọc truy vấn cơ sở dữ liệu theo diện tích, định nghĩa phạm vi của một tile, và làm lệch kết quả geocoding về một vùng. Chúng là nguyên thủy không gian đơn giản nhất, nhanh nhất trong code production.
Định dạng chuẩn của bounding box là gì?
GeoJSON và hầu hết API hiện đại dùng thứ tự [west, south, east, north], cũng được viết là [minLng, minLat, maxLng, maxLat]. Đây là định dạng bạn nên dùng mặc định. Một số API cũ và CSV export dùng [south, west, north, east] (tức là lat trước), và một số dùng bốn field riêng biệt. Luôn kiểm tra tài liệu của API hoặc định dạng cụ thể. Lỗi phổ biến nhất là trộn lẫn thứ tự lat/lng, làm cho box xuất hiện sai phía của hành tinh.
Sự khác biệt giữa bounding box và oriented bounding box là gì?
Bounding box thông thường được căn trục: các cạnh của nó chạy dọc theo các trục vĩ độ và kinh độ. Oriented bounding box (OBB, phổ biến trong computer vision và game engine) được xoay để fit feature chặt hơn, cho diện tích nhỏ hơn nhưng toán học phức tạp hơn. Trong công việc địa không gian, bbox căn trục là tiêu chuẩn vì chúng index sạch vào cơ sở dữ liệu không gian, khớp với lưới tile, và dễ kiểm tra overlap. Oriented bounding box xuất hiện trong 3D rendering, object detection và physics engine.
Làm thế nào để dùng bounding box để lọc geocoding API?
Truyền bbox như tham số viewport bias. Trong MapAtlas Geocoding API bạn gửi `boundary.rect.min_lon`, `boundary.rect.min_lat`, `boundary.rect.max_lon`, `boundary.rect.max_lat`, và geocoder xếp hạng kết quả bên trong khu vực đó cao hơn kết quả bên ngoài. Điều này rất quan trọng cho autocomplete bên trong bản đồ: khi người dùng pan, bạn cập nhật bbox để các gợi ý khớp với những gì họ đang nhìn. Không có bbox bias, autocomplete cho 'Springfield' trả về Springfield nào có mức độ phổ biến toàn cầu cao nhất, điều hiếm khi là điều người dùng muốn.

