LatLngBounds — ключевая структура в Google Maps
JavaScript API, предназначенная для работы с прямоугольными
географическими границами. Она описывает область на карте через две
крайние точки: юго-западную и северо-восточную. На практике этот объект
используется для центрирования карты, вычисления видимой области,
ограничения перемещения и автоматического масштабирования под набор
координат.
Границы задаются двумя угловыми точками:
Эти две точки образуют прямоугольник в географической системе координат.
const bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(55.0, 37.0),
new google.maps.LatLng(56.0, 38.0)
);
В данном случае создаётся прямоугольная область, ограниченная координатами, внутри которых могут находиться объекты карты.
LatLngBounds можно инициализировать без параметров. Такой объект изначально не содержит точек и расширяется динамически:
const bounds = new google.maps.LatLngBounds();
Далее границы расширяются методом extend().
Метод extend() добавляет точку в набор границ и
автоматически пересчитывает прямоугольник.
bounds.extend(new google.maps.LatLng(55.75, 37.61));
bounds.extend(new google.maps.LatLng(55.80, 37.70));
После добавления нескольких точек объект формирует минимальный bounding box, который включает все добавленные координаты.
Одна из основных задач LatLngBounds — подгонка карты под набор объектов.
const bounds = new google.maps.LatLngBounds();
locations.forEach(location => {
bounds.extend(location);
});
map.fitBounds(bounds);
Метод fitBounds() изменяет центр и масштаб карты так,
чтобы все точки оказались в видимой области.
Метод contains() позволяет проверить, находится ли точка
внутри заданного прямоугольника.
const point = new google.maps.LatLng(55.76, 37.64);
if (bounds.contains(point)) {
console.log("Точка внутри границ");
}
Это используется для фильтрации объектов по видимой области карты.
LatLngBounds предоставляет доступ к крайним координатам через методы:
getSouthWest()getNorthEast()const sw = bounds.getSouthWest();
const ne = bounds.getNorthEast();
console.log(sw.lat(), sw.lng());
console.log(ne.lat(), ne.lng());
Эти значения часто применяются для построения запросов к серверу, ограничивающих область поиска.
Центральная точка вычисляется автоматически:
const center = bounds.getCenter();
map.setCenter(center);
Центр представляет собой геометрическое среднее между крайними координатами.
LatLngBounds можно объединять с другими объектами того же типа:
const bounds1 = new google.maps.LatLngBounds(
new google.maps.LatLng(55.0, 37.0),
new google.maps.LatLng(55.5, 37.5)
);
const bounds2 = new google.maps.LatLngBounds(
new google.maps.LatLng(55.6, 37.6),
new google.maps.LatLng(56.0, 38.0)
);
bounds1.union(bounds2);
После выполнения union() первый объект расширяется так,
чтобы включать оба диапазона.
Метод intersects() позволяет определить, пересекаются ли
два прямоугольника:
if (bounds1.intersects(bounds2)) {
console.log("Области пересекаются");
}
Это полезно при работе с кластерами объектов и оптимизацией отображения.
Пустой объект LatLngBounds не содержит точек и считается неинициализированным:
const bounds = new google.maps.LatLngBounds();
console.log(bounds.isEmpty()); // true
После добавления координат состояние изменяется.
LatLngBounds может быть преобразован в строку для отладки:
console.log(bounds.toString());
Вывод содержит координаты юго-западного и северо-восточного углов.
LatLngBounds часто применяется для группировки маркеров на карте:
const bounds = new google.maps.LatLngBounds();
markers.forEach(marker => {
bounds.extend(marker.getPosition());
});
map.fitBounds(bounds);
Так обеспечивается автоматическое масштабирование под все маркеры без ручного расчёта центра и зума.
LatLngBounds может использоваться для ограничения перемещения карты:
const allowedBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(55.0, 37.0),
new google.maps.LatLng(56.0, 38.0)
);
const lastValidCenter = map.getCenter();
google.maps.event.addListener(map, 'center_changed', () => {
if (allowedBounds.contains(map.getCenter())) {
lastValidCenter = map.getCenter();
} else {
map.setCenter(lastValidCenter);
}
});
Так реализуется «запрет выхода» за определённую область.
Google Maps API поддерживает литеральный формат объекта:
const boundsLiteral = {
north: 56.0,
south: 55.0,
east: 38.0,
west: 37.0
};
const bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(boundsLiteral.south, boundsLiteral.west),
new google.maps.LatLng(boundsLiteral.north, boundsLiteral.east)
);
Такой формат часто используется при сохранении состояния карты.
При работе с глобальными координатами важно учитывать:
LatLngBounds автоматически корректирует некоторые крайние случаи, но сложные географические сценарии требуют дополнительной логики.
LatLngBounds активно используется при ограничении запросов:
geocoder.geocode({
address: "Москва",
bounds: bounds
});
Результаты геокодинга будут приоритезированы внутри заданной области, что повышает релевантность поиска.
При использовании Heatmap, Polygon и MarkerCluster LatLngBounds применяется для:
const bounds = map.getBounds();
if (bounds.contains(customPoint)) {
// отрисовка объекта
}
При изменении набора объектов границы пересчитываются:
function updateBounds(points) {
const bounds = new google.maps.LatLngBounds();
points.forEach(p => bounds.extend(p));
map.fitBounds(bounds);
}
Это позволяет адаптировать карту под изменяющиеся данные без ручного управления масштабом.
LatLngBounds часто используется совместно с событиями:
bounds_changedidlezoom_changedgoogle.maps.event.addListener(map, "idle", () => {
const currentBounds = map.getBounds();
});
Текущие границы карты позволяют динамически обновлять интерфейс и загружать данные.
LatLngBounds является основой для:
Его использование снижает необходимость ручного вычисления геометрии и упрощает работу с пространственными данными в браузере.