Servizio di altitudine

Panoramica

Il servizio Altitudine fornisce dati di altitudine per le località sulla superficie della Terra, anche nei punti in profondità fondale oceanico (che restituisce valori negativi). Nei casi in cui Google non dispone di misurazioni esatte dell'elevazione al punto località richiesta, il servizio interpolerà e restituirà valore medio utilizzando le quattro località più vicine.

L'oggetto ElevationService fornisce un'interfaccia semplice per ottenere l'elevazione di luoghi della Terra e i dati di Google Cloud. Inoltre, puoi richiedere dati di altitudine campionati insieme per calcolare le variazioni di altitudine equidistanti lungo i percorsi. L'oggetto ElevationService comunica con il servizio Elevation dell'API di Google Maps che riceve altitudine e restituisce i dati di altitudine.

Il servizio Elevation ti consente di sviluppare percorsi a piedi e in bicicletta di posizionamento, applicazioni per dispositivi mobili o a bassa risoluzione delle applicazioni di alta qualità.

Per iniziare

Prima di utilizzare il servizio Elevation nell'API Maps JavaScript, assicurati che l'API Elevation sia abilitata nella console Google Cloud, nella stessa configurato per l'API Maps JavaScript.

Per visualizzare l'elenco delle API abilitate:

  1. Vai alla sezione console Google Cloud.
  2. Fai clic sul pulsante Seleziona un progetto, quindi seleziona lo stesso progetto che hai configurato. per l'API Maps JavaScript e fai clic su Apri.
  3. Nell'elenco delle API sulla Dashboard, cerca API Elevation.
  4. Se vedi l'API nell'elenco, non devi eseguire altre operazioni. Se l'API non è elencata, abilitala:
      .
    1. Nella parte superiore della pagina, seleziona ABILITA API per visualizzare lo stato Scheda Raccolta. In alternativa, dal menu laterale a sinistra, Seleziona Libreria.
    2. Cerca API Elevation e selezionala dalla dei risultati di ricerca.
    3. Seleziona ABILITA. Al termine del processo, L'API Elevation viene visualizzata nell'elenco delle API nella Dashboard.

Prezzi e norme

Prezzi

Dal 16 luglio 2018 è entrato in vigore un nuovo piano tariffario con pagamento a consumo per Maps, Routes e Places. Per saperne di più sui nuovi prezzi e sull'utilizzo i limiti di utilizzo del servizio Elevation JavaScript; consulta Utilizzo e fatturazione. per l'API Elevation.

Norme

L'utilizzo del servizio Elevation deve essere conforme alle norme descritte per l'API Elevation.

Richieste di elevazione

L'accesso al servizio Elevation è asincrono, poiché l'API di Google Maps deve effettuare una chiamata a un o server web. Per questo motivo, devi trasmettere un callback da eseguire al completamento della richiesta. Questo deve elaborare i risultati. Tieni presente che Il servizio di elevazione restituisce un codice di stato (ElevationStatus) e un array di valori separati ElevationResult oggetti.

ElevationService gestisce due tipi di richieste:

  • Richieste di sedi separate e discrete utilizzando getElevationForLocations(), che viene trasmesso un elenco di una o più località utilizzando Oggetto LocationElevationRequest.
  • Richieste di elevazione su una serie di punti collegati lungo un percorso utilizzando il metodo getElevationAlongPath(), che viene passato un insieme ordinato di vertici di percorso all'interno di Oggetto PathElevationRequest. Al momento della richiesta altitudini lungo i percorsi, devi trasmettere anche un parametro che indica e quanti campioni desideri fare lungo il percorso.

Ognuno di questi metodi deve anche passare un callback per gestire il valore ElevationResult restituito e ElevationStatus oggetti.

Richieste di elevazione località

Un valore letterale oggetto LocationElevationRequest contiene il seguente campo:

{
  locations[]: LatLng
}

locations (obbligatorio) definisce le località sulla Terra da cui restituire i dati di altitudine. Questo parametro prende un array di LatLng

Puoi passare un numero qualsiasi di più coordinate all'interno di una matrice, purché non superino le quote di servizio. Tieni presente che quando passi più coordinate, l'accuratezza dei dati restituiti può avere una risoluzione inferiore rispetto a quando richiedendo dati per una singola coordinata.

Richieste di elevazione percorso campionata

Un valore letterale oggetto PathElevationRequest contiene i seguenti campi:

{
  path[]: LatLng,
  samples: Number
}

Questi campi sono descritti di seguito:

  • path (obbligatorio) definisce un percorso sulla Terra per cui restituire dati di altitudine. path definisce un insieme di due o più valori ordinati di {latitude,longitude} coppie utilizzando un array di due o più oggetti LatLng.
  • samples (obbligatorio) specifica il numero di campioni i punti lungo un percorso per il quale restituire dati di elevazione. La Il parametro samples divide il valore path specificato in un insieme ordinato di punti equidistanti lungo il percorso.

Come per le richieste posizionali, il parametro path specifica un insieme di valori di latitudine e longitudine. A differenza di un modello richiesta, tuttavia, path specifica un insieme ordinato di vertici. Anziché restituire i dati di elevazione ai vertici, il percorso vengono campionate lungo la lunghezza del percorso, dove ogni il campione sia equidistante l'uno dall'altro (inclusi gli endpoint).

Risposte elevazione

Per ogni richiesta valida, il servizio Elevation restituirà al callback definito un insieme di ElevationResult insieme a un oggetto ElevationStatus.

Stati altitudine

Ogni richiesta di elevazione restituisce un codice ElevationStatus all'interno della sua funzione di callback. Questo codice di status conterrà uno dei seguenti valori:

  • OK indica che la richiesta di servizio è riuscita
  • INVALID_REQUEST che indica che la richiesta di servizio era non valido
  • OVER_QUERY_LIMIT che indica che il richiedente ha superato la quota
  • REQUEST_DENIED che indica che il servizio non è stato completato probabilmente perché in base a un parametro non valido
  • UNKNOWN_ERROR indica un errore sconosciuto

Dovresti verificare che la richiamata sia andata a buon fine esaminando codice di stato per OK.

Risultati altitudine

In caso di successo, l'argomento results del callback conterrà un insieme di ElevationResult oggetti. Questi oggetti contengono i seguenti elementi:

  • Un elemento location (contenente LatLng oggetti) della posizione per cui vengono calcolati i dati di elevazione. Nota per le richieste di percorso, l'insieme di elementi location contenere i punti campionati lungo il percorso.
  • Un elemento elevation che indica l'elevazione di la posizione in metri.
  • Un valore resolution, che indica la distanza massima tra i punti dati da cui è stata interpolata l'elevazione, in metri. Questo non sarà presente se la risoluzione non è nota. Tieni presente che i dati di altitudine diventano più approssimativi (valori di resolution più grandi) se vengono superati più punti. Per ottenere l'altitudine più precisa per un punto, dovrebbero essere eseguite query in modo indipendente.

Esempi di altitudine

Il seguente codice converte un clic su una mappa in un'altitudine utilizzando l'oggetto LocationElevationRequest:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 8,
      center: { lat: 63.333, lng: -150.5 }, // Denali.
      mapTypeId: "terrain",
    }
  );
  const elevator = new google.maps.ElevationService();
  const infowindow = new google.maps.InfoWindow({});

  infowindow.open(map);

  // Add a listener for the click event. Display the elevation for the LatLng of
  // the click inside the infowindow.
  map.addListener("click", (event) => {
    displayLocationElevation(event.latLng, elevator, infowindow);
  });
}

function displayLocationElevation(
  location: google.maps.LatLng,
  elevator: google.maps.ElevationService,
  infowindow: google.maps.InfoWindow
) {
  // Initiate the location request
  elevator
    .getElevationForLocations({
      locations: [location],
    })
    .then(({ results }) => {
      infowindow.setPosition(location);

      // Retrieve the first result
      if (results[0]) {
        // Open the infowindow indicating the elevation at the clicked position.
        infowindow.setContent(
          "The elevation at this point <br>is " +
            results[0].elevation +
            " meters."
        );
      } else {
        infowindow.setContent("No results found");
      }
    })
    .catch((e) =>
      infowindow.setContent("Elevation service failed due to: " + e)
    );
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 8,
    center: { lat: 63.333, lng: -150.5 }, // Denali.
    mapTypeId: "terrain",
  });
  const elevator = new google.maps.ElevationService();
  const infowindow = new google.maps.InfoWindow({});

  infowindow.open(map);
  // Add a listener for the click event. Display the elevation for the LatLng of
  // the click inside the infowindow.
  map.addListener("click", (event) => {
    displayLocationElevation(event.latLng, elevator, infowindow);
  });
}

function displayLocationElevation(location, elevator, infowindow) {
  // Initiate the location request
  elevator
    .getElevationForLocations({
      locations: [location],
    })
    .then(({ results }) => {
      infowindow.setPosition(location);
      // Retrieve the first result
      if (results[0]) {
        // Open the infowindow indicating the elevation at the clicked position.
        infowindow.setContent(
          "The elevation at this point <br>is " +
            results[0].elevation +
            " meters.",
        );
      } else {
        infowindow.setContent("No results found");
      }
    })
    .catch((e) =>
      infowindow.setContent("Elevation service failed due to: " + e),
    );
}

window.initMap = initMap;
Visualizza esempio

Prova Sample

L'esempio seguente costruisce una polilinea in base a un insieme di coordinate e visualizza i dati di elevazione lungo il percorso utilizzando API di visualizzazione di Google. (devi caricare questa API usando il Loader.) Viene creata una richiesta di altitudine utilizzando PathElevationRequest:

TypeScript

// Load the Visualization API and the columnchart package.
// @ts-ignore TODO update to newest visualization library
google.load("visualization", "1", { packages: ["columnchart"] });

function initMap(): void {
  // The following path marks a path from Mt. Whitney, the highest point in the
  // continental United States to Badwater, Death Valley, the lowest point.
  const path = [
    { lat: 36.579, lng: -118.292 }, // Mt. Whitney
    { lat: 36.606, lng: -118.0638 }, // Lone Pine
    { lat: 36.433, lng: -117.951 }, // Owens Lake
    { lat: 36.588, lng: -116.943 }, // Beatty Junction
    { lat: 36.34, lng: -117.468 }, // Panama Mint Springs
    { lat: 36.24, lng: -116.832 },
  ]; // Badwater, Death Valley

  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 8,
      center: path[1],
      mapTypeId: "terrain",
    }
  );

  // Create an ElevationService.
  const elevator = new google.maps.ElevationService();

  // Draw the path, using the Visualization API and the Elevation service.
  displayPathElevation(path, elevator, map);
}

function displayPathElevation(
  path: google.maps.LatLngLiteral[],
  elevator: google.maps.ElevationService,
  map: google.maps.Map
) {
  // Display a polyline of the elevation path.
  new google.maps.Polyline({
    path: path,
    strokeColor: "#0000CC",
    strokeOpacity: 0.4,
    map: map,
  });

  // Create a PathElevationRequest object using this array.
  // Ask for 256 samples along that path.
  // Initiate the path request.
  elevator
    .getElevationAlongPath({
      path: path,
      samples: 256,
    })
    .then(plotElevation)
    .catch((e) => {
      const chartDiv = document.getElementById(
        "elevation_chart"
      ) as HTMLElement;

      // Show the error code inside the chartDiv.
      chartDiv.innerHTML = "Cannot show elevation: request failed because " + e;
    });
}

// Takes an array of ElevationResult objects, draws the path on the map
// and plots the elevation profile on a Visualization API ColumnChart.
function plotElevation({ results }: google.maps.PathElevationResponse) {
  const chartDiv = document.getElementById("elevation_chart") as HTMLElement;

  // Create a new chart in the elevation_chart DIV.
  const chart = new google.visualization.ColumnChart(chartDiv);

  // Extract the data from which to populate the chart.
  // Because the samples are equidistant, the 'Sample'
  // column here does double duty as distance along the
  // X axis.
  const data = new google.visualization.DataTable();

  data.addColumn("string", "Sample");
  data.addColumn("number", "Elevation");

  for (let i = 0; i < results.length; i++) {
    data.addRow(["", results[i].elevation]);
  }

  // Draw the chart using the data within its DIV.
  chart.draw(data, {
    height: 150,
    legend: "none",
    // @ts-ignore TODO update to newest visualization library
    titleY: "Elevation (m)",
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// Load the Visualization API and the columnchart package.
// @ts-ignore TODO update to newest visualization library
google.load("visualization", "1", { packages: ["columnchart"] });

function initMap() {
  // The following path marks a path from Mt. Whitney, the highest point in the
  // continental United States to Badwater, Death Valley, the lowest point.
  const path = [
    { lat: 36.579, lng: -118.292 }, // Mt. Whitney
    { lat: 36.606, lng: -118.0638 }, // Lone Pine
    { lat: 36.433, lng: -117.951 }, // Owens Lake
    { lat: 36.588, lng: -116.943 }, // Beatty Junction
    { lat: 36.34, lng: -117.468 }, // Panama Mint Springs
    { lat: 36.24, lng: -116.832 },
  ]; // Badwater, Death Valley
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 8,
    center: path[1],
    mapTypeId: "terrain",
  });
  // Create an ElevationService.
  const elevator = new google.maps.ElevationService();

  // Draw the path, using the Visualization API and the Elevation service.
  displayPathElevation(path, elevator, map);
}

function displayPathElevation(path, elevator, map) {
  // Display a polyline of the elevation path.
  new google.maps.Polyline({
    path: path,
    strokeColor: "#0000CC",
    strokeOpacity: 0.4,
    map: map,
  });
  // Create a PathElevationRequest object using this array.
  // Ask for 256 samples along that path.
  // Initiate the path request.
  elevator
    .getElevationAlongPath({
      path: path,
      samples: 256,
    })
    .then(plotElevation)
    .catch((e) => {
      const chartDiv = document.getElementById("elevation_chart");

      // Show the error code inside the chartDiv.
      chartDiv.innerHTML = "Cannot show elevation: request failed because " + e;
    });
}

// Takes an array of ElevationResult objects, draws the path on the map
// and plots the elevation profile on a Visualization API ColumnChart.
function plotElevation({ results }) {
  const chartDiv = document.getElementById("elevation_chart");
  // Create a new chart in the elevation_chart DIV.
  const chart = new google.visualization.ColumnChart(chartDiv);
  // Extract the data from which to populate the chart.
  // Because the samples are equidistant, the 'Sample'
  // column here does double duty as distance along the
  // X axis.
  const data = new google.visualization.DataTable();

  data.addColumn("string", "Sample");
  data.addColumn("number", "Elevation");

  for (let i = 0; i < results.length; i++) {
    data.addRow(["", results[i].elevation]);
  }

  // Draw the chart using the data within its DIV.
  chart.draw(data, {
    height: 150,
    legend: "none",
    // @ts-ignore TODO update to newest visualization library
    titleY: "Elevation (m)",
  });
}

window.initMap = initMap;
Visualizza esempio

Prova Sample