ভূমিকা
Google Places ডেটাবেস ও Google Maps-এ কোনও জায়গাকে অনন্যভাবে শনাক্ত করার জন্য প্লেস আইডি ব্যবহার করা হয়। নিম্নলিখিত Maps API-তে অনুরোধের ক্ষেত্রে জায়গার আইডি গ্রহণ করা হয়:
- Geocoding API এবং Geocoding Service, Maps JavaScript API-তে কোনও প্লেস আইডির জন্য ঠিকানা খুঁজে বের করা।
- Routes API এবং Directions API (পুরনো) এবং Directions Service, Maps JavaScript API (পুরনো)-তে শুরু, গন্তব্য এবং মধ্যবর্তী ওয়েপয়েন্ট নির্দিষ্ট করা।
- Routes API এবং Distance Matrix API (পুরনো) এবং Distance Matrix Service, Maps JavaScript API (পুরনো)-তে শুরু ও গন্তব্যস্থল উল্লেখ করা।
- Places API (নতুন), Android-এর জন্য Places SDK (নতুন), iOS-এর জন্য Places SDK (নতুন) এবং Places লাইব্রেরিতে জায়গার বিবরণ ফিরিয়ে আনা।
- Maps Embed API-তে জায়গার আইডি প্যারামিটার ব্যবহার করা।
- Maps URL-এ সার্চ কোয়েরি ফিরিয়ে আনা হচ্ছে।
- Roads API-তে স্পিড লিমিট দেখানো।
- সীমানার জন্য ডেটা-ড্রিভেন স্টাইলিংয়ে সীমানা পলিগন খোঁজা ও স্টাইল করা।
কোনও নির্দিষ্ট জায়গার আইডি খুঁজে বের করা
আপনি কি কোনও নির্দিষ্ট জায়গার প্লেস আইডি খুঁজছেন? কোনও জায়গা সার্চ করতে এবং সেটির আইডি পেতে, নিচে দেওয়া জায়গা আইডি খোঁজার টুল ব্যবহার করুন:
বিকল্প হিসেবে, আপনি Maps JavaScript API ডকুমেন্টেশনে কোড সহ প্লেস আইডি ফাইন্ডার দেখতে পারবেন।
কোড বা AI এজেন্টের থেকে জায়গার আইডি খুঁজে বের করা
প্লেস আইডি ফাইন্ডার ব্রাউজারে একবারে একটি জায়গা খোঁজে। অ্যাপ, স্ক্রিপ্ট বা AI এজেন্টের মাধ্যমে প্লেস আইডি খুঁজতে, API কল করুন:
- আপনার কোড থেকে:
Place.Field.ID-এ সেট করা ফিল্ড লিস্ট সহ টেক্সট সার্চ (নতুন) অনুরোধ পাঠান। যেসব অনুরোধের উত্তরে শুধু জায়গার আইডি পাওয়া যায়, সেগুলির জন্য Places API Text Search Essentials (IDs Only) SKU-এর অধীনে বিল করা হয়। - AI এজেন্ট বা LLM অ্যাপ থেকে:
Maps Experience এজেন্ট টুল-এ
Resolution API ব্যবহার করুন।
resolve_namesএবংresolve_maps_urlsMCP টুল প্রতিটি অনুরোধে সর্বাধিক ২০টি জায়গার নাম, ঠিকানা বা Google Maps URL-কে প্লেস আইডিতে রিজলভ করে। একই পদ্ধতিresolveNamesএবংresolveMapsUrlsREST পদ্ধতি হিসেবে উপলভ্য।
এক নজরে
প্লেস আইডি হল একটি টেক্সচুয়াল শনাক্তকারী যা অনন্যভাবে কোনও জায়গা শনাক্ত করে। আইডেন্টিফায়ারের দৈর্ঘ্য আলাদা হতে পারে (প্লেস আইডির কোনও সর্বাধিক দৈর্ঘ্য নেই)। উদাহরণ:
-
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-তে কোনও জায়গার রেফারেন্স দিতে পারবেন।
প্লেস আইডি ব্যবহার করে জায়গার বিবরণ ফিরিয়ে আনা
Maps JavaScript API-তে Places API বা Places লাইব্রেরি ব্যবহার করে কোনও জায়গা সার্চ করা হল, প্লেস আইডি ব্যবহার করার একটি সাধারণ উপায়। তারপর, জায়গার বিবরণ পেতে, ফেরত পাওয়া জায়গার আইডি ব্যবহার করুন। আপনি জায়গার আইডি স্টোর করতে এবং পরে একই জায়গার বিবরণ ফিরিয়ে আনতে এটি ব্যবহার করতে পারবেন। এই ডকুমেন্টের পরে প্লেস আইডি সেভ করা সম্পর্কে পড়ুন।
Android-এর জন্য Places SDK (নতুন) ব্যবহার করার উদাহরণ
Android-এর জন্য Places SDK (নতুন)-তে, আপনি
Place.getId()-এ কল করে
কোনও জায়গার আইডি ফিরিয়ে আনতে পারবেন।
এছাড়াও,
জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) পরিষেবা
প্রদান করা সার্চ কোয়েরি ও ফিল্টারের সাথে ম্যাচ করে এমন প্রতিটি জায়গার জন্য
একটি করে জায়গা আইডি প্রদান করে। পরে আবার
Place
অবজেক্ট ফিরিয়ে আনতে, জায়গার আইডি ব্যবহার করুন।
আইডি দিয়ে কোনও জায়গা পেতে,
PlacesClient.fetchPlace() কল করুন,
FetchPlaceRequest পাস করুন।
API একটি
FetchPlaceResponse
একটি
Task-এ ফেরত দেয়।
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