Usługa wzniesienia

Omówienie

Usługa Wzniesienie dostarcza danych o wysokości dla lokalizacji również na powierzchni kuli ziemskiej, także w głębokich lokalizacjach, dno oceaniczne (które zwracają wartości ujemne). W przypadku, gdy Google nie zna dokładnych pomiarów wysokości n.p.m. lokalizacji, usługa wykona interpolację i zwróci średnią wartość z czterech najbliższych lokalizacji.

Obiekt ElevationService udostępnia prosty interfejs do zapytań o lokalizacje na Ziemi w celu ustalenia wysokości i skalowalnych danych. Możesz też poprosić o próbkowane dane o wysokości ścieżek, co pozwala obliczyć równoodległe zmiany wysokości wzdłuż tras. Obiekt ElevationService komunikuje się z usługą wysokości względnej interfejsu API Map Google, która otrzymuje informacje o wysokości i powrotów, a także dane o wysokości.

Dzięki usłudze wysokości względnej można tworzyć wędrówki piesze i rowerowe aplikacje, aplikacje do pozycjonowania urządzeń mobilnych lub niska rozdzielczość aplikacji ankietowych.

Pierwsze kroki

Zanim użyjesz usługi wysokości względnej w Maps JavaScript API, upewnij się, interfejs Elevation API jest włączony w konsoli Google Cloud – projektu skonfigurowanego na potrzeby Maps JavaScript API.

Aby wyświetlić listę włączonych interfejsów API:

  1. Przejdź do Konsola Google Cloud.
  2. Kliknij przycisk Wybierz projekt, a potem wybierz ten sam skonfigurowany projekt. Maps JavaScript API i kliknij Otwórz.
  3. Na liście interfejsów API w panelu znajdź Elevation API.
  4. Jeśli interfejs API jest widoczny na liście, nie musisz nic robić. Jeśli interfejsu API nie ma na liście, włącz:
    1. U góry strony wybierz WŁĄCZ API, aby wyświetlić Biblioteka. Możesz też w menu po lewej stronie wybierz opcję Biblioteka.
    2. Wyszukaj Elevation API, a potem wybierz go w listę wyników.
    3. Kliknij WŁĄCZ. Gdy proces się zakończy, Elevation API pojawi się na liście interfejsów API Panel.

Ceny i zasady

Ceny

16 lipca 2018 r. wszedł w życie nowy abonament z płatnością według wykorzystania dla Map, tras i miejsc. Aby dowiedzieć się więcej o nowych cenach i wykorzystaniu i ograniczeniami w korzystaniu z usługi JavaScript Elevation., patrz Użycie i płatności. dla interfejsu Elevation API.

Zasady

Korzystanie z usługi wysokości względnej musi odbywać się zgodnie z opisanych zasad dla interfejsu Elevation API.

Prośby o podniesienie uprawnień

Dostęp do usługi Elevation jest asynchroniczny, ponieważ interfejs API Map Google musi wywoływać metodę serwera. Dlatego musisz przekazać callback do wykonania po zakończeniu żądania. Ten metoda wywołania zwrotnego powinna przetworzyć wyniki. Pamiętaj, że parametr Usługa wysokości względnej zwraca kod stanu (ElevationStatus) i tablicy osobnych ElevationResult obiektów.

ElevationService obsługuje 2 typy żądań:

  • Prośby o osobne, osobne lokalizacje za pomocą getElevationForLocations(), która jest przekazywana do listy z co najmniej jedną lokalizacją za pomocą LocationElevationRequest obiekt.
  • Prośby o wzniesienie w serii połączonych punktów wzdłuż ścieżki za pomocą metody getElevationAlongPath(), który jest przekazywany do uporządkowanego zbioru wierzchołków ścieżek w obrębie PathElevationRequest obiekt. Podczas wysyłania prośby wzniesienia wzdłuż ścieżek, należy również przekazać parametr wskazujący liczbę próbek, które chcesz uwzględnić po tej ścieżce.

Każda z tych metod musi też przekazywać wywołanie zwrotne metoda obsługi zwróconego obiektu ElevationResult i ElevationStatus obiektów.

Prośby o podniesienie lokalizacji

Literał obiektu LocationElevationRequest zawiera to pole:

{
  locations[]: LatLng
}

locations (wymagany) określa lokalizacje na Ziemi , z którego mają zostać zwrócone dane o wysokości. Ten parametr ma tablicę o wartości LatLng

W tablicy można przekazać dowolną liczbę współrzędnych, o ile nie przekroczysz limitów usługi. Pamiętaj, że przy przekazywaniu wielu współrzędnych dokładności wszelkich zwróconych danych może być mniejsza niż żądania danych dla jednej współrzędnej.

Próbkowane prośby o podniesienie ścieżki

Literał obiektu PathElevationRequest zawiera następujące pola:

{
  path[]: LatLng,
  samples: Number
}

Poniżej objaśniono te pola:

  • path (wymagany) określa ścieżkę w Ziemi dla których mają zostać zwrócone dane o wysokości. path parametr określa zbiór co najmniej 2 uporządkowanych danych: {latitude,longitude} przy użyciu tablicy zawierającej co najmniej dwa obiekty LatLng.
  • samples (wymagany) określa liczbę próbek punktów na ścieżce, dla których mają być zwracane dane o wysokości n.p.m. Parametr samples dzieli podaną wartość: path w uporządkowany zbiór równoodległych punktów na ścieżce.

Podobnie jak w przypadku żądań pozycjonowania, parametr path określa zbiór wartości szerokości i długości geograficznej. Inaczej niż , jednak path określa uporządkowany zbiór wierzchołków. Zamiast zwracać dane o wysokości w wierzchołkach, ścieżka są próbkowane na całej długości ścieżki, gdzie każde próbka jest w równej odległości od siebie (włącznie z punktami końcowymi).

Odpowiedzi na wysokość

Dla każdego prawidłowego żądania usługa wysokości względnej zwróci do zdefiniowanego wywołania zwrotnego zestawu ElevationResult obiekty wraz z obiektem ElevationStatus.

Stany wysokości

Każde żądanie podniesienia uprawnień zwraca kod ElevationStatus w ramach funkcji wywołania zwrotnego. Ten kod status zawiera jedną z następujących wartości:

  • OK oznacza, że żądanie usługi zostało zrealizowane
  • INVALID_REQUEST wskazujący, że żądanie usługi zostało zniekształcony
  • OVER_QUERY_LIMIT oznacza, że zgłaszający przekroczył limit
  • REQUEST_DENIED wskazujący, że usługa nie została ukończona prawdopodobnie dlatego, że jest nieprawidłowy parametr
  • UNKNOWN_ERROR oznacza nieznany błąd

Należy sprawdzić, czy wywołanie zwrotne zostało złożone, analizując kodu stanu dla: OK.

Wyniki dotyczące wysokości

Po pomyślnym zakończeniu argument results wywołania zwrotnego funkcja będzie zawierać zbiór obiektów ElevationResult. Obiekty te zawierają następujące elementy:

  • Element location (zawierający LatLng) obiektów) położenia, dla którego obliczane są dane o wysokości. Notatka że w przypadku żądań ścieżek zbiór elementów location będzie zawiera próbkowane punkty na ścieżce.
  • Element elevation wskazujący wysokość lokalizacja w metrach.
  • Wartość resolution, która wskazuje maksymalną odległość między punkty danych, z których była interpolowana wysokość (w metrach). Ten brakuje właściwości, jeśli rozdzielczość jest nieznana. Pamiętaj, że dane o wysokości stają się bardziej przybliżone (większe wartości resolution) po uzyskaniu większej liczby punktów. Aby uzyskać najdokładniejszą wysokość jako punktu, zapytanie o tę wartość powinno być wykonywane niezależnie.

Przykłady wzniesień

Ten kod przekłada kliknięcie na mapie na wysokość za pomocą obiektu 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;
Zobacz przykład

Zobacz próbkę

W poniższym przykładzie można utworzyć linię łamaną na podstawie zestawu współrzędnych i wyświetla dane o wysokości na tej ścieżce za pomocą interfejsu Google Website API (w języku angielskim). (Ten interfejs API musi być wczytany za pomocą Loader.) Żądanie podniesienia uprawnień jest tworzone za pomocą 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;
Zobacz przykład

Zobacz próbkę