Контрол поворота карты (Rotate Control) предназначен для управления углом ориентации карты пользователем. Он позволяет вращать карту вокруг её центра, изменяя направление отображения объектов относительно сторон света.
Функциональность особенно актуальна при использовании спутникового режима и трёхмерных представлений местности, где ориентация карты помогает лучше воспринимать пространственное расположение объектов.
В интерфейсе Google Maps JavaScript API контрол поворота представляет собой элемент управления, который появляется на карте при соблюдении определённых условий отображения.
В отличие от масштабирования или перемещения, возможность поворота доступна не во всех режимах отображения.
Для работы механизма вращения необходимо:
При обычном режиме карты (roadmap) контрол зачастую не
отображается, даже если его включить программно.
Для активации контрола используется параметр
rotateControl в объекте настроек карты.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 18,
mapTypeId: "satellite",
rotateControl: true
}
);
В данном примере:
Если возможность вращения не требуется, элемент управления можно скрыть.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 18,
mapTypeId: "satellite",
rotateControl: false
}
);
После установки значения false контрол не будет
отображаться даже при поддержке поворота текущим режимом карты.
Как и большинство стандартных элементов интерфейса Google Maps, контрол поворота может размещаться в различных частях карты.
Для этого используется объект rotateControlOptions.
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 18,
mapTypeId: "satellite",
rotateControl: true,
rotateControlOptions: {
position: google.maps.ControlPosition.LEFT_CENTER
}
}
);
В примере контрол будет расположен по центру левой стороны карты.
Для свойства position используются значения перечисления
google.maps.ControlPosition.
Наиболее распространённые варианты:
google.maps.ControlPosition.TOP_LEFT
google.maps.ControlPosition.TOP_CENTER
google.maps.ControlPosition.TOP_RIGHT
google.maps.ControlPosition.LEFT_TOP
google.maps.ControlPosition.LEFT_CENTER
google.maps.ControlPosition.LEFT_BOTTOM
google.maps.ControlPosition.RIGHT_TOP
google.maps.ControlPosition.RIGHT_CENTER
google.maps.ControlPosition.RIGHT_BOTTOM
google.maps.ControlPosition.BOTTOM_LEFT
google.maps.ControlPosition.BOTTOM_CENTER
google.maps.ControlPosition.BOTTOM_RIGHT
Пример размещения справа сверху:
rotateControlOptions: {
position: google.maps.ControlPosition.RIGHT_TOP
}
Параметры карты могут изменяться после её создания.
Включение контрола:
map.setOptions({
rotateControl: true
});
Отключение:
map.setOptions({
rotateControl: false
});
Такой подход используется в приложениях с изменяемым пользовательским интерфейсом.
Состояние контрола можно получить через метод get().
const rotateEnabled = map.get("rotateControl");
console.log(rotateEnabled);
Результат:
true
или
false
Наличие контрола напрямую связано с используемым типом карты.
Переключение в спутниковый режим:
map.setMapTypeId("satellite");
Возврат к обычной карте:
map.setMapTypeId("roadmap");
После перехода к режиму roadmap контрол может
автоматически исчезнуть, поскольку поворот в этом режиме обычно не
используется.
Поворот тесно связан с механизмом наклона.
Установка наклона:
map.setTilt(45);
Получение текущего значения:
const tilt = map.getTilt();
console.log(tilt);
Наличие наклона значительно увеличивает вероятность отображения контрола поворота, поскольку карта начинает отображаться в перспективном режиме.
Следует понимать важное ограничение API.
Классический Google Maps JavaScript API предоставляет интерфейс
поворота преимущественно через пользовательский интерфейс, а не через
прямое изменение угла вращения карты методами объекта
Map.
Поэтому типичная схема выглядит следующим образом:
Контрол поворота обычно работает вместе с:
Пример комплексной настройки:
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 18,
mapTypeId: "satellite",
zoomControl: true,
mapTypeControl: true,
streetViewControl: true,
fullscreenControl: true,
rotateControl: true
}
);
Такой набор обеспечивает полный набор инструментов навигации.
Конфигурация может быть вынесена в отдельный объект.
const mapOptions = {
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 18,
mapTypeId: "satellite",
rotateControl: true,
rotateControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
}
};
const map = new google.maps.Map(
document.getElementById("map"),
mapOptions
);
Подобная организация облегчает сопровождение больших проектов.
Даже при корректной настройке контрола его отображение зависит от нескольких факторов:
Поэтому наличие настройки
rotateControl: true
не гарантирует обязательное появление элемента интерфейса.
Полноценная настройка карты с активированным поворотом:
<div id="map"></div>
<style>
#map {
width: 100%;
height: 600px;
}
</style>
<script>
function initMap() {
const map = new google.maps.Map(
document.getElementById("map"),
{
center: {
lat: 55.7558,
lng: 37.6176
},
zoom: 19,
mapTypeId: "satellite",
rotateControl: true,
rotateControlOptions: {
position:
google.maps.ControlPosition.RIGHT_TOP
}
}
);
map.setTilt(45);
}
</script>
В результате создаётся спутниковая карта с перспективным отображением местности и активным контролом поворота, расположенным в правой верхней части интерфейса.
Причины:
roadmap;Пример проблемной конфигурации:
const map = new google.maps.Map(
document.getElementById("map"),
{
zoom: 5,
mapTypeId: "roadmap",
rotateControl: true
}
);
Несмотря на наличие настройки, контрол может отсутствовать.
Ошибка:
rotateControlOptions: {
position: "TOP"
}
Правильно:
rotateControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
}
Использовать необходимо только значения перечисления
ControlPosition.
Некоторые разработчики предполагают существование метода наподобие:
map.setRotation(90);
или
map.rotate(90);
Такие методы отсутствуют в классическом объекте
google.maps.Map.
Вращение выполняется через пользовательский интерфейс и зависит от возможностей конкретного режима отображения карты.
Контрол поворота целесообразно применять:
Контрол поворота лучше отключать:
Грамотное использование контрола поворота позволяет повысить удобство навигации и улучшить восприятие пространственного расположения объектов на карте, особенно при работе со спутниковыми изображениями и перспективными режимами отображения местности.