Inclina e rotazione

Seleziona la piattaforma: Android iOS JavaScript

Visualizza esempio

Panoramica

Puoi impostare l'inclinazione e la rotazione (heading) sulla mappa vettoriale includendo le proprietà heading e tilt durante l'inizializzazione della mappa e chiamando i metodi setTilt e setHeading sulla mappa. L'esempio riportato di seguito aggiunge alla mappa alcuni pulsanti che mostrano l'inclinazione e l'orientamento regolati tramite programmazione in incrementi di 20 gradi.

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>

    <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 script 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. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

Prova Sample

Utilizzare i gesti del mouse e della tastiera

Se sono state attivate le interazioni utente per l'inclinazione e la rotazione (heading) (in modo programmatico o nella console Google Cloud), gli utenti possono regolare l'inclinazione e la rotazione utilizzando il mouse e la tastiera:

  • Con il mouse, tieni premuto il tasto Maiusc, quindi fai clic e trascina il mouse su e giù per regolare l'inclinazione e a destra e a sinistra per regolare la direzione.
  • Utilizzando la tastiera, tieni premuto il tasto Maiusc, quindi utilizza i tasti Freccia su e Freccia giù per regolare l'inclinazione e i tasti Freccia destra e Freccia sinistra per regolare l'orientamento.

Regolazione di inclinazione e rotta in modo programmatico

Utilizza i metodi setTilt() e setHeading() per regolare in modo programmatico l'inclinazione e l'orientamento su una mappa vettoriale. L'orientamento indica la direzione in cui è rivolta la videocamera in gradi antiorario a partire da nord, quindi map.setHeading(90) ruota la mappa in modo che l'est sia rivolto verso l'alto. L'angolo di inclinazione viene misurato dal zenit, quindi map.setTilt(0) guarda verso il basso, mentre map.setTilt(45) produrrà una vista obliqua.

  • Chiama setTilt() per impostare l'angolo di inclinazione della mappa. Utilizza getTilt() per ottenere il valore dell'inclinazione corrente.
  • Chiama setHeading() per impostare l'intestazione della mappa. Utilizza getHeading() per ottenere il valore dell'intestazione corrente.

Per modificare il centro della mappa mantenendo l'inclinazione e la direzione, usa map.setCenter() o map.panBy().

Tieni presente che l'intervallo di angolazioni che può essere utilizzato varia in base al livello di zoom corrente. I valori che non rientrano in questo intervallo verranno bloccati all'intervallo attualmente consentito.

Puoi anche utilizzare il metodo moveCamera per modificare in modo programmatico orientamento, inclinazione, centratura e zoom. Scopri di più.

Impatto su altri metodi

Quando l'inclinazione o la rotazione viene applicata alla mappa, il comportamento di altri metodi dell'API Maps JavaScript viene modificato:

  • map.getBounds() restituisce sempre la scatola delimitante più piccola che include la regione visibile. Quando viene applicato l'inclinazione, i limiti restituiti possono rappresentare una regione più grande della regione visibile dell'area visibile della mappa.
  • map.fitBounds() reimposta l'inclinazione e la direzione su zero prima di adattare i limiti.
  • map.panToBounds() reimposta l'inclinazione e la direzione su zero prima di eseguire la panoramica dei confini.
  • map.setTilt() accetta qualsiasi valore, ma limita l'inclinazione massima in base al livello di zoom della mappa corrente.
  • map.setHeading() accetta qualsiasi valore e lo modifica in modo che rientri nell'intervallo [0, 360].