Tırmanma Hizmeti

Genel bakış

Yükseklik hizmeti, okyanus zeminindeki derin konumlar da dahil olmak üzere dünya yüzeyindeki konumlara ilişkin rakım verileri sağlar. Google'ın tam yükseklik ölçümlerinin tam olarak istediğiniz konumda bulunmadığı durumlarda, hizmet en yakın dört konumu kullanarak ortalama değeri hesaplar ve sonuç döndürür.

ElevationService nesnesi, rakım verileri için dünyadaki konumları sorgulamanız amacıyla basit bir arayüz sağlar. Ayrıca, yollar üzerinde örnek yükseklik verileri isteyebilirsiniz. Böylece rotalardaki eşitlikli yükseklik değişikliklerini hesaplayabilirsiniz. ElevationService nesnesi, yükseklik istekleri alan ve yükseklik verileri döndüren Google Haritalar API'sı Yükseklik 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 Haritalar API API'si için yapılandırdığınız projede, Elevation API'nin Google Cloud Console'da etkinleştirildiğinden emin olun.

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

  1. Google Cloud Console'a gidin.
  2. Proje seçin düğmesini tıklayın, ardından Maps JavaScript API için oluşturduğunuz projeyi seçin ve 'ı tıklayın.
  3. Kontrol Paneli'ndeki API listesinde 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örüntülemek için sayfanın üst kısmından API'Yİ ETKİNLEŞTİR'i seçin. Alternatif olarak sol taraftaki menüden Kitaplık'ı da seçebilirsiniz.
    2. Elevation API'yi arayın, ardından sonuçlar listesinden API'yi seçin.
    3. ETKİNLEŞTİR'i seçin. İşlem tamamlandığında Elevation API, Kontrol Paneli'nde API listesinde görünür.

Fiyatlandırma ve politikalar

Fiyatlandırma

16 Temmuz 2018'den itibaren Haritalar, Rotalar ve Yerler için kullandıkça öde türünde yeni bir fiyatlandırma planı kullanıma sunuldu. JavaScript Yükselti hizmetinin kullanımıyla 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.

Yükseklik İstekleri

Google Haritalar API'sinin harici bir sunucuya çağrıda bulunması gerektiğinden Yükseklik hizmetine erişim eşzamansızdır. Bu nedenle, istek tamamlandıktan sonra yürütülmesi için bir 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 nesnelerinden oluşan bir dizi döndürdüğünü unutmayın.

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

  • getElevationForLocations() yöntemini kullanarak ayrı, bağımsız konumlar için yapılan istekler. Bu yöntem, bir LocationElevationRequest nesnesi kullanılarak bir veya daha fazla konumun listesini geçirir.
  • Bir getElevationAlongPath() yöntemini kullanarak, yol boyunca bir dizi bağlı noktanın rakım bilgisini ister. Bu yöntem, PathElevationRequest nesnesi içindeki sıralı bir yol köşesi kümesi olarak geçer. Yollar boyunca yükseklik isterken, bu yol boyunca kaç örnek almak istediğinizi belirten bir parametre iletmeniz de gerekir.

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

Konum Tırmanma İstekleri

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

{
  locations[]: LatLng
}

locations (gerekli), yeryüzündeki yükseklik verilerinin döndürüleceği konumları tanımlar. Bu parametre LatLng saniyelik bir dizi alır.

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

Örnek Yol Yükselti İ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), yeryüzündeki yükseklik verilerinin döndürüleceği bir yolu tanımlar. path parametresi, iki veya daha fazla LatLng nesneden oluşan dizi kullanarak iki veya daha fazla sıralı {boylam, boylam} çifti tanımlar.
  • samples (zorunlu), rakım verilerinin döndürüleceği yol boyunca örnek noktalarının sayısını belirtir. samples parametresi, belirtilen path öğesini yol boyunca sıralanan bir eşitlikçi nokta grubuna 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ı grubunu belirtir. Yükseklik verilerini köşe noktalarında döndürmek yerine, yol istekleri yol uzunluğu boyunca örneklenir. Burada her örnek birbirinden uç nokta dahil olmak üzere birbirinden uzaktır.

Yükselti Yanıtları

Yükseklik hizmeti her geçerli istek için bir ElevationResult nesnesinin yanı sıra tanımlanan geri çağırma ElevationResult nesnesine geri döner.

Yükselti Durumları

Her yükseklik isteği, geri çağırma işlevi içinde 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 belirten OK
  • Hizmet isteğinin bozuk olduğunu belirten INVALID_REQUEST
  • Talep eden şahsın kotayı aştığını belirten OVER_QUERY_LIMIT
  • Hizmetin isteği tamamlamadığını gösteren REQUEST_DENIED. Geçersiz bir parametre kullanılmış olabilir
  • UNKNOWN_ERROR bilinmeyen bir hata olduğunu gösteriyor

OK için bu durum kodunu inceleyerek geri çağırma işleminizin başarılı olup olmadığını kontrol etmelisiniz.

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 şu öğeleri içerir:

  • Yükseklik verilerinin hesaplandığı konumun location öğesi (LatLng nesnesini içerir). Yol isteklerinde location öğe grubunun yol boyunca örneklenmiş noktaları içereceğini unutmayın.
  • Metre cinsinden konumun rakımını belirten elevation öğesi.
  • Yükseltinin yükseltildiği veri noktaları arasındaki maksimum mesafeyi metre cinsinden belirten resolution değeri. Çözünürlük bilinmiyorsa bu özellik eksik olur. Yükselti verilerinin birden çok nokta iletildiğinde daha kaba (daha büyük resolution değerleri) olacağını unutmayın. Bir noktanın en doğru irtifa değerini elde etmek için nokta bağımsız olarak sorgulanmalıdır.

Yükselti Ö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 Deneyin

Aşağıdaki örnek, bir dizi koordinat verilen bir çoklu çizgi oluşturur ve Google Görselleştirme API'sını kullanarak bu yoldaki irtifa verilerini görüntüler. (Bu API'yi Google Ortak Yükleyici'yi kullanarak yüklemeniz gerekir.) Yükseklik isteği 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 Deneyin