এলিভেশন সার্ভিস

সংক্ষিপ্ত বিবরণ

এলিভেশন পরিষেবাটি পৃথিবীর পৃষ্ঠের বিভিন্ন স্থানের উচ্চতার তথ্য প্রদান করে, যার মধ্যে সমুদ্রতলের গভীরতার স্থানও অন্তর্ভুক্ত (যেখানে ঋণাত্মক মান পাওয়া যায়)। যেসব ক্ষেত্রে আপনার অনুরোধ করা নির্দিষ্ট স্থানে গুগলের কাছে সঠিক উচ্চতার পরিমাপ থাকে না, সেসব ক্ষেত্রে পরিষেবাটি নিকটতম চারটি স্থানের তথ্য ব্যবহার করে একটি গড় মান নির্ণয় করে ফেরত দেয়।

ElevationService অবজেক্টটি আপনাকে পৃথিবীর বিভিন্ন স্থানের উচ্চতার ডেটা জিজ্ঞাসা করার জন্য একটি সহজ ইন্টারফেস প্রদান করে। এছাড়াও, আপনি পথ বরাবর নমুনা করা উচ্চতার ডেটার জন্য অনুরোধ করতে পারেন, যা আপনাকে রুট বরাবর সমদূরত্বে উচ্চতার পরিবর্তন গণনা করার সুযোগ দেয়। ElevationService অবজেক্টটি Google Maps API Elevation Service-এর সাথে যোগাযোগ করে, যা উচ্চতার অনুরোধ গ্রহণ করে এবং উচ্চতার ডেটা ফেরত পাঠায়।

এলিভেশন সার্ভিসের মাধ্যমে আপনি হাইকিং ও বাইকিং অ্যাপ্লিকেশন, মোবাইল পজিশনিং অ্যাপ্লিকেশন, অথবা নিম্ন রেজোলিউশনের জরিপ অ্যাপ্লিকেশন তৈরি করতে পারেন।

শুরু করা হচ্ছে

Maps JavaScript API-তে Elevation সার্ভিস ব্যবহার করার আগে, প্রথমে নিশ্চিত করুন যে Google Cloud কনসোলে, Maps JavaScript API-এর জন্য সেট আপ করা একই প্রজেক্টে Elevation API সক্রিয় করা আছে।

আপনার সক্রিয় API-গুলির তালিকা দেখতে:

  1. গুগল ক্লাউড কনসোলে যান।
  2. 'Select a project' বোতামে ক্লিক করুন, তারপর আপনি Maps JavaScript API-এর জন্য যে প্রজেক্টটি সেট আপ করেছিলেন সেটিই নির্বাচন করুন এবং 'Open'-এ ক্লিক করুন।
  3. ড্যাশবোর্ডে থাকা API-গুলোর তালিকা থেকে Elevation API খুঁজুন।
  4. যদি আপনি তালিকায় API-টি দেখতে পান, তাহলে আপনার কাজ হয়ে গেছে। যদি API-টি তালিকায় না থাকে, তবে এটি সক্রিয় করুন:
    1. পৃষ্ঠার শীর্ষে, লাইব্রেরি ট্যাবটি প্রদর্শন করতে ‘এপিআই সক্ষম করুন’ (ENABLE API) নির্বাচন করুন। বিকল্পভাবে, বাম দিকের মেনু থেকে ‘লাইব্রেরি’ (Library ) নির্বাচন করুন।
    2. Elevation API অনুসন্ধান করুন, তারপর ফলাফলের তালিকা থেকে এটি নির্বাচন করুন।
    3. ENABLE নির্বাচন করুন। প্রক্রিয়াটি শেষ হলে, ড্যাশবোর্ডের API-এর তালিকায় Elevation API দেখা যাবে।

মূল্য নির্ধারণ এবং নীতিমালা

মূল্য নির্ধারণ

জাভাস্ক্রিপ্ট এলিভেশন পরিষেবার মূল্য নির্ধারণ এবং ব্যবহার নীতি সম্পর্কে জানতে, এলিভেশন এপিআই-এর ব্যবহার ও বিলিং দেখুন।

নীতিমালা

এলিভেশন পরিষেবাটির ব্যবহার অবশ্যই এলিভেশন এপিআই (Elevation API)-এর জন্য বর্ণিত নীতিমালা অনুযায়ী হতে হবে।

উচ্চতা অনুরোধ

এলিভেশন সার্ভিস অ্যাক্সেস করা অ্যাসিঙ্ক্রোনাস, কারণ গুগল ম্যাপস এপিআই-কে একটি এক্সটার্নাল সার্ভারে কল করতে হয়। এই কারণে, রিকোয়েস্টটি সম্পন্ন হওয়ার পর এক্সিকিউট করার জন্য আপনাকে একটি কলব্যাক মেথড পাস করতে হবে। এই কলব্যাক মেথডটির কাজ হলো রেজাল্ট(গুলো) প্রসেস করা। উল্লেখ্য যে, এলিভেশন সার্ভিস একটি স্ট্যাটাস কোড ( ElevationStatus ) এবং আলাদা ElevationResult অবজেক্টের একটি অ্যারে রিটার্ন করে।

ElevationService দুই ধরনের অনুরোধ পরিচালনা করে:

  • getElevationForLocations() মেথড ব্যবহার করে পৃথক, স্বতন্ত্র অবস্থানের জন্য অনুরোধ করা হয়, যেখানে LocationElevationRequest অবজেক্টের মাধ্যমে এক বা একাধিক অবস্থানের একটি তালিকা পাস করা হয়।
  • getElevationAlongPath() মেথড ব্যবহার করে একটি পথ বরাবর একাধিক সংযুক্ত বিন্দুর উচ্চতার জন্য অনুরোধ করা হয়, যেখানে একটি PathElevationRequest অবজেক্টের মধ্যে থাকা পথের শীর্ষবিন্দুগুলোর একটি ক্রমবদ্ধ সেট পাস করা হয়। পথ বরাবর উচ্চতার জন্য অনুরোধ করার সময়, আপনাকে অবশ্যই একটি প্যারামিটারও পাস করতে হবে যা নির্দেশ করে যে আপনি সেই পথ বরাবর কতগুলো স্যাম্পল নিতে চান।

এই প্রতিটি মেথডের সাথে অবশ্যই একটি কলব্যাক মেথডও পাস করতে হবে, যা ফেরত আসা ElevationResult এবং ElevationStatus অবজেক্টগুলোকে পরিচালনা করবে।

অবস্থান উচ্চতা অনুরোধ

একটি LocationElevationRequest অবজেক্ট লিটারেল-এ নিম্নলিখিত ফিল্ডটি থাকে:

{
  locations[]: LatLng
}

locations (আবশ্যক) পৃথিবীর সেই অবস্থান(গুলি) নির্ধারণ করে যেখান থেকে উচ্চতার ডেটা ফেরত দেওয়া হবে। এই প্যারামিটারটি LatLng এর একটি অ্যারে গ্রহণ করে।

আপনি একটি অ্যারের মধ্যে যেকোনো সংখ্যক স্থানাঙ্ক পাঠাতে পারেন, যতক্ষণ পর্যন্ত পরিষেবার কোটা অতিক্রম না করেন। মনে রাখবেন যে, একাধিক স্থানাঙ্ক পাঠানোর ক্ষেত্রে, ফেরত আসা ডেটার নির্ভুলতা একটিমাত্র স্থানাঙ্কের জন্য ডেটা অনুরোধ করার চেয়ে কম হতে পারে।

নমুনা করা পথের উচ্চতা অনুরোধ

একটি PathElevationRequest অবজেক্ট লিটারেল-এ নিম্নলিখিত ফিল্ডগুলো থাকে:

{
  path[]: LatLng,
  samples: Number
}

এই ক্ষেত্রগুলো নিচে ব্যাখ্যা করা হলো:

  • path (আবশ্যক) পৃথিবীর উপর এমন একটি পথ নির্ধারণ করে যার জন্য উচ্চতার ডেটা ফেরত দেওয়া হবে। path প্যারামিটারটি দুই বা ততোধিক 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 উপাদান যা কোনো স্থানের উচ্চতা মিটারে প্রকাশ করে।
  • একটি resolution মান, যা মিটারে পরিমাপ করা হয় এবং যা নির্দেশ করে যে কোন ডেটা পয়েন্ট থেকে উচ্চতা ইন্টারপোলেট করা হয়েছে। রেজোলিউশন জানা না থাকলে এই বৈশিষ্ট্যটি অনুপস্থিত থাকবে। মনে রাখবেন যে, একাধিক পয়েন্ট পাস করা হলে উচ্চতার ডেটা আরও স্থূল (বৃহত্তর resolution মান) হয়ে যায়। কোনো একটি পয়েন্টের জন্য সবচেয়ে সঠিক উচ্চতার মান পেতে হলে, সেটিকে স্বাধীনভাবে কোয়েরি করা উচিত।

উচ্চতার উদাহরণ

নিম্নলিখিত কোডটি LocationElevationRequest অবজেক্ট ব্যবহার করে ম্যাপের উপর একটি ক্লিককে উচ্চতার অনুরোধে রূপান্তরিত করে:

টাইপস্ক্রিপ্ট

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();

জাভাস্ক্রিপ্ট

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 ব্যবহার করে একটি উচ্চতার অনুরোধ তৈরি করা হয়:

টাইপস্ক্রিপ্ট

// 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;

জাভাস্ক্রিপ্ট

// 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;
উদাহরণ দেখুন