Класс прямоугольника (google.maps.Rectangle) в Google
Maps Platform используется для отображения прямоугольных областей на
карте, заданных географическими границами. Прямоугольник является
разновидностью оверлея и строится на основе объекта
LatLngBounds, который определяет юго-западную и
северо-восточную точки области.
Основная особенность прямоугольника заключается в том, что его форма полностью определяется двумя координатами, а все остальные вершины вычисляются автоматически системой проекции карты.
Прямоугольник задаётся через границы:
Эти две точки формируют объект:
const bounds = {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
};
Внутренне API преобразует эти значения в объект
LatLngBounds, который является базовой единицей
пространственных ограничений.
Прямоугольник создаётся через конструктор
google.maps.Rectangle, принимающий объект настроек.
const rectangle = new google.maps.Rectangle({
bounds: {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
},
editable: false,
draggable: false,
map: map
});
bounds — географические границы прямоугольникаmap — карта, на которую добавляется объектeditable — возможность изменения границ
пользователемdraggable — возможность перемещения прямоугольникаstrokeColor — цвет контураstrokeOpacity — прозрачность контураstrokeWeight — толщина линииfillColor — цвет заливкиfillOpacity — прозрачность заливкиzIndex — порядок отображения слоёвПрямоугольник отображается на карте только при привязке к объекту
Map.
rectangle.setMap(map);
Удаление с карты выполняется установкой null:
rectangle.setMap(null);
Этот механизм позволяет динамически управлять отображением оверлеев без пересоздания объекта.
Границы могут быть изменены после создания объекта с помощью метода
setBounds.
rectangle.setBounds({
north: 55.80,
south: 55.65,
east: 37.80,
west: 37.55
});
Получение текущих границ:
const currentBounds = rectangle.getBounds();
Возвращаемое значение — объект LatLngBounds, содержащий
методы:
getNorthEast()getSouthWest()toJSON()При включении editable: true активируются интерактивные
маркеры, позволяющие изменять размеры фигуры.
const rectangle = new google.maps.Rectangle({
bounds: {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
},
editable: true,
map: map
});
В этом режиме пользователь может:
Свойство draggable включает возможность перемещения всей
фигуры как единого объекта.
const rectangle = new google.maps.Rectangle({
bounds: {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
},
draggable: true,
map: map
});
При перемещении сохраняются пропорции и размеры фигуры, изменяется только положение.
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2
fillColor: "#FF0000",
fillOpacity: 0.2
const rectangle = new google.maps.Rectangle({
bounds: {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
},
strokeColor: "#1E88E5",
strokeOpacity: 0.9,
strokeWeight: 3,
fillColor: "#90CAF9",
fillOpacity: 0.35,
map: map
});
Rectangle поддерживает стандартные события изменения состояния.
Срабатывает при изменении границ:
rectangle.addListener("bounds_changed", () => {
const bounds = rectangle.getBounds();
});
Используются при включённом draggable.
rectangle.addListener("dragstart", () => {
console.log("Начало перемещения");
});
rectangle.addListener("dragend", () => {
console.log("Окончание перемещения");
});
Срабатывает при клике по области прямоугольника:
rectangle.addListener("click", (event) => {
console.log(event.latLng);
});
Rectangle тесно связан с LatLngBounds,
который используется не только для отрисовки, но и для геоаналитики.
const bounds = rectangle.getBounds();
const point = new google.maps.LatLng(55.72, 37.65);
const contains = bounds.contains(point);
const center = bounds.getCenter();
Методы позволяют динамически управлять состоянием объекта:
rectangle.setOptions({
fillOpacity: 0.5,
strokeWeight: 4
});
Этот подход предпочтителен при интерактивных приложениях, где стили зависят от состояния интерфейса.
Используется для визуального обозначения регионов поиска:
Rectangle часто применяется совместно с пространственными запросами:
Прямоугольники используются для:
rectangle.setMap(map); // показать
rectangle.setMap(null); // скрыть
const isVisible = rectangle.getMap() !== null;
Rectangle может комбинироваться с:
Marker)Polygon)Circle)InfoWindow)Комбинации позволяют строить сложные интерфейсы геоданных, где прямоугольник служит базовой областью фильтрации или выделения.
Эти ограничения обусловлены моделью Web Mercator, используемой в большинстве картографических систем Google Maps Platform.
При работе с большим количеством прямоугольников рекомендуется:
setMap(null) вместо удаления объектовeditable и draggable, если они
не требуютсяОсобенно важно это при динамическом обновлении данных в реальном времени.
const rectangle = new google.maps.Rectangle({
bounds: {
north: 55.75,
south: 55.70,
east: 37.70,
west: 37.60
},
editable: true,
draggable: true,
strokeColor: "#0000FF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0000FF",
fillOpacity: 0.2,
map: map
});
rectangle.addListener("bounds_changed", () => {
const b = rectangle.getBounds();
console.log("N:", b.getNorthEast().lat());
});