বিমানবন্দরে উন্নত ন্যাভিগেশন, বিমানবন্দরে উন্নত নেভিগেশন

চিত্র

বিমানবন্দরগুলি বৃহৎ, বহু-টার্মিনাল কমপ্লেক্স এবং সময়মত আগমন এবং প্রস্থানের জন্য সুনির্দিষ্ট নেভিগেশন অত্যন্ত গুরুত্বপূর্ণ। গুগল ম্যাপস জিওকোডিং এপিআই সাধারণত একটি স্থানাঙ্ক (অক্ষাংশ/দ্রাঘিমাংশ) প্রদান করে যা বেশিরভাগ ক্ষেত্রেই বৃহৎ বিমানবন্দর কমপ্লেক্সের কেন্দ্রবিন্দু হবে। এই অ্যাপটি একটি ইন্টারেক্টিভ টুল যা ব্যবহারকারীদের একটি বৃহত্তর জটিল স্থান যেমন নির্দিষ্ট টার্মিনাল বা বিমানবন্দরের মধ্যে পিকআপ/ড্রপ-অফ পয়েন্টের মধ্যে সুনির্দিষ্ট অবস্থানগুলি চিহ্নিত করতে এবং কল্পনা করতে সহায়তা করার জন্য বিশেষভাবে ডিজাইন করা হয়েছে।

চিত্র

এটি কীভাবে এটি অর্জন করে তা এখানে:

বিমানবন্দর/স্থান অনুসন্ধান : ব্যবহারকারীরা Google Places Autocomplete ইনপুট ব্যবহার করে একটি প্রধান অবস্থান (যেমন, "ইন্দিরা গান্ধী আন্তর্জাতিক বিমানবন্দর") অনুসন্ধান করে শুরু করেন, যা কেবলমাত্র ভারতেই সীমাবদ্ধ।

সাব-লোকেশন ডিসকভারি : একবার একটি প্রাথমিক লোকেশন নির্বাচন করা হয়ে গেলে, স্ক্রিপ্টটি বিশদ তথ্য সংগ্রহের জন্য Google Places API ব্যবহার করে, গুরুত্বপূর্ণভাবে সেই জায়গার সাথে সম্পর্কিত যেকোনো তালিকাভুক্ত "সাব-গন্তব্য" (যেমন টার্মিনাল ১, টার্মিনাল ৩, নির্দিষ্ট গেট ইত্যাদি, যদি গুগলের ডেটাতে পাওয়া যায়) অন্তর্ভুক্ত করে।

ভিজ্যুয়াল ম্যাপিং : স্ক্রিপ্টটি জিওকোডিং API ব্যবহার করে মূল অবস্থান এবং এর উপ-গন্তব্যস্থলের স্থানাঙ্ক খুঁজে বের করে।

এরপর এটি মূল অবস্থান প্রদর্শন করে এবং প্রতিটি চিহ্নিত উপ-গন্তব্যের জন্য মানচিত্রে স্বতন্ত্র, ক্লিকযোগ্য মার্কার (নীল বৃত্ত) স্থাপন করে।

সঠিক শনাক্তকরণ : একটি উপ-গন্তব্য চিহ্নিতকারীতে ক্লিক করলে এটি হাইলাইট হয় (সবুজ হয়ে যায়) এবং একটি InfoWindow খোলে যেখানে এর নাম এবং অন্যান্য উপলব্ধ বিবরণ (যেমন ঠিকানা বা প্রকার) দেখানো হয়, যা ব্যবহারকারীকে নিশ্চিত করতে দেয় যে তারা সঠিক নির্দিষ্ট বিন্দু নির্বাচন করেছে। প্রসঙ্গগত দৃশ্য : সমস্ত প্রাসঙ্গিক চিহ্নিতকারী (প্রধান অবস্থান + উপ-গন্তব্য) স্পষ্টভাবে দৃশ্যমান কিনা তা যাচাই করার জন্য মানচিত্রটি স্বয়ংক্রিয়ভাবে তার দৃশ্য ( fitBounds ) সামঞ্জস্য করে।

বিমানবন্দর নেভিগেশন অ্যাপে গুগল ম্যাপস প্ল্যাটফর্ম এপিআই

এই ডকুমেন্টটি "নেভিগেট টু এয়ারপোর্ট" ডেমো অ্যাপ্লিকেশনে ব্যবহৃত মূল গুগল ম্যাপস প্ল্যাটফর্ম এপিআই এবং তাদের প্যারামিটারগুলি ব্যাখ্যা করে। অ্যাপটি মানচিত্র প্রদর্শন, স্থান অনুসন্ধান, বিস্তারিত স্থান তথ্য এবং উন্নত অবস্থান অন্তর্দৃষ্টি প্রদানের জন্য বিভিন্ন পরিষেবা ব্যবহার করে।

1. মানচিত্রের সূচনা এবং প্রদর্শন

অ্যাপ্লিকেশনটির ভিত্তি হল ইন্টারেক্টিভ মানচিত্র।

  • ব্যবহৃত API: google.maps.Map (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ওয়েবপেজে ইন্টারেক্টিভ মানচিত্র তৈরি এবং প্রদর্শন করা।
  • মূল পরামিতি:
    • center : মানচিত্রের প্রাথমিক ভৌগোলিক কেন্দ্র নির্ধারণ করে। এই অ্যাপে, এটি প্রাথমিকভাবে দিল্লির স্থানাঙ্কে সেট করা আছে ( { lat: 28.461835685621395, lng: 77.05004035761647 } )।
    • zoom : মানচিত্রের প্রাথমিক জুম স্তর সেট করে। ক্লোজ-আপ দেখার জন্য DEFAULT_ZOOM_LEVEL (15) ব্যবহার করা হয়।
    • mapId : গুগল ক্লাউড কনসোলে কনফিগার করা একটি মানচিত্র শৈলীর জন্য একটি অনন্য শনাক্তকারী।

2. স্থান অনুসন্ধান এবং স্বয়ংসম্পূর্ণ

অনুসন্ধান বারের কার্যকারিতা প্লেস API দ্বারা চালিত।

  • ব্যবহৃত API: google.maps.places.Autocomplete (ম্যাপস জাভাস্ক্রিপ্ট API-এর প্লেস লাইব্রেরি থেকে)
  • উদ্দেশ্য: ব্যবহারকারী টাইপ করার সাথে সাথে ভৌগোলিক অনুসন্ধানের জন্য ভবিষ্যদ্বাণীমূলক পাঠ্য সমাপ্তি প্রদান করে, বিমানবন্দরের মতো প্রাসঙ্গিক স্থানগুলির পরামর্শ দেয়।
  • মূল পরামিতি:
    • input : HTML ইনপুট উপাদান ( #search-input ) যেখানে ব্যবহারকারী তাদের কোয়েরি টাইপ করে।
    • componentRestrictions : একটি নির্দিষ্ট দেশে অনুসন্ধান ফলাফল ফিল্টার করে। এখানে, { country: 'in' } ফলাফল ভারতে সীমাবদ্ধ করে।
    • fields : নির্বাচিত স্থানের জন্য ফেরত পাঠানো ডেটা ক্ষেত্রগুলি নির্দিষ্ট করে। ['place_id'] প্রাথমিকভাবে স্থানের জন্য শুধুমাত্র অনন্য শনাক্তকারী পুনরুদ্ধার করতে ব্যবহৃত হয়, যা ডেটা স্থানান্তরকে অপ্টিমাইজ করে।
  • কিভাবে অটোকমপ্লিট ব্যবহার করবেন
    // Initialize Autocomplete
    const autocomplete = new google.maps.places.Autocomplete(input, {
      componentRestrictions: { country: 'in' },
      fields: ['place_id'],
    });

    // Add listener to the Autocomplete
    autocomplete.addListener('place_changed', async () => {
      const place = autocomplete.getPlace();
      if (!place.place_id) {
        return;
      }
      // Once a place is selected, fetch details
      await getPlaceDetails(place.place_id);
    });

৩. স্থানের বিস্তারিত তথ্য সংগ্রহ এবং উপ-গন্তব্যস্থল পরিচালনা

স্বয়ংক্রিয়ভাবে সম্পন্ন হওয়া পরামর্শ থেকে একবার কোনও স্থান নির্বাচন করা হলে, আরও বিস্তৃত বিবরণ সংগ্রহ করা হবে।

  • ব্যবহৃত API: Places API ( https://places.googleapis.com/v1/places/{placeId} এ সরাসরি fetch কলের মাধ্যমে)
  • উদ্দেশ্য: একটি নির্দিষ্ট স্থান সম্পর্কে সমৃদ্ধ বিবরণ পুনরুদ্ধার করা, যার মধ্যে রয়েছে এর প্রদর্শন নাম, ঠিকানা, প্রকার এবং গুরুত্বপূর্ণভাবে, এর subDestinations (যেমন, পৃথক টার্মিনাল বা বিমানবন্দরের মতো বৃহত্তর কমপ্লেক্সের মধ্যে গুরুত্বপূর্ণ এলাকা)।
  • URL-এর মূল পরামিতি:
    1. {placeId} : নির্বাচিত স্থানের অনন্য শনাক্তকারী।
    2. fields : সঠিক তথ্য ক্ষেত্রগুলি নির্দিষ্ট করে যা পুনরুদ্ধার করা হবে। অ্যাপটি id , displayName , subDestinations , types এবং formattedAddress অনুরোধ করে। খরচ নিয়ন্ত্রণ এবং শুধুমাত্র প্রয়োজনীয় তথ্য গ্রহণের জন্য এটি অত্যন্ত গুরুত্বপূর্ণ।
  • subDestinations কীভাবে একটি অবস্থান দেওয়া যায়
async function getPlaceDetails(placeId) {
  // Construct the URL for the Places API (v1) details endpoint
  // The 'fields' parameter is crucial for requesting subDestinations
  const url = `https://places.googleapis.com/v1/places/${placeId}?key=YOUR_API_KEY&fields=id,displayName,subDestinations,types,formattedAddress`;

  const response = await fetch(url);
  const data = await response.json();

  // Accessing subDestinations from the Places API response
  if (data.subDestinations && data.subDestinations.length > 0) {
    for (const subDestination of data.subDestinations) {
      // Each subDestination object contains an 'id' and 'displayName'
      console.log(`Sub-destination ID: ${subDestination.id}`);
      console.log(`Sub-destination Name: ${subDestination.displayName?.text}`);
      // This subDestination.id is then used in a geocoding call (as shown in section 4)
    }
  }
}

**Handling `subDestinations`:** When the Places API returns
`subDestinations`, the application initiates a process for each one:
1.  **Geocoding:** It uses the `google.maps.Geocoder` to convert
    each `subDestination.id` into its precise geographical coordinates
    (`lat`, `lng`).
1.  **Marker Placement:** A distinct marker is added to the map for
    each sub-destination. These markers are styled with a blue circle icon
    to differentiate them.
1.  **Map Bounds Adjustment:** The `google.maps.LatLngBounds` object
    is used to dynamically expand the map's view to encompass all retrieved
    sub-destinations, verifying they are all visible within the current map
    frame.
1.  **Interactive Information Window:** A `click` listener is
    attached to each sub-destination marker. When clicked, the marker's
    icon changes to green, and an `InfoWindow` appears, displaying the
    sub-destination's name, address, and types. This provides immediate,
    detailed context to the user.

৪. জিওকোডিং এবং রিভার্স জিওকোডিং: উপ-গন্তব্যের জন্য বিশদ তথ্য সংগ্রহ করা

অ্যাপ্লিকেশনটি দুটি প্রধান উদ্দেশ্যে জিওকোডিং ব্যবহার করে: স্থান আইডিগুলিকে স্থানাঙ্কে রূপান্তর করা এবং স্থানাঙ্কগুলিকে অবস্থানের বিবরণে রূপান্তর করা। এই বিভাগটি বিশেষভাবে তুলে ধরে যে কীভাবে উপ-গন্তব্য সম্পর্কে বিস্তারিত তথ্য পেতে জিওকোডিং ব্যবহার করা হয়।

  • ব্যবহৃত API: google.maps.Geocoder (ম্যাপস জাভাস্ক্রিপ্ট API থেকে) এবং জিওকোডিং API ( https://maps.googleapis.com/maps/api/geocode/json এ সরাসরি fetch কলের মাধ্যমে)
  • উদ্দেশ্য:
    • google.maps.Geocoder : একটি placeId (Autocomplete অথবা Places API থেকে প্রাপ্ত) কে ভৌগোলিক স্থানাঙ্ক ( lat , lng ) এবং একটি ভিউপোর্টে রূপান্তর করতে ব্যবহৃত হয়, যা মানচিত্রটিকে নির্বাচিত স্থান এবং এর উপ-গন্তব্যস্থলগুলিকে সঠিকভাবে কেন্দ্রীভূত এবং জুম করার অনুমতি দেয়।
    • জিওকোডিং এপিআই ( fetch ): রিভার্স জিওকোডিং (অক্ষাংশ এবং দ্রাঘিমাংশকে মানুষের পঠনযোগ্য ঠিকানায় রূপান্তর) এবং বিল্ডিং আউটলাইন এবং নেভিগেশন পয়েন্টের মতো উন্নত অবস্থান ডেটা পুনরুদ্ধারের জন্য ব্যবহৃত হয়।
  • মূল পরামিতি:
    • google.maps.Geocoder.geocode() :
      • placeId : জিওকোড করার জন্য স্থান আইডি।
      • location : বিপরীত জিওকোডিংয়ের জন্য LatLng অবজেক্ট।
    • জিওকোডিং এপিআই কল fetch :
      • latlng : বিপরীত জিওকোডিংয়ের জন্য অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক।
      • extra_computations=BUILDING_AND_ENTRANCES : এই গুরুত্বপূর্ণ প্যারামিটারটি অতিরিক্ত ডেটা অনুরোধ করে, বিশেষ করে ভবনের পদচিহ্ন এবং প্রবেশপথের তথ্য, যা পরবর্তীতে ভবনের রূপরেখা এবং নেভিগেশন পয়েন্ট প্রদর্শন করতে ব্যবহৃত হয়।

আরও বিশদ (যেমন, অবস্থান, ফর্ম্যাট করা ঠিকানা, প্রকার) আনতে subDestination আইডি কীভাবে ব্যবহার করবেন

function geocodeAndAddMarker(subDestination, bounds) {
  return new Promise((resolve, reject) => {
    const geocoder = new google.maps.Geocoder();
    // Using the subDestination.id to geocode and get location details
    geocoder.geocode({ placeId: subDestination.id }, (results, status) => {
      if (status === "OK" && results[0]) {
        const location = results[0].geometry.location;
        const displayName = subDestination.displayName?.text || "Sub-destination";
        const formattedAddress = results[0].formatted_address; // Further detail from Geocoding
        const types = results[0].types; // Further detail from Geocoding

        const marker = new google.maps.Marker({
          map: map,
          position: location,
          title: displayName,
          icon: {
            path: google.maps.SymbolPath.CIRCLE,
            fillColor: 'blue',
            fillOpacity: 0.6,
            strokeWeight: 0,
            scale: 8
          }
        });

        marker.addListener('click', () => {
          marker.setIcon({
            path: google.maps.SymbolPath.CIRCLE,
            fillColor: 'green',
            fillOpacity: 0.6,
            strokeWeight: 0,
            scale: 8
          });
          const infowindow = new google.maps.InfoWindow({
            content: `<b>${displayName}</b><br><p>Address: ${formattedAddress}</p><p>Types: ${types.join(', ')}</p>`,
          });
          infowindow.open(map, marker);
        });
        bounds.extend(location);
        resolve(true);
      } else {
        reject(new Error(`Geocoding failed for placeId: ${subDestination.id}`));
      }
    });
  });
}

৫. মার্কার প্রদর্শন করা

মানচিত্রে নির্দিষ্ট স্থানগুলি হাইলাইট করার জন্য মার্কার ব্যবহার করা হয়।

  • ব্যবহৃত API: google.maps.Marker (Maps JavaScript API থেকে) এবং google.maps.marker.AdvancedMarkerElement google.maps.marker.PinElement সহ (Maps JavaScript API এর মার্কার লাইব্রেরি থেকে)
  • উদ্দেশ্য:
    • google.maps.Marker : প্রাথমিক ড্র্যাগেবল মার্কার (যদিও প্রদত্ত কোডে draggable false হিসেবে সেট করা আছে, এটি এর ক্ষমতার অংশ) এবং বিভাগ 3-এ বর্ণিত মৌলিক সাব-ডেস্টিনেশন মার্কারগুলির জন্য ব্যবহৃত হয়।
    • AdvancedMarkerElement এবং PinElement : আরও দৃশ্যমানভাবে স্বতন্ত্র নেভিগেশন পয়েন্ট মার্কারগুলির জন্য ব্যবহৃত হয়, যা মার্কারের পিনের কাস্টম স্টাইলিং করার অনুমতি দেয়।
  • মূল পরামিতি:
    • position : LatLng স্থানাঙ্ক করে যেখানে মার্কারটি স্থাপন করা হবে।
    • map : যে মানচিত্রের উদাহরণে মার্কারটি প্রদর্শিত হবে।
    • title : মার্কারের উপর ঘোরালে টেক্সট প্রদর্শিত হবে।
    • icon : google.maps.Marker এর জন্য কাস্টম আইকনগুলিকে অনুমতি দেয় (যেমন, কাস্টম রঙের সাথে google.maps.SymbolPath.CIRCLE )।
    • content : AdvancedMarkerElement এর জন্য, এটি কাস্টম HTML কন্টেন্ট এম্বেড করার অনুমতি দেয়, যার মধ্যে প্রি-স্টাইল করা পিনের জন্য PinElement ও রয়েছে।
    • PinElement প্যারামিটার: background , borderColor , glyphColor , ভিজ্যুয়াল কাস্টমাইজেশনের জন্য scale

৬. ভবনের রূপরেখা প্রদর্শন করা

অ্যাপ্লিকেশনটি ভবনের পদচিহ্ন দৃশ্যত উপস্থাপন করতে পারে।

  • ব্যবহৃত API: google.maps.Data (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ভৌগোলিক তথ্য প্রদর্শন করা, যেমন বিল্ডিং আউটলাইন (Geocoding API এর extra_computations থেকে GeoJSON display_polygon হিসাবে ফিরে এসেছে)।
  • মূল পরামিতি:
    • map : যে মানচিত্রের উদাহরণে ডেটা স্তর প্রয়োগ করা হয়।
    • style : GeoJSON বৈশিষ্ট্যগুলির (যেমন, strokeColor , fillColor , fillOpacity ) ভিজ্যুয়াল চেহারা নির্ধারণ করে।
    • addGeoJson() : লেয়ারে GeoJSON ডেটা যোগ করার পদ্ধতি।

৭. মানচিত্রের সীমানা এবং জুম

মানচিত্রের দৃশ্য যাচাই করা সমস্ত প্রাসঙ্গিক অবস্থানকে অন্তর্ভুক্ত করে।

  • ব্যবহৃত API: google.maps.LatLngBounds (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ভৌগোলিক বিন্দুর (যেমন, প্রধান স্থান এবং এর সমস্ত উপ-গন্তব্য) সংগ্রহের সাথে মানানসই করে মানচিত্রের ভিউপোর্টকে গতিশীলভাবে সামঞ্জস্য করা।
  • মূল পদ্ধতি:
    • extend(location) : সীমানায় একটি LatLng বিন্দু যোগ করে, প্রয়োজনে সেগুলিকে প্রসারিত করে।
    • fitBounds(bounds) : LatLngBounds অবজেক্ট দ্বারা সংজ্ঞায়িত সমগ্র এলাকা প্রদর্শনের জন্য মানচিত্রের কেন্দ্র এবং জুম স্তর সামঞ্জস্য করে।

এই গুগল ম্যাপস প্ল্যাটফর্ম এপিআইগুলিকে একত্রিত করে, অ্যাপ্লিকেশনটি স্থান অনুসন্ধান, তাদের বিশদ বিবরণ দেখার এবং উপ-গন্তব্য এবং বিল্ডিং রূপরেখার মতো সম্পর্কিত ভৌগোলিক তথ্য কল্পনা করার জন্য একটি বিস্তৃত এবং ইন্টারেক্টিভ অভিজ্ঞতা প্রদান করে।

বাস্তবায়নের বিবেচ্য বিষয়গুলি মনে রাখবেন যে এটি সমস্ত বিমানবন্দর এলাকায় কাজ করে না এবং এটি (বিমানবন্দর টার্মিনাল) ডেটা প্রাপ্যতার উপর নির্ভর করে।

রিসোর্স জিওকোডিং এপিআই প্লেস এপিআই ম্যাপস জাভাস্ক্রিপ্ট এপিআই

লেখক:

,

চিত্র

বিমানবন্দরগুলি বৃহৎ, বহু-টার্মিনাল কমপ্লেক্স এবং সময়মত আগমন এবং প্রস্থানের জন্য সুনির্দিষ্ট নেভিগেশন অত্যন্ত গুরুত্বপূর্ণ। গুগল ম্যাপস জিওকোডিং এপিআই সাধারণত একটি স্থানাঙ্ক (অক্ষাংশ/দ্রাঘিমাংশ) প্রদান করে যা বেশিরভাগ ক্ষেত্রেই বৃহৎ বিমানবন্দর কমপ্লেক্সের কেন্দ্রবিন্দু হবে। এই অ্যাপটি একটি ইন্টারেক্টিভ টুল যা ব্যবহারকারীদের একটি বৃহত্তর জটিল স্থান যেমন নির্দিষ্ট টার্মিনাল বা বিমানবন্দরের মধ্যে পিকআপ/ড্রপ-অফ পয়েন্টের মধ্যে সুনির্দিষ্ট অবস্থানগুলি চিহ্নিত করতে এবং কল্পনা করতে সহায়তা করার জন্য বিশেষভাবে ডিজাইন করা হয়েছে।

চিত্র

এটি কীভাবে এটি অর্জন করে তা এখানে:

বিমানবন্দর/স্থান অনুসন্ধান : ব্যবহারকারীরা Google Places Autocomplete ইনপুট ব্যবহার করে একটি প্রধান অবস্থান (যেমন, "ইন্দিরা গান্ধী আন্তর্জাতিক বিমানবন্দর") অনুসন্ধান করে শুরু করেন, যা কেবলমাত্র ভারতেই সীমাবদ্ধ।

সাব-লোকেশন ডিসকভারি : একবার একটি প্রাথমিক লোকেশন নির্বাচন করা হয়ে গেলে, স্ক্রিপ্টটি বিশদ তথ্য সংগ্রহের জন্য Google Places API ব্যবহার করে, গুরুত্বপূর্ণভাবে সেই জায়গার সাথে সম্পর্কিত যেকোনো তালিকাভুক্ত "সাব-গন্তব্য" (যেমন টার্মিনাল ১, টার্মিনাল ৩, নির্দিষ্ট গেট ইত্যাদি, যদি গুগলের ডেটাতে পাওয়া যায়) অন্তর্ভুক্ত করে।

ভিজ্যুয়াল ম্যাপিং : স্ক্রিপ্টটি জিওকোডিং API ব্যবহার করে মূল অবস্থান এবং এর উপ-গন্তব্যস্থলের স্থানাঙ্ক খুঁজে বের করে।

এরপর এটি মূল অবস্থান প্রদর্শন করে এবং প্রতিটি চিহ্নিত উপ-গন্তব্যের জন্য মানচিত্রে স্বতন্ত্র, ক্লিকযোগ্য মার্কার (নীল বৃত্ত) স্থাপন করে।

সঠিক শনাক্তকরণ : একটি উপ-গন্তব্য চিহ্নিতকারীতে ক্লিক করলে এটি হাইলাইট হয় (সবুজ হয়ে যায়) এবং একটি InfoWindow খোলে যেখানে এর নাম এবং অন্যান্য উপলব্ধ বিবরণ (যেমন ঠিকানা বা প্রকার) দেখানো হয়, যা ব্যবহারকারীকে নিশ্চিত করতে দেয় যে তারা সঠিক নির্দিষ্ট বিন্দু নির্বাচন করেছে। প্রসঙ্গগত দৃশ্য : সমস্ত প্রাসঙ্গিক চিহ্নিতকারী (প্রধান অবস্থান + উপ-গন্তব্য) স্পষ্টভাবে দৃশ্যমান কিনা তা যাচাই করার জন্য মানচিত্রটি স্বয়ংক্রিয়ভাবে তার দৃশ্য ( fitBounds ) সামঞ্জস্য করে।

বিমানবন্দর নেভিগেশন অ্যাপে গুগল ম্যাপস প্ল্যাটফর্ম এপিআই

এই ডকুমেন্টটি "নেভিগেট টু এয়ারপোর্ট" ডেমো অ্যাপ্লিকেশনে ব্যবহৃত মূল গুগল ম্যাপস প্ল্যাটফর্ম এপিআই এবং তাদের প্যারামিটারগুলি ব্যাখ্যা করে। অ্যাপটি মানচিত্র প্রদর্শন, স্থান অনুসন্ধান, বিস্তারিত স্থান তথ্য এবং উন্নত অবস্থান অন্তর্দৃষ্টি প্রদানের জন্য বিভিন্ন পরিষেবা ব্যবহার করে।

1. মানচিত্রের সূচনা এবং প্রদর্শন

অ্যাপ্লিকেশনটির ভিত্তি হল ইন্টারেক্টিভ মানচিত্র।

  • ব্যবহৃত API: google.maps.Map (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ওয়েবপেজে ইন্টারেক্টিভ মানচিত্র তৈরি এবং প্রদর্শন করা।
  • মূল পরামিতি:
    • center : মানচিত্রের প্রাথমিক ভৌগোলিক কেন্দ্র নির্ধারণ করে। এই অ্যাপে, এটি প্রাথমিকভাবে দিল্লির স্থানাঙ্কে সেট করা আছে ( { lat: 28.461835685621395, lng: 77.05004035761647 } )।
    • zoom : মানচিত্রের প্রাথমিক জুম স্তর সেট করে। ক্লোজ-আপ দেখার জন্য DEFAULT_ZOOM_LEVEL (15) ব্যবহার করা হয়।
    • mapId : গুগল ক্লাউড কনসোলে কনফিগার করা একটি মানচিত্র শৈলীর জন্য একটি অনন্য শনাক্তকারী।

2. স্থান অনুসন্ধান এবং স্বয়ংসম্পূর্ণ

অনুসন্ধান বারের কার্যকারিতা প্লেস API দ্বারা চালিত।

  • ব্যবহৃত API: google.maps.places.Autocomplete (ম্যাপস জাভাস্ক্রিপ্ট API-এর প্লেস লাইব্রেরি থেকে)
  • উদ্দেশ্য: ব্যবহারকারী টাইপ করার সাথে সাথে ভৌগোলিক অনুসন্ধানের জন্য ভবিষ্যদ্বাণীমূলক পাঠ্য সমাপ্তি প্রদান করে, বিমানবন্দরের মতো প্রাসঙ্গিক স্থানগুলির পরামর্শ দেয়।
  • মূল পরামিতি:
    • input : HTML ইনপুট উপাদান ( #search-input ) যেখানে ব্যবহারকারী তাদের কোয়েরি টাইপ করে।
    • componentRestrictions : একটি নির্দিষ্ট দেশে অনুসন্ধান ফলাফল ফিল্টার করে। এখানে, { country: 'in' } ফলাফল ভারতে সীমাবদ্ধ করে।
    • fields : নির্বাচিত স্থানের জন্য ফেরত পাঠানো ডেটা ক্ষেত্রগুলি নির্দিষ্ট করে। ['place_id'] প্রাথমিকভাবে স্থানের জন্য শুধুমাত্র অনন্য শনাক্তকারী পুনরুদ্ধার করতে ব্যবহৃত হয়, যা ডেটা স্থানান্তরকে অপ্টিমাইজ করে।
  • কিভাবে অটোকমপ্লিট ব্যবহার করবেন
    // Initialize Autocomplete
    const autocomplete = new google.maps.places.Autocomplete(input, {
      componentRestrictions: { country: 'in' },
      fields: ['place_id'],
    });

    // Add listener to the Autocomplete
    autocomplete.addListener('place_changed', async () => {
      const place = autocomplete.getPlace();
      if (!place.place_id) {
        return;
      }
      // Once a place is selected, fetch details
      await getPlaceDetails(place.place_id);
    });

৩. স্থানের বিস্তারিত তথ্য সংগ্রহ এবং উপ-গন্তব্যস্থল পরিচালনা

স্বয়ংক্রিয়ভাবে সম্পন্ন হওয়া পরামর্শ থেকে একবার কোনও স্থান নির্বাচন করা হলে, আরও বিস্তৃত বিবরণ সংগ্রহ করা হবে।

  • ব্যবহৃত API: Places API ( https://places.googleapis.com/v1/places/{placeId} এ সরাসরি fetch কলের মাধ্যমে)
  • উদ্দেশ্য: একটি নির্দিষ্ট স্থান সম্পর্কে সমৃদ্ধ বিবরণ পুনরুদ্ধার করা, যার মধ্যে রয়েছে এর প্রদর্শন নাম, ঠিকানা, প্রকার এবং গুরুত্বপূর্ণভাবে, এর subDestinations (যেমন, পৃথক টার্মিনাল বা বিমানবন্দরের মতো বৃহত্তর কমপ্লেক্সের মধ্যে গুরুত্বপূর্ণ এলাকা)।
  • URL-এর মূল পরামিতি:
    1. {placeId} : নির্বাচিত স্থানের অনন্য শনাক্তকারী।
    2. fields : সঠিক তথ্য ক্ষেত্রগুলি নির্দিষ্ট করে যা পুনরুদ্ধার করা হবে। অ্যাপটি id , displayName , subDestinations , types এবং formattedAddress অনুরোধ করে। খরচ নিয়ন্ত্রণ এবং শুধুমাত্র প্রয়োজনীয় তথ্য গ্রহণের জন্য এটি অত্যন্ত গুরুত্বপূর্ণ।
  • subDestinations কীভাবে একটি অবস্থান দেওয়া যায়
async function getPlaceDetails(placeId) {
  // Construct the URL for the Places API (v1) details endpoint
  // The 'fields' parameter is crucial for requesting subDestinations
  const url = `https://places.googleapis.com/v1/places/${placeId}?key=YOUR_API_KEY&fields=id,displayName,subDestinations,types,formattedAddress`;

  const response = await fetch(url);
  const data = await response.json();

  // Accessing subDestinations from the Places API response
  if (data.subDestinations && data.subDestinations.length > 0) {
    for (const subDestination of data.subDestinations) {
      // Each subDestination object contains an 'id' and 'displayName'
      console.log(`Sub-destination ID: ${subDestination.id}`);
      console.log(`Sub-destination Name: ${subDestination.displayName?.text}`);
      // This subDestination.id is then used in a geocoding call (as shown in section 4)
    }
  }
}

**Handling `subDestinations`:** When the Places API returns
`subDestinations`, the application initiates a process for each one:
1.  **Geocoding:** It uses the `google.maps.Geocoder` to convert
    each `subDestination.id` into its precise geographical coordinates
    (`lat`, `lng`).
1.  **Marker Placement:** A distinct marker is added to the map for
    each sub-destination. These markers are styled with a blue circle icon
    to differentiate them.
1.  **Map Bounds Adjustment:** The `google.maps.LatLngBounds` object
    is used to dynamically expand the map's view to encompass all retrieved
    sub-destinations, verifying they are all visible within the current map
    frame.
1.  **Interactive Information Window:** A `click` listener is
    attached to each sub-destination marker. When clicked, the marker's
    icon changes to green, and an `InfoWindow` appears, displaying the
    sub-destination's name, address, and types. This provides immediate,
    detailed context to the user.

৪. জিওকোডিং এবং রিভার্স জিওকোডিং: উপ-গন্তব্যের জন্য বিশদ তথ্য সংগ্রহ করা

অ্যাপ্লিকেশনটি দুটি প্রধান উদ্দেশ্যে জিওকোডিং ব্যবহার করে: স্থান আইডিগুলিকে স্থানাঙ্কে রূপান্তর করা এবং স্থানাঙ্কগুলিকে অবস্থানের বিবরণে রূপান্তর করা। এই বিভাগটি বিশেষভাবে তুলে ধরে যে কীভাবে উপ-গন্তব্য সম্পর্কে বিস্তারিত তথ্য পেতে জিওকোডিং ব্যবহার করা হয়।

  • ব্যবহৃত API: google.maps.Geocoder (ম্যাপস জাভাস্ক্রিপ্ট API থেকে) এবং জিওকোডিং API ( https://maps.googleapis.com/maps/api/geocode/json এ সরাসরি fetch কলের মাধ্যমে)
  • উদ্দেশ্য:
    • google.maps.Geocoder : একটি placeId (Autocomplete অথবা Places API থেকে প্রাপ্ত) কে ভৌগোলিক স্থানাঙ্ক ( lat , lng ) এবং একটি ভিউপোর্টে রূপান্তর করতে ব্যবহৃত হয়, যা মানচিত্রটিকে নির্বাচিত স্থান এবং এর উপ-গন্তব্যস্থলগুলিকে সঠিকভাবে কেন্দ্রীভূত এবং জুম করার অনুমতি দেয়।
    • জিওকোডিং এপিআই ( fetch ): রিভার্স জিওকোডিং (অক্ষাংশ এবং দ্রাঘিমাংশকে মানুষের পঠনযোগ্য ঠিকানায় রূপান্তর) এবং বিল্ডিং আউটলাইন এবং নেভিগেশন পয়েন্টের মতো উন্নত অবস্থান ডেটা পুনরুদ্ধারের জন্য ব্যবহৃত হয়।
  • মূল পরামিতি:
    • google.maps.Geocoder.geocode() :
      • placeId : জিওকোড করার জন্য স্থান আইডি।
      • location : বিপরীত জিওকোডিংয়ের জন্য LatLng অবজেক্ট।
    • জিওকোডিং এপিআই কল fetch :
      • latlng : বিপরীত জিওকোডিংয়ের জন্য অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক।
      • extra_computations=BUILDING_AND_ENTRANCES : এই গুরুত্বপূর্ণ প্যারামিটারটি অতিরিক্ত ডেটা অনুরোধ করে, বিশেষ করে ভবনের পদচিহ্ন এবং প্রবেশপথের তথ্য, যা পরবর্তীতে ভবনের রূপরেখা এবং নেভিগেশন পয়েন্ট প্রদর্শন করতে ব্যবহৃত হয়।

আরও বিশদ (যেমন, অবস্থান, ফর্ম্যাট করা ঠিকানা, প্রকার) আনতে subDestination আইডি কীভাবে ব্যবহার করবেন

function geocodeAndAddMarker(subDestination, bounds) {
  return new Promise((resolve, reject) => {
    const geocoder = new google.maps.Geocoder();
    // Using the subDestination.id to geocode and get location details
    geocoder.geocode({ placeId: subDestination.id }, (results, status) => {
      if (status === "OK" && results[0]) {
        const location = results[0].geometry.location;
        const displayName = subDestination.displayName?.text || "Sub-destination";
        const formattedAddress = results[0].formatted_address; // Further detail from Geocoding
        const types = results[0].types; // Further detail from Geocoding

        const marker = new google.maps.Marker({
          map: map,
          position: location,
          title: displayName,
          icon: {
            path: google.maps.SymbolPath.CIRCLE,
            fillColor: 'blue',
            fillOpacity: 0.6,
            strokeWeight: 0,
            scale: 8
          }
        });

        marker.addListener('click', () => {
          marker.setIcon({
            path: google.maps.SymbolPath.CIRCLE,
            fillColor: 'green',
            fillOpacity: 0.6,
            strokeWeight: 0,
            scale: 8
          });
          const infowindow = new google.maps.InfoWindow({
            content: `<b>${displayName}</b><br><p>Address: ${formattedAddress}</p><p>Types: ${types.join(', ')}</p>`,
          });
          infowindow.open(map, marker);
        });
        bounds.extend(location);
        resolve(true);
      } else {
        reject(new Error(`Geocoding failed for placeId: ${subDestination.id}`));
      }
    });
  });
}

৫. মার্কার প্রদর্শন করা

মানচিত্রে নির্দিষ্ট স্থানগুলি হাইলাইট করার জন্য মার্কার ব্যবহার করা হয়।

  • ব্যবহৃত API: google.maps.Marker (Maps JavaScript API থেকে) এবং google.maps.marker.AdvancedMarkerElement google.maps.marker.PinElement সহ (Maps JavaScript API এর মার্কার লাইব্রেরি থেকে)
  • উদ্দেশ্য:
    • google.maps.Marker : প্রাথমিক ড্র্যাগেবল মার্কার (যদিও প্রদত্ত কোডে draggable false হিসেবে সেট করা আছে, এটি এর ক্ষমতার অংশ) এবং বিভাগ 3-এ বর্ণিত মৌলিক সাব-ডেস্টিনেশন মার্কারগুলির জন্য ব্যবহৃত হয়।
    • AdvancedMarkerElement এবং PinElement : আরও দৃশ্যমানভাবে স্বতন্ত্র নেভিগেশন পয়েন্ট মার্কারগুলির জন্য ব্যবহৃত হয়, যা মার্কারের পিনের কাস্টম স্টাইলিং করার অনুমতি দেয়।
  • মূল পরামিতি:
    • position : LatLng স্থানাঙ্ক করে যেখানে মার্কারটি স্থাপন করা হবে।
    • map : যে মানচিত্রের উদাহরণে মার্কারটি প্রদর্শিত হবে।
    • title : মার্কারের উপর ঘোরালে টেক্সট প্রদর্শিত হবে।
    • icon : google.maps.Marker এর জন্য কাস্টম আইকনগুলিকে অনুমতি দেয় (যেমন, কাস্টম রঙের সাথে google.maps.SymbolPath.CIRCLE )।
    • content : AdvancedMarkerElement এর জন্য, এটি কাস্টম HTML কন্টেন্ট এম্বেড করার অনুমতি দেয়, যার মধ্যে প্রি-স্টাইল করা পিনের জন্য PinElement ও রয়েছে।
    • PinElement প্যারামিটার: background , borderColor , glyphColor , ভিজ্যুয়াল কাস্টমাইজেশনের জন্য scale

৬. ভবনের রূপরেখা প্রদর্শন করা

অ্যাপ্লিকেশনটি ভবনের পদচিহ্ন দৃশ্যত উপস্থাপন করতে পারে।

  • ব্যবহৃত API: google.maps.Data (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ভৌগোলিক তথ্য প্রদর্শন করা, যেমন বিল্ডিং আউটলাইন (Geocoding API এর extra_computations থেকে GeoJSON display_polygon হিসাবে ফিরে এসেছে)।
  • মূল পরামিতি:
    • map : যে মানচিত্রের উদাহরণে ডেটা স্তর প্রয়োগ করা হয়।
    • style : GeoJSON বৈশিষ্ট্যগুলির (যেমন, strokeColor , fillColor , fillOpacity ) ভিজ্যুয়াল চেহারা নির্ধারণ করে।
    • addGeoJson() : লেয়ারে GeoJSON ডেটা যোগ করার পদ্ধতি।

৭. মানচিত্রের সীমানা এবং জুম

মানচিত্রের দৃশ্য যাচাই করা সমস্ত প্রাসঙ্গিক অবস্থানকে অন্তর্ভুক্ত করে।

  • ব্যবহৃত API: google.maps.LatLngBounds (ম্যাপস জাভাস্ক্রিপ্ট API থেকে)
  • উদ্দেশ্য: ভৌগোলিক বিন্দুর (যেমন, প্রধান স্থান এবং এর সমস্ত উপ-গন্তব্য) সংগ্রহের সাথে মানানসই করে মানচিত্রের ভিউপোর্টকে গতিশীলভাবে সামঞ্জস্য করা।
  • মূল পদ্ধতি:
    • extend(location) : সীমানায় একটি LatLng বিন্দু যোগ করে, প্রয়োজনে সেগুলিকে প্রসারিত করে।
    • fitBounds(bounds) : LatLngBounds অবজেক্ট দ্বারা সংজ্ঞায়িত সমগ্র এলাকা প্রদর্শনের জন্য মানচিত্রের কেন্দ্র এবং জুম স্তর সামঞ্জস্য করে।

এই গুগল ম্যাপস প্ল্যাটফর্ম এপিআইগুলিকে একত্রিত করে, অ্যাপ্লিকেশনটি স্থান অনুসন্ধান, তাদের বিশদ বিবরণ দেখার এবং উপ-গন্তব্য এবং বিল্ডিং রূপরেখার মতো সম্পর্কিত ভৌগোলিক তথ্য কল্পনা করার জন্য একটি বিস্তৃত এবং ইন্টারেক্টিভ অভিজ্ঞতা প্রদান করে।

বাস্তবায়নের বিবেচ্য বিষয়গুলি মনে রাখবেন যে এটি সমস্ত বিমানবন্দর এলাকায় কাজ করে না এবং এটি (বিমানবন্দর টার্মিনাল) ডেটা প্রাপ্যতার উপর নির্ভর করে।

রিসোর্স জিওকোডিং এপিআই প্লেস এপিআই ম্যাপস জাভাস্ক্রিপ্ট এপিআই

লেখক: