Обзор
Установить угол наклона и ориентации векторной карты можно с помощью свойств heading
и tilt
(при инициализации карты) и вызова методов setTilt
и setHeading
. В примере ниже на карту добавлено несколько кнопок для программной настройки угла наклона и ориентации с шагом 20 градусов.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", } ); const buttons: [string, string, number, google.maps.ControlPosition][] = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode: string, amount: number) { switch (mode) { case "tilt": map.setTilt(map.getTilt()! + amount); break; case "rotate": map.setHeading(map.getHeading()! + amount); break; default: break; } }; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", }); const buttons = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode, amount) { switch (mode) { case "tilt": map.setTilt(map.getTilt() + amount); break; case "rotate": map.setHeading(map.getHeading() + amount); break; default: break; } }; } window.initMap = initMap;
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .ui-button { background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 0 0.5em; font: 400 18px Roboto, Arial, sans-serif; overflow: hidden; height: 40px; cursor: pointer; } .ui-button:hover { background: rgb(235, 235, 235); }
HTML
<html> <head> <title>Tilt and Rotation</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- The `defer` attribute causes the callback to execute after the full HTML document has been parsed. For non-blocking uses, avoiding race conditions, and consistent behavior across browsers, consider loading using Promises with https://www.npmjs.com/package/@googlemaps/js-api-loader. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=beta" defer ></script> </body> </html>
Примеры кода
Управление мышью и командами клавиатуры
Настроить угол наклона и ориентации можно с помощью мыши и клавиатуры.
- Мышь: удерживая клавишу Shift, перетаскивайте карту мышью вверх и вниз, чтобы отрегулировать угол наклона, или вправо и влево, чтобы отрегулировать ориентацию.
- Клавиатура: удерживая клавишу Shift, нажимайте кнопки со стрелками "вверх" и "вниз", чтобы отрегулировать угол наклона, или "вправо" и "влево", чтобы отрегулировать ориентацию.
Программная настройка угла наклона и ориентации
Настроить углы наклона и ориентации векторной карты можно с помощью методов setTilt()
and setHeading()
. Ориентация задается как угол обзора в градусах от направления на север по часовой стрелке (т. е. код map.setHeading(90)
сориентирует карту верхом на восток). Угол наклона отсчитывается от оси, направленной в сторону зенита: коду map.setTilt(0)
соответствует стандартный вид сверху вниз, а коду map.setTilt(45)
— вид под углом.
- Вызывайте метод
setTilt()
, чтобы задать угол наклона карты, аgetTilt()
– чтобы получить его текущее значение. - Вызывайте метод
setHeading()
, чтобы задать угол ориентации карты, аgetHeading()
– чтобы получить его текущее значение.
Чтобы изменить центральную точку карты, сохранив текущий угол наклона и ориентации, используйте метод map.setCenter()
или map.panBy()
.
Учтите, что допустимый диапазон значений углов зависит от масштаба карты. Если заданное значение окажется за пределами диапазона, вместо него будет применено ближайшее допустимое.
Изменить программно ориентацию, наклон, центр и масштаб карты можно также с помощью метода moveCamera
. Подробнее…
Влияние на другие методы
Заданные для карты значения угла наклона и ориентации влияют на поведение других методов Maps JavaScript API.
- Метод
map.getBounds()
всегда возвращает самую маленькую из возможных видимых областей карты. Когда задается наклон, метод может вернуть значения, соответствующие более обширной области, чем была на экране. - Метод
map.fitBounds()
обнуляет значения угла ориентации и наклона, прежде чем сузить карту. - Метод
map.panToBounds()
обнуляет значения угла ориентации и наклона, прежде чем расширить карту. - Метод
map.setTilt()
принимает любые значения, но выдает угол наклона только в рамках допустимого для текущего масштаба карты диапазона. map.setHeading()
принимает любые значения и приводит их к диапазону [0, 360].