Класс Circle в Google Maps JavaScript API представляет собой объект для отображения окружностей на карте, где круг определяется центром (latitude/longitude) и радиусом в метрах. Геометрия реализуется в виде геодезической окружности на поверхности Земли, поэтому визуальное представление корректно учитывает кривизну планеты.
Круги используются для визуализации зон покрытия, радиусов поиска, географических ограничений, анализа доступности объектов и построения интерактивных картографических интерфейсов.
Базовая инициализация выполняется через конструктор
google.maps.Circle, которому передаётся объект параметров
CircleOptions.
const circle = new google.maps.Circle({
map: map,
center: { lat: 55.751244, lng: 37.618423 },
radius: 5000
});
Ключевые свойства:
map — карта, на которой отображается окружностьcenter — координаты центраradius — радиус в метрахОпределяет географический центр окружности.
center: { lat: 40.7128, lng: -74.0060 }
Центр может изменяться динамически через метод
setCenter().
Радиус окружности задаётся в метрах.
radius: 10000
Радиус можно обновлять методом setRadius().
Связывает объект круга с экземпляром карты Google Maps JavaScript API.
map: mapInstance
Если значение null, окружность создаётся, но не
отображается.
Определяют стиль границы круга.
strokeColor: "#FF0000",
strokeOpacity: 0.8
Толщина линии границы в пикселях.
strokeWeight: 2
Задают заливку внутренней области окружности.
fillColor: "#FF0000",
fillOpacity: 0.35
Позволяют пользователю взаимодействовать с кругом:
draggable: true,
editable: true
draggable — перемещение центраeditable — изменение радиуса и границПолучение и изменение центра окружности.
const center = circle.getCenter();
circle.setCenter({ lat: 48.8566, lng: 2.3522 });
Работа с радиусом.
const radius = circle.getRadius();
circle.setRadius(15000);
Управление привязкой к карте.
circle.setMap(null); // скрыть
circle.setMap(map); // показать
Позволяет обновить сразу несколько параметров.
circle.setOptions({
fillColor: "#00FF00",
strokeWeight: 3,
radius: 8000
});
Класс поддерживает события, основанные на пользовательском взаимодействии.
Срабатывает при клике по окружности.
circle.addListener("click", (event) => {
console.log("Клик по кругу", event.latLng);
});
Вызывается при изменении радиуса.
circle.addListener("radius_changed", () => {
console.log(circle.getRadius());
});
Срабатывает при изменении центра.
circle.addListener("center_changed", () => {
console.log(circle.getCenter());
});
Работают при включённом draggable.
circle.addListener("dragend", () => {
console.log("Новый центр:", circle.getCenter());
});
Circle не является идеальной 2D-геометрией. Внутри Google Maps JavaScript API используется геодезическая проекция:
Это особенно важно при больших радиусах, где плоская модель дала бы значительные искажения.
Circle может использоваться совместно с маркерами и информационными окнами.
const marker = new google.maps.Marker({
position: circle.getCenter(),
map: map
});
Изменение центра круга может синхронизироваться с маркером:
circle.addListener("center_changed", () => {
marker.setPosition(circle.getCenter());
});
Часто требуется определить, находится ли координата внутри окружности.
function isPointInCircle(point, circle) {
const center = circle.getCenter();
const radius = circle.getRadius();
const distance = google.maps.geometry.spherical.computeDistanceBetween(
new google.maps.LatLng(point),
center
);
return distance <= radius;
}
Для этого используется библиотека geometry, входящая в
Google Maps JavaScript API.
Круги часто используются в интерфейсах фильтрации данных на карте.
map.addListener("click", (e) => {
circle.setCenter(e.latLng);
});
Или изменение радиуса через UI:
slider.addEventListener("input", (e) => {
circle.setRadius(Number(e.target.value));
});
Разные сценарии требуют различного визуального оформления:
fillColor: "#4285F4",
fillOpacity: 0.2,
strokeColor: "#4285F4"
fillColor: "#FF0000",
fillOpacity: 0.25,
strokeWeight: 1
fillColor: "#00C853",
fillOpacity: 0.15,
strokeColor: "#00C853"
Circle часто используется как фильтр геоданных:
fetch("/api/places")
.then(res => res.json())
.then(points => {
return points.filter(p =>
isPointInCircle(p, circle)
);
});
При изменении zoom:
Это отличает Circle от экранных overlay-объектов, привязанных к пикселям.