В Maps JavaScript API возможны две реализации карт: растровая и векторная. Растровая карта загружается по умолчанию в виде сетки растровых (пиксельных) изображений, которые генерируются серверами платформы Google Карт, а затем передаются в ваше веб-приложение. Векторная карта состоит из векторных изображений, которые отрисовываются во время загрузки на стороне клиента с помощью WebGL – эта технология открывает браузеру доступ к графическому процессору на устройстве пользователя для визуализации 2D- и 3D-графики.
Векторная карта — это знакомая любому пользователю карта Google. Она функциональнее загружаемой по умолчанию растровой карты (отметим в первую очередь более высокую четкость векторных изображений и отрисовку 3D-зданий при крупном масштабе). Векторная карта также поддерживает некоторые новые функции, например добавление 3D-контента с помощью WebGL Overlay View, программное управление наклоном и ориентацией карты, улучшенное управление камерой и дробные коэффициенты масштабирования (для более плавного изменения масштаба карты).
Начать работу с векторными картами
Управление камерой
Используйте метод map.moveCamera()
для одновременного обновления свойств камеры в любых сочетаниях. Все свойства камеры, которые нужно изменить, передаются методу map.moveCamera()
в одном параметре. В примере ниже показан вызов map.moveCamera()
для одновременной настройки свойств center
, zoom
, heading
и tilt
.
map.moveCamera({
center: new google.maps.LatLng(37.7893719, -122.3942),
zoom: 16,
heading: 320,
tilt: 47.5
});
Вы можете анимировать картинку, поступающую с камеры, вызвав метод map.moveCamera()
и запустив цикл, как показано в примере ниже.
const degreesPerSecond = 3;
function animateCamera(time) {
// Update the heading, leave everything else as-is.
map.moveCamera({
heading: (time / 1000) * degreesPerSecond
});
requestAnimationFrame(animateCamera);
}
// Start the animation.
requestAnimationFrame(animateCamera);
Дробные коэффициенты масштабирования
В векторных картах коэффициенты масштабирования могут принимать дробные, а не только целочисленные значения. Растровые карты тоже поддерживают эту возможность, но по умолчанию она в них отключена. Включить или выключить ее можно с помощью свойства карты isFractionalZoomEnabled
.
В примере ниже показано включение дробных коэффициентов масштабирования при инициализации карты.
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8,
isFractionalZoomEnabled: true
});
Вы также можете включить или выключить дробные коэффициенты масштабирования, задав свойство карты isFractionalZoomEnabled
, как показано ниже.
// Using map.set
map.set('isFractionalZoomEnabled', true);
// Using map.setOptions
map.setOptions({isFractionalZoomEnabled: true});
Если вы явно не присвоили свойству isFractionalZoomEnabled
значение true
или false
, настройте для него прослушиватель, как показано в примере ниже.
map.addListener('isfractionalzoomenabled_changed', () => {
const isFractionalZoomEnabled = map.get('isFractionalZoomEnabled');
if (isFractionalZoomEnabled === false) {
console.log('not using fractional zoom');
} else if (isFractionalZoomEnabled === true) {
console.log('using fractional zoom');
} else {
console.log('map not done initializing yet');
}
});