Tırmanma Hizmeti

Genel bakış

Tırmanma hizmeti, okyanus zeminindeki derin değerler (negatif değerler döndüren) de dahil olmak üzere dünya yüzeyindeki yerler için rakım verileri sağlar. Google'ın tam olarak istediğiniz konumda tam yükseklik ölçümlerine sahip olmadığı durumlarda hizmet, en yakın dört konumu kullanarak ortalama değeri döndürür ve döndürür.

ElevationService nesnesi, yeryüzündeki yükseklik verilerini sorgulamak için basit bir arayüz sağlar. Ayrıca, yollar için örnek yükseklik verileri isteyebilirsiniz. Böylece rotalar genelinde eşit yükseklik değişikliklerini hesaplayabilirsiniz. ElevationService nesnesi, yükseklik istekleri alan ve yükseklik verileri döndüren Google Maps API Rakım Hizmeti ile iletişim kurar.

Elevation hizmetiyle yürüyüş ve bisiklet uygulamaları, mobil konumlandırma uygulamaları veya düşük çözünürlüklü anket uygulamaları geliştirebilirsiniz.

Başlarken

Maps JavaScript API'de Elevation hizmetini kullanmadan önce, Elevation API'nin Google Cloud Console'da etkinleştirildiğinden emin olun. Bu işlem, Maps JavaScript API için belirlediğiniz projededir.

Etkin API'lerinizin listesini görüntülemek için:

  1. Google Cloud Console'a gidin.
  2. Bir proje seçin düğmesini tıklayın, ardından Maps JavaScript API için ayarladığınız projeyi seçin ve 'ı tıklayın.
  3. Kontrol Paneli'ndeki API'ler listesinden Elevation API'yi bulun.
  4. API'yi listede görüyorsanız her şey hazır demektir. API listelenmiyorsa etkinleştirin:
    1. Kitaplık sekmesini görmek için sayfanın üst kısmından API'Yİ ETKİNLEŞTİR'i seçin. Alternatif olarak, sol kısımdaki menüden Kitaplık'ı seçin.
    2. Elevation API'yi arayın, ardından sonuçlar listesinden seçin.
    3. ETKİNLEŞTİR'i seçin. İşlem tamamlandığında Elevation API, Kontrol Paneli'ndeki API listesinde görünür.

Fiyatlandırma ve politikalar

Fiyatlandırma

16 Temmuz 2018'den itibaren Haritalar, Rotalar ve Yerler için yeni bir kullandıkça öde fiyatlandırma planı yürürlüğe girdi. JavaScript Yükseklik hizmetini kullanımınızla ilgili yeni fiyatlandırma ve kullanım sınırları hakkında daha fazla bilgi edinmek için Elevation API'nin Kullanım ve Faturalandırma bölümüne bakın.

Politikalar

Elevation hizmetinin kullanımı, Elevation API için açıklanan politikalara uygun olmalıdır.

Tırmanma Talepleri

Elevation hizmetine erişme, Google Maps API'nin harici bir sunucuya çağrı yapması gerektiği için eşzamansızdır. Bu nedenle, istek tamamlandığında yürütme işleminin yürütülmesi için geri çağırma yöntemi iletmeniz gerekir. Bu geri çağırma yöntemi, sonuçları işlemelidir. Yükseklik hizmetinin bir durum kodu (ElevationStatus) ve ayrı ElevationResult nesneleri dizisi döndürdüğünü unutmayın.

ElevationService, iki tür isteği işler:

  • Bir veya daha fazla konumun LocationElevationRequest nesnesi kullanılarak iletilmesini sağlayan getElevationForLocations() yöntemini kullanarak ayrı ve bağımsız konumlar için yapılan istekler.
  • getElevationAlongPath() yöntemiyle bir yol boyunca bir dizi bağlantılı noktanın yükselti yükseltilmesi için gönderilen istekler. Bu yöntem, PathElevationRequest nesnesi içinde sıralı yol köşeleri kümesi olarak geçer. Yollar boyunca yükseklik isterken, yol boyunca kaç örnek almak istediğinizi belirten bir parametreyi de iletmeniz gerekir.

Bu yöntemlerin her biri, döndürülen ElevationResult ve ElevationStatus nesnelerini işlemek için bir geri çağırma yönteminden de geçmelidir.

Yer Tırmanışı İstekleri

LocationElevationRequest nesne değişmez değeri aşağıdaki alanı içerir:

{
  locations[]: LatLng
}

locations (gerekli), rakım verilerinin döndürüleceği dünyada konumları tanımlar. Bu parametre, bir LatLng saniye dizisi alır.

Hizmet kotalarını aşmadığınız sürece bir dizi içinde istediğiniz sayıda koordinat aktarabilirsiniz. Birden fazla koordinat aktarılırken, döndürülen verilerin doğruluğunun tek bir koordinat için veri talep edilenden daha düşük çözünürlükte olabileceğini unutmayın.

Örnek Yol Yüksekliği İstekleri

PathElevationRequest nesne değişmez değeri aşağıdaki alanları içerir:

{
  path[]: LatLng,
  samples: Number
}

Bu alanlar aşağıda açıklanmıştır:

  • path (gerekli), rakım verilerinin döndürüleceği dünya üzerindeki bir yolu tanımlar. path parametresi, iki veya daha fazla LatLng nesneden oluşan bir dizi kullanılarak iki veya daha fazla sıralı {Enlem,boylam} çiftinden oluşan bir grubu tanımlar.
  • samples (zorunlu), bir yol boyunca yükseklik verilerinin döndürüleceği örnek noktalarının sayısını belirtir. samples parametresi, belirtilen path öğesini yol boyunca eşit uzaklıktaki eşit noktalara böler.

Konumlandırma isteklerinde olduğu gibi, path parametresi bir enlem ve boylam değerleri grubunu belirtir. Ancak konumsal isteğin aksine path, sıralı bir köşe noktasını belirtir. Yükselti verileri tepe noktalarında döndürmek yerine, yol boyunca örneklenir. Burada, her örnek birbirinden eşittir (uç noktalar dahil).

Tırmanılan Yanıtlar

Yükseklik hizmeti her geçerli istek için, bir ElevationResult nesnesiyle birlikte tanımlı bir ElevationResult nesne grubu döndürür.

Tırmanma Durumu

Her yükseklik isteği, geri çağırma işlevinde bir ElevationStatus kodu döndürür. Bu status kodu, aşağıdaki değerlerden birini içerir:

  • Hizmet isteğinin başarılı olduğunu gösteren OK
  • Hizmet isteğinin bozuk olduğunu gösteren INVALID_REQUEST
  • İstekte bulunanın kotayı aştığını belirten OVER_QUERY_LIMIT
  • Hizmetin isteği tamamlamadığını belirten REQUEST_DENIED muhtemelen geçersiz bir parametrededir
  • Bilinmeyen bir hata olduğunu belirten UNKNOWN_ERROR

Geri çağırma işleminizin başarılı olup olmadığını kontrol etmek için OK durum kodunu inceleyin.

Tırmanma Sonuçları

Başarılı olduğunda, geri çağırma işlevinizin results bağımsız değişkeni bir ElevationResult nesnesi grubu içerir. Bu nesneler aşağıdaki öğeleri içerir:

  • Yükseklik verilerinin hesaplandığı konumun location öğesi (LatLng nesneyi içerir). Yol istekleri için location öğe grubunun yol boyunca örneklenen noktaları içereceğini unutmayın.
  • Konumun yüksekliğini metre cinsinden gösteren elevation öğesi.
  • Rakımın yükseltildiği veri noktaları arasındaki maksimum mesafeyi metre cinsinden gösteren resolution değeri. Çözünürlük bilinmiyorsa bu özellik eksik olur. Yükseklik verilerinin birden çok nokta iletildiğinde daha genel (daha büyük resolution değerleri) olacağını unutmayın. Bir noktanın en doğru irtifa değerini elde etmek için bağımsız olarak sorgulanması gerekir.

Yükseklik Örnekleri

Aşağıdaki kod, LocationElevationRequest nesnesini kullanarak bir harita tıklamasını yükseklik isteğine dönüştürür:

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 },
    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;
Örneği göster

Örneği Dene

Aşağıdaki örnek, bir dizi koordinat verilen bir çoklu çizgi oluşturur ve Google Görselleştirme API'sını kullanarak bu yol boyunca yükseklik verilerini görüntüler. (Bu API'yi Google Ortak Yükleyici'yi kullanarak yüklemeniz gerekir.) Yükseklik isteği aşağıdaki PathElevationRequest kullanılarak oluşturulur:

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 },
    { lat: 36.606, lng: -118.0638 },
    { lat: 36.433, lng: -117.951 },
    { lat: 36.588, lng: -116.943 },
    { lat: 36.34, lng: -117.468 },
    { 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;
Örneği göster

Örneği Dene