Elevation Service

खास जानकारी

भी देखें

एलिवेशन सेवा, धरती की सतह पर मौजूद जगहों के लिए एलिवेशन डेटा उपलब्ध कराती है. इसमें महासागरीय तल पर मौजूद गहराई वाली जगहें भी शामिल हैं (जिनकी वैल्यू नेगेटिव में होती है). अगर Google के पास, आपकी चुनी गई जगह की ऊंचाई का सटीक डेटा नहीं है, तो सेवा, आस-पास की चार जगहों की ऊंचाई के डेटा का इस्तेमाल करके, अनुमानित वैल्यू दिखाएगी.

ElevationService ऑब्जेक्ट, धरती पर मौजूद जगहों की ऊंचाई का डेटा पाने की क्वेरी के लिए, एक आसान इंटरफ़ेस उपलब्ध कराता है. इसके अलावा, रास्तों के लिए ऊंचाई का सैंपल डेटा भी मांगा जा सकता है. इससे रास्तों के साथ-साथ, बराबर दूरी पर ऊंचाई में होने वाले बदलावों की गणना की जा सकती है. ElevationService ऑब्जेक्ट, Google Maps API की ऊंचाई की जानकारी देने वाली सेवा के साथ कम्यूनिकेट करता है. यह सेवा, ऊंचाई के अनुरोधों को स्वीकार करती है और ऊंचाई का डेटा उपलब्ध कराती है.

ऊंचाई की जानकारी देने वाली सेवा की मदद से, पैदल चलने और साइकल चलाने के लिए ऐप्लिकेशन, मोबाइल की पोज़िशनिंग के लिए ऐप्लिकेशन या कम रिज़ॉल्यूशन वाले सर्वे ऐप्लिकेशन बनाए जा सकते हैं.

शुरू करना

Maps JavaScript API में ऊंचाई की जानकारी देने वाली सेवा का इस्तेमाल करने से पहले, पक्का करें कि Google Cloud Console में, Maps JavaScript API के लिए सेट अप किए गए प्रोजेक्ट में, ऊंचाई की जानकारी देने वाले एपीआई की सुविधा चालू हो.

चालू किए गए एपीआई की सूची देखने के लिए:

  1. Google Cloud Console पर जाएं.
  2. **कोई प्रोजेक्ट चुनें** बटन पर क्लिक करें. इसके बाद, Maps JavaScript API के लिए सेट अप किया गया प्रोजेक्ट चुनें और **खोलें** पर क्लिक करें.
  3. डैशबोर्ड पर मौजूद एपीआई की सूची में, ऊंचाई की जानकारी देने वाला एपीआई ढूंढें.
  4. अगर आपको सूची में एपीआई दिखता है, तो इसका मतलब है कि यह चालू है. अगर सूची में एपीआई नहीं दिखता है, तो इसे चालू करें:
    1. पेज पर सबसे ऊपर, एपीआई चालू करें को चुनकर, लाइब्रेरी टैब दिखाएं. इसके अलावा, बाईं ओर मौजूद साइड मेन्यू से, लाइब्रेरी को चुनें.
    2. ऊंचाई की जानकारी देने वाला एपीआई खोजें. इसके बाद, नतीजों की सूची में से इसे चुनें.
    3. चालू करें को चुनें. प्रोसेस पूरी होने के बाद, डैशबोर्ड पर मौजूद एपीआई की सूची में, ऊंचाई की जानकारी देने वाला एपीआई दिखने लगेगा.

किराये और नीतियां

किराया

JavaScript में ऊंचाई की जानकारी देने वाली सेवा के किराये और इस्तेमाल की नीतियों के बारे में जानने के लिए, ऊंचाई की जानकारी देने वाले एपीआई के इस्तेमाल और बिलिंग के बारे में पढ़ें.

नीतियां

ऊंचाई की जानकारी देने वाली सेवा का इस्तेमाल, ऊंचाई की जानकारी देने वाले एपीआई के लिए बताई गई नीतियों के मुताबिक ही किया जाना चाहिए.

ऊंचाई के अनुरोध

ऊंचाई की जानकारी देने वाली सेवा को एसिंक्रोनस तरीके से ऐक्सेस किया जाता है, क्योंकि Google Maps API को किसी बाहरी सर्वर पर कॉल करना होता है. इसलिए, आपको अनुरोध पूरा होने पर, कॉलबैक तरीका पास करना होगा. इस कॉलबैक तरीके को, नतीजों को प्रोसेस करना चाहिए. ध्यान दें कि ऊंचाई की जानकारी देने वाली सेवा, स्टेटस कोड (ElevationStatus) और अलग-अलग ElevationResult ऑब्जेक्ट की कैटगरी उपलब्ध कराती है.

ElevationService दो तरह के अनुरोधों को मैनेज करता है:

  • अलग-अलग जगहों के लिए अनुरोध. इसके लिए, getElevationForLocations() तरीके का इस्तेमाल किया जाता है. इस तरीके को, LocationElevationRequest ऑब्जेक्ट का इस्तेमाल करके, एक या उससे ज़्यादा जगहों की सूची पास की जाती है.
  • `getElevationAlongPath()` तरीके का इस्तेमाल करके, किसी रास्ते पर मौजूद कनेक्टेड पॉइंट की सीरीज़ के लिए ऊंचाई के अनुरोध. इस तरीके को, `PathElevationRequest` ऑब्जेक्ट में, रास्ते के वर्टिकल पॉइंट का क्रम से सेट पास किया जाता है. रास्तों के लिए ऊंचाई का अनुरोध करते समय, आपको एक पैरामीटर भी पास करना होगा. इससे यह पता चलता है कि आपको उस रास्ते पर कितने सैंपल लेने हैं.

इनमें से हर तरीके को, लौटाए गए ElevationResult और ElevationStatus ऑब्जेक्ट को मैनेज करने के लिए, कॉलबैक तरीका भी पास करना होगा.

जगह की ऊंचाई के अनुरोध

A LocationElevationRequest ऑब्जेक्ट लिटरल में यह फ़ील्ड शामिल होता है:

{
  locations[]: LatLng
}

locations (ज़रूरी है) धरती पर मौजूद उन जगहों को तय करता है जिनकी ऊंचाई का डेटा दिखाना है. यह पैरामीटर, LatLng का कलेक्शन लेता है.

कैटगरी में, एक से ज़्यादा कोऑर्डिनेट पास किए जा सकते हैं. हालांकि, सेवा के कोटे से ज़्यादा कोऑर्डिनेट पास नहीं किए जा सकते. ध्यान दें कि एक से ज़्यादा कोऑर्डिनेट पास करने पर, लौटाए गए डेटा की सटीक जानकारी का रिज़ॉल्यूशन, एक कोऑर्डिनेट के लिए डेटा का अनुरोध करने पर मिलने वाले डेटा के रिज़ॉल्यूशन से कम हो सकता है.

रास्ते की ऊंचाई के सैंपल के अनुरोध

A PathElevationRequest ऑब्जेक्ट लिटरल में ये फ़ील्ड शामिल होते हैं:

{
  path[]: LatLng,
  samples: Number
}

इन फ़ील्ड के बारे में यहां बताया गया है:

  • path (ज़रूरी है) धरती पर मौजूद उस रास्ते को तय करता है जिसके लिए ऊंचाई का डेटा दिखाना है. path पैरामीटर, {latitude,longitude} के दो या उससे ज़्यादा क्रम से सेट तय करता है. इसके लिए, दो या उससे ज़्यादा LatLng ऑब्जेक्ट की कैटगरी का इस्तेमाल किया जाता है.
  • samples (ज़रूरी है) किसी रास्ते पर मौजूद सैंपल पॉइंट की संख्या तय करता है, जिनकी ऊंचाई का डेटा दिखाना है. samples पैरामीटर, दिए गए path को रास्ते पर मौजूद बराबर दूरी वाले पॉइंट के क्रम से सेट में बांटता है.

पोज़िशन के अनुरोधों की तरह, path पैरामीटर अक्षांश और देशांतर की वैल्यू का सेट तय करता है. हालांकि, पोज़िशन के अनुरोध के उलट, path वर्टिकल पॉइंट का क्रम से सेट तय करता है. रास्ते के अनुरोधों में, वर्टिकल पॉइंट की ऊंचाई का डेटा दिखाने के बजाय, रास्ते की लंबाई के हिसाब सेसैंपल लिए जाते हैं. इनमें हर सैंपल, एक-दूसरे से बराबर दूरी पर होता है. इसमें एंडपॉइंट भी शामिल होते हैं.

ऊंचाई के जवाब

हर मान्य अनुरोध के लिए, ऊंचाई की जानकारी देने वाली सेवा, तय किए गए कॉलबैक को ElevationResult ऑब्जेक्ट का सेट और ElevationStatus ऑब्जेक्ट उपलब्ध कराएगी.

ऊंचाई के स्टेटस

ऊंचाई के हर अनुरोध के लिए, कॉलबैक फ़ंक्शन में एक ElevationStatus कोड मिलता है. इस status कोड में इनमें से कोई एक वैल्यू होगी:

  • OK, जिसका मतलब है कि सेवा का अनुरोध स्वीकार कर लिया गया है
  • INVALID_REQUEST जिसका मतलब है कि सेवा का अनुरोध गलत तरीके से किया गया है
  • OVER_QUERY_LIMIT, जिसका मतलब है कि अनुरोध करने वाले व्यक्ति या कंपनी ने कोटे से ज़्यादा अनुरोध किए हैं
  • REQUEST_DENIED, जिसका मतलब है कि सेवा ने अनुरोध पूरा नहीं किया . इसकी वजह, अमान्य पैरामीटर हो सकता है
  • UNKNOWN_ERROR, जिसका मतलब है कि कोई अज्ञात गड़बड़ी हुई है

इस स्टेटस कोड की जांच करके, आपको यह पक्का करना चाहिए कि आपका कॉलबैक काम कर रहा है OK.

ऊंचाई के नतीजे

अनुरोध स्वीकार होने पर, आपके कॉलबैक फ़ंक्शन के results आर्ग्युमेंट में, ElevationResult ऑब्जेक्ट का सेट शामिल होगा. इन ऑब्जेक्ट में ये एलिमेंट शामिल होते हैं:

  • एक location एलिमेंट (जिसमें LatLng ऑब्जेक्ट शामिल होते हैं). यह उस पोज़िशन की जानकारी देता है जिसके लिए ऊंचाई का डेटा कैलकुलेट किया जा रहा है. ध्यान दें कि रास्ते के अनुरोधों के लिए, location एलिमेंट के सेट में, रास्ते पर मौजूद सैंपल पॉइंट शामिल होंगे.
  • एक elevation एलिमेंट, जो मीटर में जगह की ऊंचाई दिखाता है.
  • A resolution वैल्यू, जो मीटर में, उन डेटा पॉइंट के बीच की ज़्यादा से ज़्यादा दूरी दिखाती है जिनसे ऊंचाई का अनुमान लगाया गया है. अगर रिज़ॉल्यूशन की जानकारी नहीं है, तो यह प्रॉपर्टी मौजूद नहीं होगी. ध्यान दें कि एक से ज़्यादा पॉइंट पास करने पर, ऊंचाई का डेटा कम सटीक होता है. ऐसा इसलिए होता है, क्योंकि resolution की वैल्यू ज़्यादा होती है. किसी पॉइंट के लिए ऊंचाई की सबसे सटीक वैल्यू पाने के लिए, उसकी क्वेरी अलग से करनी चाहिए.

ऊंचाई के उदाहरण

यहां दिया गया कोड, मैप पर किए गए क्लिक को ऊंचाई के अनुरोध में बदलता है. इसके लिए, LocationElevationRequest ऑब्जेक्ट का इस्तेमाल किया जाता है:

TypeScript

async function init(): Promise<void> {
    const [{ InfoWindow }, { ElevationService }] = await Promise.all([
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('elevation'),
    ]);

    const mapElement = document.querySelector('gmp-map')!;
    const innerMap = mapElement.innerMap;

    const elevator = new ElevationService();
    const infowindow = new InfoWindow();

    infowindow.open(innerMap);

    // Add a listener for the click event. Display the elevation for the LatLng of
    // the click inside the infowindow.
    innerMap.addListener('click', (event: google.maps.MapMouseEvent) => {
        displayLocationElevation(event.latLng!, elevator, infowindow, innerMap);
    });
}

function displayLocationElevation(
    location: google.maps.LatLng,
    elevator: google.maps.ElevationService,
    infowindow: google.maps.InfoWindow,
    map: google.maps.Map
) {
    // Format numeric values to two decimal places
    const formatter = new Intl.NumberFormat(undefined, {
        maximumFractionDigits: 2,
    });

    // Initiate the location request
    elevator
        .getElevationForLocations({
            locations: [location],
        })
        .then(({ results }) => {
            if (results[0]) {
                const { elevation, location: resultLocation } = results[0];
                infowindow.setPosition(resultLocation);
                infowindow.setContent(
                    `The elevation at ${String(resultLocation)} <br>is ${formatter.format(elevation)} meters.`
                );
            } else {
                infowindow.setPosition(location);
                infowindow.setContent('No results found');
            }

            infowindow.open(map);
        })
        .catch((e: unknown) => {
            infowindow.setContent(
                `Elevation service failed due to: ${String(e)}`
            );
        });
}

void init();

JavaScript

async function init() {
    const [{ InfoWindow }, { ElevationService }] = await Promise.all([
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('elevation'),
    ]);

    const mapElement = document.querySelector('gmp-map');
    const innerMap = mapElement.innerMap;

    const elevator = new ElevationService();
    const infowindow = new InfoWindow();

    infowindow.open(innerMap);

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

function displayLocationElevation(location, elevator, infowindow, map) {
    // Format numeric values to two decimal places
    const formatter = new Intl.NumberFormat(undefined, {
        maximumFractionDigits: 2,
    });

    // Initiate the location request
    elevator
        .getElevationForLocations({
            locations: [location],
        })
        .then(({ results }) => {
            if (results[0]) {
                const { elevation, location: resultLocation } = results[0];
                infowindow.setPosition(resultLocation);
                infowindow.setContent(
                    `The elevation at ${String(resultLocation)} <br>is ${formatter.format(elevation)} meters.`
                );
            } else {
                infowindow.setPosition(location);
                infowindow.setContent('No results found');
            }

            infowindow.open(map);
        })
        .catch((e) => {
            infowindow.setContent(
                `Elevation service failed due to: ${String(e)}`
            );
        });
}

void init();
उदाहरण देखें

यहां दिए गए उदाहरण में, कोऑर्डिनेट के सेट का इस्तेमाल करके, पॉलीलाइन बनाई गई है. साथ ही, Google Visualization API का इस्तेमाल करके, उस रास्ते पर ऊंचाई का डेटा दिखाया गया है. (इस एपीआई को Google Common Loader का इस्तेमाल करके लोड करना होगा.) 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;
उदाहरण देखें