Skip to main content
Что такое bounding box: руководство для разработчиков по bbox
Guides

Что такое bounding box: руководство для разработчиков по bbox

Bounding box (bbox) обозначает наименьший прямоугольник, в который помещается объект или набор точек. Форматы, соглашения и типичные ошибки при работе с bbox в API.

Brent van der Heiden5 min read
#bounding box#bbox#geojson#геокодирование#пространственный фильтр#maps api

Bounding box это простейший и наиболее полезный пространственный примитив в любом картографическом стеке. Четыре числа, описывающие прямоугольник в пространстве широты и долготы, встречаются практически в каждом API-вызове, GeoJSON-файле и библиотеке карт, с которыми вам приходится работать.

Это руководство объясняет, что такое bounding box, какие соглашения о форматах нужно знать, где он незаменим в продакшне и какие подводные камни подстерегают каждого разработчика хотя бы раз.

Определение

Bounding box (bbox) это наименьший выровненный по осям прямоугольник, содержащий объект или набор точек. «Выровненный по осям» означает, что его стороны идут вдоль осей широты и долготы; прямоугольник не повёрнут. Bbox описывается четырьмя числами: западная долгота, южная широта, восточная долгота и северная широта.

Официальный bbox Парижа примерно равен [2.224, 48.8156, 2.4699, 48.9022]. Для континентальной Франции: примерно [-5.142, 41.333, 9.560, 51.089]. Для всей планеты: [-180, -90, 180, 90].

Bbox всегда определяется двумя противоположными углами. Он не может описать непрямоугольную форму, но может описать прямоугольник, оборачивающий любую форму, чего достаточно для быстрой пространственной фильтрации.

Вопрос формата

Соглашения о форматах bbox не единообразны в разных системах, и именно эта несогласованность является источником большинства связанных с bbox багов.

GeoJSON, стандарты OGC и большинство современных API: [west, south, east, north], эквивалентно [minLng, minLat, maxLng, maxLat]. Сначала долгота, потом широта, оба в WGS84.

Некоторые библиотеки веб-карт (объекты Leaflet, Mapbox GL bounds): объект LatLngBounds с углами _southWest и _northEast. Сначала широта, потом долгота.

Многие устаревшие API и CSV-экспорты: [south, west, north, east] (широта первой). Читайте спецификацию.

Тайловые сервисы и WMS: bbox в единицах проекции (метры Web Mercator, а не широта/долгота), если тайл в EPSG:3857.

Защитное правило: никогда не используйте голый 4-элементный массив в своём коде. Оборачивайте его в типизированный объект с именованными полями ({ west, south, east, north }), чтобы порядок был явным. Выполняйте преобразование на границах API.

Где bounding box действительно нужен

Bbox это быстрейший возможный пространственный фильтр. Три классических применения:

Подгонка карты к объекту. Когда пользователь переходит к результату поиска, вызывается map.fitBounds(bbox) и карта масштабируется и центрируется на объекте с соответствующими отступами. Этот примитив есть в каждой современной библиотеке карт.

Фильтрация API-запросов по площади. Движки баз данных и поисковые API очень эффективно индексируют bbox. Запрос «покажи мне все объекты в этом viewport» отправляет видимый bbox на сервер, который использует пространственный индекс для возврата только совпадающих записей. Это основа поиска по viewport.

Смещение автодополнения и геокодирования. Передайте текущий bbox карты пользователя как смещение viewport. Геокодер взвешивает результаты внутри bbox выше, поэтому при вводе «Liberty» внутри карты Нью-Йорка пользователь получает Статую Свободы прежде любой другой Либерти в мире.

Четвёртое, менее очевидное применение: bbox служит единицей учёта в системе векторных тайлов. Каждый тайл охватывает известный bbox на известном уровне зума, и рендерер составляет их в видимую карту.

Что возвращает API

Большинство геокодирующих API возвращают bbox вместе с каждым совпадением, потому что он указывает и на размер найденного объекта (bbox страны огромен, bbox здания крошечен), и на то, как масштабировать карту. Геокодирующий ответ для «Франции» возвращает bbox национального масштаба; ответ для «10 Downing Street» возвращает bbox масштаба здания.

Размер возвращённого bbox можно использовать как проверку точности. Запрос, совпавший на уровне «страны», но возвращающий bbox размером со здание, вызывает подозрения. Запрос, совпавший с точностью «до крыши», но возвращающий bbox размером с город, явно сломан.

Bounding box, пересекающий антимеридиан

Тонкая ловушка: bbox, пересекающий 180-градусный антимеридиан (например, для России, Тихого океана, Фиджи), не может быть описан как west < east, потому что он огибает землю. Соглашения различаются:

  • Некоторые системы разбивают такой bbox на две части, по одной для каждой стороны антимеридиана.
  • Некоторые системы допускают west > east и интерпретируют это как «огибать по кругу».
  • GeoJSON допускает оборачивание, но для совместимости рекомендует разбиение.

Для большинства европейских сценариев или сценариев с одной страной это никогда не встречается. Если вы строите глобальный продукт (авиамаршруты, судоходство, рыболовство), явно тестируйте случай с антимеридианом.

Bounding box и полигоны

Bbox это прямоугольник. Реальный объект редко является прямоугольником. Bbox Франции включает части Атлантического океана и Испании. Bbox Манхэттена включает части Нью-Джерси и Куинса.

Когда прямоугольное приближение достаточно хорошо (подгонка карты, быстрая предварительная фильтрация), bbox будет правильным инструментом. Когда нужно знать, находится ли точка действительно внутри объекта, требуется математика point-in-polygon по реальной граничной геометрии. Распространённый продакшн-паттерн: сначала фильтрация по bbox (быстро, индексируемо, отсеивает 99% записей), затем point-in-polygon для оставшихся (медленно, но точно). Именно так большинство пространственных баз данных работают под капотом.

Bounding box в компьютерном зрении

В обнаружении объектов, робототехнике или 3D-рендеринге можно встретить термин «ориентированный bounding box». Это другая концепция: OBB повёрнут, чтобы облегать объект плотнее, чем выровненный по осям прямоугольник. В геопространственной работе стандартом являются выровненные по осям bbox, потому что они чисто индексируются, вписываются в тайловую сетку и тривиально проверяются на перекрытие. Ориентированные bbox нужны, когда требуется математика с повёрнутыми прямоугольниками. Это редкость в картографии, но распространено в компьютерном зрении.

Как MapAtlas использует bounding box

Каждый результат Geocoding API и Search API возвращает поле bbox с охватом найденного объекта в формате WGS84 долгота/широта, именно том, который ожидают GeoJSON и современные библиотеки карт. Параметр boundary.rect.* позволяет сместить геокодирование к viewport, а Isochrone API возвращает полигоны времени в пути с оборачивающим bbox, чтобы вы могли подогнать карту без самостоятельных вычислений.

Практическое введение в GeoJSON и место bbox в более широкой картине пространственных данных: Что такое GeoJSON и Что такое геокод.

Часто задаваемые вопросы

Что такое bounding box?

Bounding box (часто сокращённо bbox) это наименьший выровненный по осям прямоугольник, содержащий географический объект или набор точек. Описывается четырьмя числами: минимальная и максимальная долгота, минимальная и максимальная широта. Bounding box используется повсюду в картографии: для подгонки карты к объекту, для фильтрации запросов к базе данных по площади, для определения охвата тайла и для смещения результатов геокодирования в область. Это простейший и самый быстрый пространственный примитив в продакшн-коде.

Каков стандартный формат bounding box?

GeoJSON и большинство современных API используют порядок [west, south, east, north], также записываемый как [minLng, minLat, maxLng, maxLat]. Это формат, который следует считать стандартным. Некоторые устаревшие API и CSV-экспорты используют [south, west, north, east] (широта первой), а в ряде форматов применяются четыре отдельных поля. Всегда проверяйте документацию конкретного API или формата. Наиболее распространённая ошибка: перепутать порядок широты и долготы, отчего прямоугольник оказывается с противоположной стороны планеты.

В чём разница между bounding box и ориентированным bounding box?

Обычный bounding box выровнен по осям: его стороны идут вдоль осей широты и долготы. Ориентированный bounding box (OBB, распространённый в компьютерном зрении и игровых движках) повёрнут, чтобы плотнее облегать объект, что даёт меньшую площадь, но более сложную математику. В геопространственной работе стандартом являются выровненные по осям bbox, потому что они чисто индексируются в пространственных базах данных, вписываются в тайловую сетку и тривиально проверяются на перекрытие. Ориентированные bounding box используются в 3D-рендеринге, обнаружении объектов и физических движках.

Как использовать bounding box для фильтрации геокодирующего API?

Передайте bbox как параметр смещения viewport. В MapAtlas Geocoding API для этого используются `boundary.rect.min_lon`, `boundary.rect.min_lat`, `boundary.rect.max_lon`, `boundary.rect.max_lat`, и геокодер ранжирует результаты внутри этой области выше, чем результаты за её пределами. Это принципиально важно для автодополнения внутри карты: по мере того как пользователь панирует, вы обновляете bbox, чтобы подсказки соответствовали тому, что он видит. Без смещения по bbox автодополнение «Springfield» вернёт тот Springfield, у которого наибольшая глобальная популярность, что почти никогда не то, что нужно пользователю.

Оказалось полезным? Поделитесь.

Об авторе

Brent van der Heiden

Автор

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. He writes about geospatial infrastructure, AI search visibility, and how location data powers the products people rely on every day.

Все статьи
Вернуться в блог