জায়গার আইডি

প্ল্যাটফর্ম বেছে নিন: Android iOS JavaScript ওয়েব পরিষেবা
ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA)-এর ডেভেলপার

ভূমিকা

প্লেস আইডি, Google Places ডেটাবেস ও Google Maps-এ কোনও জায়গাকে অনন্যভাবে শনাক্ত করে। নিম্নলিখিত Maps API-তে করা অনুরোধে প্লেস আইডি গ্রহণ করা হয়:

  • Geocoding API এবং Geocoding Service, Maps JavaScript API-তে কোনও Place ID-র জন্য ঠিকানা পাওয়া।
  • Routes API এবং Directions API (Legacy) এবং Directions Service, Maps JavaScript API (Legacy)-এ যাত্রা শুরু করার স্থান, গন্তব্য ও মধ্যবর্তী ওয়েপয়েন্ট নির্দিষ্ট করা।
  • Routes API এবং Distance Matrix API (পুরনো) এবং Distance Matrix Service, Maps JavaScript API (পুরনো)-তে শুরু ও গন্তব্যস্থল নির্দিষ্ট করা।
  • Places API (নতুন), Android-এর জন্য Places SDK (নতুন), iOS-এর জন্য Places SDK (নতুন) এবং Places লাইব্রেরিতে জায়গার বিবরণ ফিরিয়ে আনা।
  • Maps Embed API-তে Place ID প্যারামিটার ব্যবহার করা।
  • Maps URL-এ সার্চ কোয়েরি রিট্রিভ করা।
  • Roads API-তে স্পিড লিমিট দেখানো।
  • সীমানার জন্য ডেটা-ড্রিভেন স্টাইলিংয়ে সীমানা সংক্রান্ত পলিগন খুঁজে পাওয়া ও স্টাইল করা।

কোনও নির্দিষ্ট জায়গার আইডি খুঁজে বের করা

আপনি কি কোনও নির্দিষ্ট জায়গার প্লেস আইডি খুঁজছেন? নিচে দেওয়া প্লেস আইডি ফাইন্ডার ব্যবহার করে কোনও জায়গা সার্চ করুন এবং সেটির আইডি পান:

অথবা, আপনি Maps JavaScript API ডকুমেন্টেশনে এর কোড সহ প্লেস আইডি ফাইন্ডার দেখতে পারেন।

এক নজরে

প্লেস আইডি হল একটি টেক্সচুয়াল শনাক্তকারী যা অনন্যভাবে কোনও জায়গা শনাক্ত করে। শনাক্তকারীর দৈর্ঘ্য আলাদা হতে পারে (প্লেস আইডির কোনও সর্বাধিক দৈর্ঘ্য নেই)। উদাহরণ:

  • ChIJgUbEo8cfqokR5lP9_Wh_DaM
  • GhIJQWDl0CIeQUARxks3icF8U8A
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0EiGhIYChQKEgnRTo6ixx-qiRHo_bbmkCm7ZRAN
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0E
  • IhoSGAoUChIJ0U6OoscfqokR6P225pApu2UQDQ

ব্যবসা, ল্যান্ডমার্ক, পার্ক ও ইন্টারসেকশন সহ বেশিরভাগ লোকেশনের জন্য প্লেস আইডি উপলভ্য। একই জায়গা বা লোকেশনের একাধিক আলাদা আলাদা প্লেস আইডি থাকতে পারে। সময়ের সাথে সাথে প্লেস আইডি পরিবর্তন হতে পারে।

আপনি Places API এবং একাধিক Google Maps Platform API জুড়ে একই প্লেস আইডি ব্যবহার করতে পারবেন। যেমন, আপনি একই প্লেস আইডি ব্যবহার করে Places API, Maps JavaScript API, Geocoding API, Maps Embed API ও Roads API-তে কোনও জায়গার রেফারেন্স দিতে পারেন।

প্লেস আইডি ব্যবহার করে জায়গার বিবরণ রিট্রিভ করা

প্লেস আইডি ব্যবহার করার একটি সাধারণ উপায় হল Places API বা Maps JavaScript API-তে Places লাইব্রেরি ব্যবহার করে কোনও জায়গা সার্চ করা। তারপরে, জায়গার বিবরণ পেতে, ফেরত পাওয়া জায়গার আইডি ব্যবহার করুন। আপনি প্লেস আইডি সেভ করে রাখতে পারেন এবং পরে একই জায়গার বিবরণ পেতে এটি ব্যবহার করতে পারেন। এই ডকুমেন্টের পরে প্লেস আইডি সেভ করা সম্পর্কে পড়ুন।

Android (নতুন)-এর জন্য Places SDK ব্যবহার করার উদাহরণ

Android (নতুন)-এর জন্য Places SDK-তে, আপনি Place.getId() কল করে কোনও জায়গার আইডি রিট্রিভ করতে পারবেন। এছাড়াও, প্লেস অটোকমপ্লিট (লিগ্যাসি) পরিষেবা প্রদান করা সার্চ কোয়েরি ও ফিল্টারের সাথে ম্যাচ করা প্রতিটি জায়গার জন্য একটি প্লেস আইডি রিটার্ন করে। পরে আবার Place অবজেক্ট রিট্রিভ করতে প্লেস আইডি ব্যবহার করুন।

আইডি দিয়ে কোনও জায়গা পেতে, কল করুন PlacesClient.fetchPlace(), FetchPlaceRequest পাস করান।

API একটি FetchPlaceResponse রিটার্ন করে Task-এ। The FetchPlaceResponse -এ প্রদত্ত প্লেস আইডির সাথে ম্যাচ করা Place অবজেক্ট রয়েছে।

নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে যে নির্দিষ্ট জায়গার বিবরণ পেতে fetchPlace()-কে কল করা হচ্ছে।

Kotlin

// Define a Place ID.
val placeId = PlaceIdProvider.getRandomPlaceId()

// Specify the fields to return.
val placeFields = listOf(
    Place.Field.ID,
    Place.Field.DISPLAY_NAME,
    Place.Field.FORMATTED_ADDRESS,
    Place.Field.LOCATION
)

// Construct a request object, passing the place ID and fields array.
val request = FetchPlaceRequest.newInstance(placeId, placeFields)

placesClient.fetchPlace(request)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place

        val name = place.displayName
        val address = place.formattedAddress
        val location = place.location

        binding.placeName.text = name
        binding.placeAddress.text = address
        if (location != null) {
            binding.placeLocation.text = getString(
                R.string.place_location, location.latitude, location.longitude
            )
        } else {
            binding.placeLocation.text = null
        }
        Log.i(TAG, "Place found: ${place.displayName}")
    }.addOnFailureListener { exception: Exception ->
        if (exception is ApiException) {
            val message = getString(R.string.place_not_found, exception.message)
            binding.placeName.text = message
            Log.e(TAG, "Place not found: ${exception.message}")
            val statusCode = exception.statusCode
            TODO("Handle error with given status code")
        }
    }

      

Java

// Define a Place ID.
final String placeId = PlaceIdProvider.getRandomPlaceId();

// Specify the fields to return.
final List<Place.Field> placeFields =
        Arrays.asList(
                Place.Field.ID,
                Place.Field.DISPLAY_NAME,
                Place.Field.FORMATTED_ADDRESS,
                Place.Field.LOCATION
        );

// Construct a request object, passing the place ID and fields array.
final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
    Place place = response.getPlace();

    final CharSequence name = place.getDisplayName();
    final CharSequence address = place.getFormattedAddress();
    final LatLng location = place.getLocation();

    binding.placeName.setText(name);
    binding.placeAddress.setText(address);
    if (location != null) {
        binding.placeLocation.setText(
                getString(R.string.place_location, location.latitude, location.longitude)
        );
    } else {
        binding.placeLocation.setText(null);
    }

    Log.i(TAG, "Place found: " + place.getDisplayName());
}).addOnFailureListener((exception) -> {
    if (exception instanceof ApiException apiException) {
        final String message = getString(R.string.place_not_found, apiException.getMessage());
        binding.placeName.setText(message);
        Log.e(TAG, "Place not found: " + exception.getMessage());
        final int statusCode = apiException.getStatusCode();
        // TODO: Handle error with given status code.
    }
});

      

পরে ব্যবহারের জন্য প্লেস আইডি সেভ করা

Google Maps Platform পরিষেবার শর্তাবলীর ধারা ৩.২.৩(খ) -এ উল্লিখিত ক্যাশিং সংক্রান্ত বিধিনিষেধ থেকে প্লেস আইডি মুক্ত। তাই, আপনি পরে ব্যবহার করার জন্য প্লেস আইডি ভ্যালু সেভ করে রাখতে পারেন।

সেভ করা জায়গা আইডি রিফ্রেশ করুন

Google Maps ডেটাবেসে আপডেট হওয়ার কারণে প্লেস আইডি পরিবর্তন হতে পারে, তাই Google ১২ মাসের বেশি পুরনো প্লেস আইডি রিফ্রেশ করার সাজেশন দেয়। আপনি কোনও চার্জ ছাড়াই প্লেস আইডি রিফ্রেশ করতে পারবেন, এর জন্য প্লেস বিবরণের অনুরোধ করতে হবে, fields প্যারামিটারে শুধুমাত্র Place.Field.ID ফিল্ড উল্লেখ করতে হবে।

এই কলটি Places Details - ID Refresh SKU ট্রিগার করে।

প্লেস আইডি ব্যবহার করার সময় হওয়া সমস্যা কোড

INVALID_REQUEST

INVALID_REQUEST স্ট্যাটাস কোড থেকে বোঝা যায় যে নির্দিষ্ট করা প্লেস আইডি সঠিক নয়। INVALID_REQUEST কোডটি ফেরত আসতে পারে যখন প্লেস আইডিটি সংক্ষিপ্ত করা হয়েছে বা অন্যভাবে পরিবর্তন করা হয়েছে এবং আর সঠিক নেই।

NOT_FOUND

NOT_FOUND স্ট্যাটাস কোড থেকে বোঝা যায় যে নির্দিষ্ট করা জায়গার আইডি আর ব্যবহার করা হয় না। কোনও ব্যবসা বন্ধ হয়ে গেলে বা নতুন লোকেশনে সরে গেলে, প্লেস আইডি বাতিল হয়ে যেতে পারে। Google Maps ডেটাবেসে আপডেট হওয়ার কারণেও প্লেস আইডি পরিবর্তন হতে পারে। এই ধরনের ক্ষেত্রে, কোনও জায়গা নতুন জায়গা আইডি পেতে পারে এবং পুরনো আইডি NOT_FOUND উত্তর দেয়।

কোনও জায়গার আইডি পুরনো হয়ে গেলে ফলাফল রিফ্রেশ করতে, আসল অনুরোধটি সেভ করুন যা প্রতিটি জায়গার আইডি ফিরিয়ে দেয় এবং প্রয়োজন অনুযায়ী অনুরোধটি আবার ইস্যু করুন। মনে রাখবেন, আবার ইস্যু করা অনুরোধের জন্য সঠিক SKU-তে বিল করা হয়।

কিছু ধরনের প্লেস আইডি কখনও কখনও NOT_FOUND উত্তর দিতে পারে অথবা API উত্তরে একটি আলাদা প্লেস আইডি ফেরাতে পারে। এইসব জায়গার আইডি ধরনের মধ্যে অন্তর্ভুক্ত হল:

  • রাস্তার ঠিকানা যা Google Maps-এ সুনির্দিষ্ট ঠিকানা হিসেবে নেই, তবে ঠিকানাগুলির একটি রেঞ্জ থেকে অনুমান করা হয়।
  • দীর্ঘ রুটের সেগমেন্ট, যেখানে অনুরোধে কোনও শহর বা স্থানীয় এলাকাও উল্লেখ করা হয়েছে।
  • ইন্টারসেকশন।
  • subpremise ধরনের ঠিকানা কম্পোনেন্ট সহ জায়গা।

এইসব আইডি প্রায়ই একটি বড় স্ট্রিংয়ের মতো হয় (প্লেস আইডির কোনও সর্বাধিক দৈর্ঘ্য নেই)। যেমন:

EpID4LC14LC_4LCo4LCv4LGN4LCo4LCX4LCw4LGNIC0g4LC44LGI4LCm4LGN4LCs4LC-4LCm4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSAmIOCwteCwv-CwqOCwr-CxjSDgsKjgsJfgsLDgsY0g4LCu4LGG4LCv4LC_4LCo4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSwg4LC14LC_4LCo4LCv4LGNIOCwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwsuCwleCxjeCwt-CxjeCwruCwv-CwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwuOCwsOCxguCwsOCxjSDgsKjgsJfgsLDgsY0g4LC14LGG4LC44LGN4LCf4LGNLCDgsLjgsK_gsYDgsKbgsL7gsKzgsL7gsKbgsY0sIOCwueCxiOCwpuCwsOCwvuCwrOCwvuCwpuCxjSwg4LCk4LGG4LCy4LCC4LCX4LC-4LCjIDUwMDA1OSwg4LCt4LC-4LCw4LCk4LCm4LGH4LC24LCCImYiZAoUChIJ31l5uGWYyzsR9zY2qk9lDiASFAoSCd9ZebhlmMs7Efc2NqpPZQ4gGhQKEglDz61OZpjLOxHgDJCFY-o1qBoUChIJi37TW2-YyzsRr_uv50r7tdEiCg1MwFcKFS_dyy4