জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি)

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA)-এর ডেভেলপার

ব্যবহারকারীর সার্চ কোয়েরির উত্তরে Place Autocomplete (Legacy) জায়গার পূর্বাভাস প্রদান করে। ব্যবহারকারী টাইপ করার সাথে সাথে, অটোকমপ্লিট পরিষেবা ব্যবসা, ঠিকানা, Plus Code এবং আকর্ষণীয় স্থানের মতো জায়গার জন্য সাজেশন দেখায়।

আপনি নিম্নলিখিত উপায়ে আপনার অ্যাপে অটোমেটিক সম্পূর্ণ হওয়া ফিচার যোগ করতে পারবেন:

অটোমেটিক সম্পূর্ণ করার উইজেট যোগ করুন

অটোমেটিক সম্পূর্ণ হওয়ার উইজেট হল একটি সার্চ ডায়ালগ যাতে অটোমেটিক সম্পূর্ণ হওয়ার ফাংশনালিটি বিল্ট-ইন থাকে। ব্যবহারকারী সার্চ করা শব্দ লিখলে, উইজেট বেছে নেওয়ার জন্য সম্ভাব্য জায়গার তালিকা দেখায়। ব্যবহারকারী কোনও জায়গা বেছে নিলে, একটি Place ইনস্ট্যান্স রিটার্ন করা হয়, যা আপনার অ্যাপ বেছে নেওয়া জায়গা সম্পর্কে বিবরণ পেতে ব্যবহার করতে পারে।

আপনার অ্যাপে অটোমেটিক সম্পূর্ণ হওয়া সম্পর্কিত উইজেট যোগ করার জন্য দুটি বিকল্প আছে:

বিকল্প ১: AutocompleteSupportFragment এম্বেড করুন

আপনার অ্যাপে AutocompleteSupportFragment যোগ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. আপনার অ্যাক্টিভিটির XML লেআউটে ফ্র্যাগমেন্ট যোগ করুন।
  2. আপনার অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে লিসেনার যোগ করুন।

অ্যাক্টিভিটিতে AutocompleteSupportFragment যোগ করা

কোনও অ্যাক্টিভিটিতে AutocompleteSupportFragment যোগ করতে, XML লেআউটে নতুন ফ্র্যাগমেন্ট যোগ করুন। যেমন:

<fragment android:id="@+id/autocomplete_fragment"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
  />
  • ডিফল্ট হিসেবে, ফ্র্যাগমেন্টের কোনও বর্ডার বা ব্যাকগ্রাউন্ড থাকে না। একই ধরনের ভিজ্যুয়াল অ্যাপিয়ারেন্স প্রদান করতে, CardView-এর মতো অন্য লেআউট এলিমেন্টের মধ্যে ফ্র্যাগমেন্ট নেস্ট করুন।
  • আপনি যদি 'অটোমেটিক সম্পূর্ণ' ফ্র্যাগমেন্ট ব্যবহার করেন এবং onActivityResult ওভাররাইড করতে চান, তাহলে আপনাকে অবশ্যই super.onActivityResult কল করতে হবে, অন্যথায় ফ্র্যাগমেন্ট সঠিকভাবে কাজ করবে না।

অ্যাক্টিভিটিতে PlaceSelectionListener যোগ করুন

ব্যবহারকারীর বেছে নেওয়া বিকল্পের ভিত্তিতে PlaceSelectionListener হ্যান্ডেল কোনও জায়গা ফিরিয়ে দেয়। নিচের কোডটি ফ্র্যাগমেন্টের রেফারেন্স তৈরি করা এবং আপনার AutocompleteSupportFragment-এ লিসেনার যোগ করা দেখায়:

Kotlin

    // Build a BasicPlaceAutocomplete intent to allow the user to select a place.
    val basicAutocompleteIntent = BasicPlaceAutocomplete.createIntent(this) {
        setCountries(listOf("AU", "NZ"))
    }

      

Java

    // Build a BasicPlaceAutocomplete intent to allow the user to select a place.
    Intent basicAutocompleteIntent =
            new BasicPlaceAutocomplete.IntentBuilder()
                    .setCountries(List.of("AU", "NZ"))
                    .build(this);

      

বিকল্প ২: অটোমেটিক সম্পূর্ণ করার অ্যাক্টিভিটি চালু করতে ইনটেন্ট ব্যবহার করুন

আপনার অ্যাপ যদি অন্য কোনও নেভিগেশনাল ফ্লো ব্যবহার করতে চায় (যেমন, সার্চ ফিল্ডের পরিবর্তে কোনও আইকন থেকে অটোকমপ্লিট অভিজ্ঞতা ট্রিগার করা), তাহলে আপনার অ্যাপ ইনটেন্ট ব্যবহার করে অটোকমপ্লিট চালু করতে পারে।

ইনটেন্ট ব্যবহার করে অটোমেটিক সম্পূর্ণ করার উইজেট চালু করতে, এই ধাপগুলি অনুসরণ করুন:

  1. Autocomplete.IntentBuilder ব্যবহার করে ইনটেন্ট তৈরি করুন, কাঙ্খিত Autocomplete মোড পাস করুন।
  2. অ্যাক্টিভিটি ফলাফল লঞ্চার নির্ধারণ করুন registerForActivityResult যা ইনটেন্ট লঞ্চ করতে এবং ফলাফলে ব্যবহারকারীর বেছে নেওয়া জায়গার পূর্বাভাস ম্যানেজ করতে ব্যবহার করা যেতে পারে।

অটোমেটিক সম্পূর্ণ করার ইনটেন্ট তৈরি করুন

নিচের উদাহরণে Autocomplete.IntentBuilder ব্যবহার করে ইনটেন্ট হিসেবে অটোকমপ্লিট উইজেট লঞ্চ করার ইনটেন্ট তৈরি করা হয়েছে:

Kotlin

    val intent = PlaceAutocomplete.createIntent(this) {
        setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
    }

    startAutocomplete.launch(intent)

      

Java

    // Start the autocomplete intent.
    Intent intent =
            new PlaceAutocomplete.IntentBuilder()
                    .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
                    .build(this);
    startAutocomplete.launch(intent);

      

অটোকমপ্লিট উইজেট লঞ্চ করার জন্য ইনটেন্ট ব্যবহার করার সময়, আপনি ওভারলে বা ফুল-স্ক্রিন ডিসপ্লে মোড থেকে বেছে নিতে পারবেন। নিম্নলিখিত স্ক্রিনশটে প্রতিটি ডিসপ্লে মোড দেখানো হয়েছে:

ওভারলে মোডে দেখানো হলে, অটোমেটিক সম্পূর্ণ করার উইজেট কলিং UI-এর উপরে সুপারইম্পোজ করা অবস্থায় দেখা যায়।
ছবি ১: OVERLAY মোডে অটোমেটিক সম্পূর্ণ করার উইজেট
ফুলস্ক্রিন মোডে দেখানো হলে, অটোমেটিক সম্পূর্ণ করার উইজেট পুরো স্ক্রিন জুড়ে দেখা যায়।
ছবি ২: ফুল-স্ক্রিন মোডে অটোমেটিক সম্পূর্ণ করার উইজেট

ইনটেন্ট ফলাফলের জন্য কলব্যাক রেজিস্টার করুন

ব্যবহারকারী কোনও জায়গা বেছে নিলে বিজ্ঞপ্তি পেতে, একটি registerForActivityResult() লঞ্চার নির্দিষ্ট করুন, যা অ্যাক্টিভিটি লঞ্চ করে এবং নিচের উদাহরণে দেখানো ফলাফলও ম্যানেজ করে। ব্যবহারকারী কোনও পূর্বাভাস বেছে নিলে, সেটি ফলাফল অবজেক্টে থাকা ইনটেন্টে ডেলিভার করা হবে। যেহেতু ইনটেন্টটি Autocomplete.IntentBuilder তৈরি করেছে, তাই Autocomplete.getPlaceFromIntent() পদ্ধতিটি এর থেকে Place অবজেক্ট এক্সট্র্যাক্ট করতে পারে।

Kotlin

private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val prediction = PlaceAutocomplete.getPredictionFromIntent(intent)
                if (prediction != null) {
                    binding.autocompleteResult.text = getString(
                        R.string.place_selection,
                        prediction.getPrimaryText(null),
                        prediction.placeId,
                        prediction.getSecondaryText(null),
                    )
                    Log.i(
                        TAG,
                        "Place: ${prediction.getPrimaryText(null)}, ${prediction.placeId}",
                    )
                }
            }
        } else if (result.resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
            binding.autocompleteResult.setText(R.string.user_canceled_autocomplete)
            Log.i(TAG, "User canceled autocomplete")
        } else if (result.resultCode == PlacesSdkAutocompleteActivity.RESULT_ERROR) {
            val intent = result.data
            if (intent != null) {
                val status = PlaceAutocomplete.getResultStatusFromIntent(intent)
                Log.e(TAG, "An error occurred: ${status?.statusMessage}")
            }
        }
    }

      

Java

private final ActivityResultLauncher<Intent> startAutocomplete =
        registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                        Intent intent = result.getData();
                        if (intent != null) {
                            AutocompletePrediction prediction =
                                    PlaceAutocomplete.getPredictionFromIntent(intent);
                            if (prediction != null) {
                                binding.autocompleteResult.setText(
                                        getString(
                                                R.string.place_selection,
                                                prediction.getPrimaryText(null),
                                                prediction.getPlaceId(),
                                                prediction.getSecondaryText(null)));
                                Log.i(
                                        TAG,
                                        "Place: "
                                                + prediction.getPrimaryText(null)
                                                + ", "
                                                + prediction.getPlaceId());
                            }
                        }
                    } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                        // The user canceled the operation.
                        binding.autocompleteResult.setText(R.string.user_canceled_autocomplete);
                        Log.i(TAG, "User canceled autocomplete");
                    } else if (result.getResultCode()
                            == com.google.android.libraries.places.widget
                                    .PlaceAutocompleteActivity.RESULT_ERROR) {
                        Intent intent = result.getData();
                        if (intent != null) {
                            Status status = PlaceAutocomplete.getResultStatusFromIntent(intent);
                            if (status != null) {
                                Log.e(TAG, "An error occurred: " + status.getStatusMessage());
                            }
                        }
                    }
                });


      

প্রোগ্রাম্যাটিক্যালি জায়গার পূর্বাভাস পাওয়া

আপনি অটোমেটিক সম্পূর্ণ করার উইজেটের মাধ্যমে প্রদান করা UI-এর বিকল্প হিসেবে কাস্টম সার্চ UI তৈরি করতে পারবেন। এটি করতে, আপনার অ্যাপকে অবশ্যই প্রোগ্রাম্যাটিকভাবে জায়গার পূর্বাভাস পেতে হবে। আপনার অ্যাপ, PlacesClient.findAutocompletePredictions() কল করে, FindAutocompletePredictionsRequest অবজেক্টকে নিম্নলিখিত প্যারামিটার সহ পাস করে, অটোকমপ্লিট API থেকে সম্ভাব্য জায়গার নাম এবং/অথবা ঠিকানার তালিকা পেতে পারে:

  • প্রয়োজন: ব্যবহারকারীর টাইপ করা টেক্সট সহ query স্ট্রিং।
  • সাজেস্ট করা: A AutocompleteSessionToken, যা বিলিংয়ের উদ্দেশ্যে ব্যবহারকারীর সার্চের কোয়েরি ও বেছে নেওয়ার ধাপগুলিকে একটি পৃথক সেশনে গ্রুপ করে। ব্যবহারকারী কোনও কোয়েরি টাইপ করা শুরু করলে সেশন শুরু হয় এবং তিনি কোনও জায়গা বেছে নিলে সেশন শেষ হয়।
  • সাজেস্ট করা হয়েছে: একটি RectangularBounds অবজেক্ট, যা নির্দিষ্ট অঞ্চলে ফলাফল সীমাবদ্ধ করতে অক্ষাংশ এবং দ্রাঘিমাংশের সীমা নির্দিষ্ট করে।
  • ঐচ্ছিক: দুই অক্ষরের এক বা একাধিক দেশের কোড (ISO 3166-1 Alpha-2), যা সেই দেশ বা দেশগুলিকে নির্দেশ করে যেখানে ফলাফল সীমাবদ্ধ করা উচিত।
  • ঐচ্ছিক: একটি TypeFilter, যা আপনি নির্দিষ্ট জায়গার ধরন অনুযায়ী ফলাফল সীমাবদ্ধ করতে ব্যবহার করতে পারেন। নিম্নলিখিত জায়গার ধরন কাজ করে:

    • TypeFilter.GEOCODE – ব্যবসার পরিবর্তে শুধুমাত্র জিওকোডিং ফলাফল ফেরত দেয়। নির্দিষ্ট লোকেশন অনির্দিষ্ট হলে, ফলাফল থেকে অস্পষ্টতা দূর করতে এই অনুরোধ ব্যবহার করুন।
    • TypeFilter.ADDRESS – শুধু সঠিক ঠিকানা সহ অটোকমপ্লিট ফলাফল ফেরত দেয়। ব্যবহারকারী সম্পূর্ণ নির্দিষ্ট ঠিকানা খুঁজছেন বলে আপনি জানলে, এই ধরন ব্যবহার করুন।
    • TypeFilter.ESTABLISHMENT – শুধুমাত্র সেইসব জায়গা দেখায় যেগুলি ব্যবসা।
    • TypeFilter.REGIONS – শুধুমাত্র সেইসব জায়গা দেখায় যেগুলি নিম্নলিখিত ধরনের সাথে ম্যাচ করে:

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES – শুধুমাত্র LOCALITY বা ADMINISTRATIVE_AREA_LEVEL_3-এর সাথে ম্যাচ করা ফলাফল দেখায়।

  • ঐচ্ছিক: অনুরোধের উৎসের লোকেশন উল্লেখ করে এমন একটি LatLng। আপনি setOrigin() কল করলে, পরিষেবাটি উত্তরে প্রতিটি অটোমেটিক সম্পূর্ণ করার পূর্বাভাসের জন্য নির্দিষ্ট উৎস থেকে মিটারে (distanceMeters) দূরত্ব দেখায়।

জায়গার ধরন সম্পর্কে তথ্যের জন্য, জায়গার ধরন সংক্রান্ত নির্দেশিকা দেখুন।

নিচের উদাহরণে PlacesClient.findAutocompletePredictions()-এ করা একটি সম্পূর্ণ কল দেখানো হয়েছে।

Kotlin

    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    val token = AutocompleteSessionToken.newInstance()

    // Create a RectangularBounds object.
    val bounds = RectangularBounds.newInstance(
        LatLng(-33.880490, 151.184363),
        LatLng(-33.858754, 151.229596),
    )
    // Use the builder to create a FindAutocompletePredictionsRequest.
    val request =
        FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            // .setLocationRestriction(bounds)
            .setOrigin(LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            val builder = StringBuilder()
            for (prediction in response.autocompletePredictions) {
                builder.append(prediction.getPrimaryText(null).toString()).append("\n")
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
            binding.autocompleteResult.text = builder.toString()
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
                binding.autocompleteResult.text = getString(R.string.place_not_found, exception.message)
            }
        }

      

Java

    // Create a new token for the autocomplete session. Pass this to
    // FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

    // Create a RectangularBounds object.
    RectangularBounds bounds =
            RectangularBounds.newInstance(
                    new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596));
    // Use the builder to create a FindAutocompletePredictionsRequest.
    FindAutocompletePredictionsRequest request =
            FindAutocompletePredictionsRequest.builder()
                    // Call either setLocationBias() OR setLocationRestriction().
                    .setLocationBias(bounds)
                    // .setLocationRestriction(bounds)
                    .setOrigin(new LatLng(-33.8749937, 151.2041382))
                    .setCountries("AU", "NZ")
                    .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
                    .setSessionToken(token)
                    .setQuery(query)
                    .build();

    placesClient
            .findAutocompletePredictions(request)
            .addOnSuccessListener(
                    (response) -> {
                        StringBuilder builder = new StringBuilder();
                        for (AutocompletePrediction prediction :
                                response.getAutocompletePredictions()) {
                            builder.append(prediction.getPrimaryText(null).toString())
                                    .append("\n");
                            Log.i(TAG, prediction.getPlaceId());
                            Log.i(TAG, prediction.getPrimaryText(null).toString());
                        }
                        binding.autocompleteResult.setText(builder.toString());
                    })
            .addOnFailureListener(
                    (exception) -> {
                        if (exception instanceof ApiException apiException) {
                            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
                            binding.autocompleteResult.setText(
                                    getString(
                                            R.string.place_not_found,
                                            apiException.getMessage()));
                        }
                    });

      

API একটি FindAutocompletePredictionsResponse Task-এ ফেরত পাঠায়। FindAutocompletePredictionsResponse-এ AutocompletePrediction অবজেক্টের তালিকা আছে যা সম্ভাব্য জায়গা দেখায়। কোয়েরি এবং ফিল্টার মাপকাঠি অনুযায়ী কোনও পরিচিত জায়গা না থাকলে, তালিকাটি খালি থাকতে পারে।

প্রতিটি অনুমান করা জায়গার জন্য, আপনি জায়গার বিবরণ পেতে নিম্নলিখিত পদ্ধতিগুলি কল করতে পারেন:

  • getFullText(CharacterStyle) কোনও জায়গার বিবরণের সম্পূর্ণ টেক্সট দেখায়। এটি প্রাইমারি ও সেকেন্ডারি টেক্সটের কম্বিনেশন। যেমন: "আইফেল টাওয়ার, অ্যাভিনিউ আনাতোল ফ্রান্স, প্যারিস, ফ্রান্স"। এছাড়াও, এই পদ্ধতি আপনাকে CharacterStyle ব্যবহার করে, আপনার পছন্দের স্টাইল সহ সার্চের সাথে মেলে এমন বিবরণের বিভাগ হাইলাইট করতে দেয়। CharacterStyle প্যারামিটারটি ঐচ্ছিক। আপনি কোনও হাইলাইটিং না চাইলে এটি নাল হিসেবে সেট করুন।
  • getPrimaryText(CharacterStyle) কোনও জায়গার বিবরণ সহ মূল টেক্সট দেখায়। এটি সাধারণত জায়গার নাম হয়। যেমন: "আইফেল টাওয়ার" এবং "১২৩ পিট স্ট্রিট"।
  • getSecondaryText(CharacterStyle) কোনও জায়গার বিবরণের সাবসিডিয়ারি টেক্সট রিটার্ন করে। এটি উপযোগী, যেমন, অটোমেটিক সম্পূর্ণ করার পূর্বাভাষ দেখানোর সময় দ্বিতীয় লাইন হিসেবে। যেমন: "অ্যাভিনিউ আনাতোল ফ্রান্স, প্যারিস, ফ্রান্স" এবং "সিডনি, নিউ সাউথ ওয়েলস"।
  • getPlaceId() পূর্বাভাস দেওয়া জায়গার আইডি দেখায়। প্লেস আইডি হল একটি টেক্সচুয়াল শনাক্তকারী যা অনন্যভাবে একটি স্থানকে শনাক্ত করে, যা আপনি পরে আবার Place অবজেক্ট পুনরুদ্ধার করতে ব্যবহার করতে পারেন। Android-এর জন্য Places SDK-তে প্লেস আইডি সম্পর্কে আরও তথ্যের জন্য, জায়গার বিবরণ দেখুন। প্লেস আইডি সম্পর্কে সাধারণ তথ্যের জন্য, প্লেস আইডি ওভারভিউ দেখুন।
  • getPlaceTypes() এই জায়গার সাথে সম্পর্কিত জায়গার ধরনের তালিকা দেখায়।
  • getDistanceMeters() এই জায়গা এবং অনুরোধে উল্লেখ করা উৎসের মধ্যে সরলরৈখিক দূরত্ব মিটারে দেখায়।

সেশন টোকেন

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

Android-এর জন্য Places SDK প্রতিটি সেশন শনাক্ত করতে AutocompleteSessionToken ব্যবহার করে। প্রতিটি নতুন সেশন শুরু করার সময় আপনার অ্যাপকে একটি নতুন সেশন টোকেন পাস করতে হবে, তারপর সেই একই টোকেন, একটি প্লেস আইডির সাথে, fetchPlace()-এ পরবর্তী কলে পাস করতে হবে যাতে ব্যবহারকারীর বেছে নেওয়া জায়গার জন্য জায়গার বিবরণ পাওয়া যায়।

সেশন টোকেন সম্পর্কে আরও জানুন।

অটো-কমপ্লিট ফলাফল সীমাবদ্ধ করুন

আপনি অটোমেটিক সম্পূর্ণ হওয়া ফলাফলকে নির্দিষ্ট ভৌগোলিক অঞ্চলে সীমাবদ্ধ করতে পারেন এবং/অথবা ফলাফলকে এক বা একাধিক জায়গার ধরন বা সর্বাধিক পাঁচটি দেশে ফিল্টার করতে পারেন। আপনি এইসব সীমাবদ্ধতা অটোমেটিক সম্পূর্ণ করার অ্যাক্টিভিটি, AutocompleteSupportFragment এবং প্রোগ্র্যামাটিক অটোমেটিক সম্পূর্ণ করার API-তে প্রয়োগ করতে পারবেন।

ফলাফল সীমাবদ্ধ করতে, নিম্নলিখিতগুলি করুন:

  • নির্দিষ্ট অঞ্চলের মধ্যে ফলাফল পছন্দ করতে, setLocationBias() কল করুন (নির্দিষ্ট অঞ্চলের বাইরের কিছু ফলাফল এখনও দেখানো হতে পারে)।
  • নির্দিষ্ট অঞ্চলের মধ্যে ফলাফল শুধুমাত্র দেখাতে, setLocationRestriction() কল করুন (নির্দিষ্ট অঞ্চলের মধ্যে ফলাফল ফেরত পাঠানো হবে)।
  • শুধুমাত্র নির্দিষ্ট ধরনের জায়গার সাথে মানানসই ফলাফল পেতে, setTypesFilter() কল করুন (যেমন, TypeFilter.ADDRESS উল্লেখ করলে শুধুমাত্র সুনির্দিষ্ট ঠিকানা সহ ফলাফল পাওয়া যাবে)।
  • সর্বাধিক পাঁচটি নির্দিষ্ট দেশের মধ্যে থেকে ফলাফল পেতে, setCountries() কল করুন। দেশকে অবশ্যই দুই-অক্ষরের, ISO 3166-1 Alpha-2 মানানসই দেশের কোড হিসেবে পাস করতে হবে।

নির্দিষ্ট অঞ্চলের জন্য পক্ষপাতদুষ্ট ফলাফল

নির্দিষ্ট ভৌগোলিক অঞ্চলের জন্য অটোমেটিক সম্পূর্ণ হওয়া ফলাফল পক্ষপাতদুষ্ট করতে, setLocationBias() কল করুন, RectangularBounds পাস করুন। নিচের কোডের উদাহরণে দেখানো হয়েছে যে ফ্র্যাগমেন্ট ইনস্ট্যান্সে setLocationBias() কল করা হচ্ছে যাতে অস্ট্রেলিয়ার সিডনি অঞ্চলের জন্য অটোকমপ্লিট সাজেশন বায়াস করা যায়।

Kotlin

        intentBuilder.setLocationBias(bounds)

      

Java

        intentBuilder.setLocationBias(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)));

      

নির্দিষ্ট অঞ্চলে ফলাফল সীমাবদ্ধ করুন

অটোকমপ্লিট ফলাফল নির্দিষ্ট ভৌগোলিক অঞ্চলে সীমাবদ্ধ করতে, setLocationRestriction() কল করুন, RectangularBounds পাস করুন। নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে যে কীভাবে ফ্র্যাগমেন্ট ইনস্ট্যান্সে setLocationRestriction() কল করে অস্ট্রেলিয়ার সিডনি অঞ্চলের জন্য অটোকমপ্লিট সাজেশন বায়াস করা যায়।

Kotlin

        intentBuilder.setLocationRestriction(bounds)

      

Java

        intentBuilder.setLocationRestriction(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)));

      

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

জায়গার ধরন বা ধরনের সংগ্রহ অনুযায়ী ফলাফল ফিল্টার করুন

আপনি অটোমেটিক সম্পূর্ণ করার অনুরোধ থেকে ফলাফল সীমাবদ্ধ করতে পারেন যাতে সেগুলি শুধুমাত্র একটি নির্দিষ্ট ধরনের জায়গা দেখায়। জায়গার ধরন-এর ১, ২ ও ৩ নম্বর টেবিলে তালিকাভুক্ত জায়গার ধরন বা ধরনের সংগ্রহ ব্যবহার করে একটি ফিল্টার নির্দিষ্ট করুন। কিছু উল্লেখ করা না থাকলে, সব ধরনের ফলাফল দেখানো হয়।

অটোমেটিক সম্পূর্ণ হওয়া ফলাফল ফিল্টার করতে, ফিল্টার সেট করতে setTypesFilter() কল করুন।

কোনও ধরন বা ধরন কালেকশন ফিল্টার নির্দিষ্ট করতে:

  • setTypesFilter() কল করুন এবং জায়গার ধরন-এ দেখানো টেবিল ১ ও টেবিল ২ থেকে সর্বাধিক পাঁচটি টাইপ ভ্যালু নির্দিষ্ট করুন। PlaceTypes-এ ধ্রুবক দ্বারা টাইপ ভ্যালু সংজ্ঞায়িত করা হয়।

  • setTypesFilter() কল করুন এবং জায়গার ধরন-এ দেখানো টেবিল ৩ থেকে টাইপ কালেকশন নির্দিষ্ট করুন। কালেকশন ভ্যালু PlaceTypes-এ কনস্ট্যান্ট দ্বারা সংজ্ঞায়িত করা হয়।

    অনুরোধে সারণী ৩ থেকে শুধুমাত্র একটি প্রকারের অনুমতি দেওয়া হয়। আপনি যদি সারণী ৩ থেকে কোনও মান নির্দিষ্ট করেন, তাহলে সারণী ১ বা সারণী ২ থেকে কোনও মান নির্দিষ্ট করতে পারবেন না। আপনি যদি তা করেন, তাহলে একটি সমস্যা হবে।

নিম্নলিখিত কোডের উদাহরণ AutocompleteSupportFragment-এ setTypesFilter() কল করে এবং একাধিক ধরনের ভ্যালু নির্দিষ্ট করে।

Kotlin

    intentBuilder.setTypesFilter(listOf("landmark", "restaurant", "store"))

      

Java

    intentBuilder.setTypesFilter(List.of("landmark", "restaurant", "store"));

      

নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে যে কীভাবে AutocompleteSupportFragment-এ setTypesFilter() কল করে একটি ফিল্টার সেট করা যায় যা টাইপ কালেকশন নির্দিষ্ট করে শুধুমাত্র সঠিক ঠিকানা সহ ফলাফল দেখায়।

Kotlin

    intentBuilder.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java

    intentBuilder.setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT));

      

নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে যে কীভাবে IntentBuilder-এ setTypesFilter() কল করে একটি ফিল্টার সেট করা যায় যা নির্দিষ্ট ঠিকানা সহ ফলাফল দেখায়। এটি করার জন্য একটি টাইপ কালেকশন উল্লেখ করতে হয়।

Kotlin

    val intent = PlaceAutocomplete.createIntent(this) {
        setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
    }

      

Java

    Intent intent =
            new PlaceAutocomplete.IntentBuilder()
                    .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
                    .build(this);

      

দেশ অনুযায়ী ফলাফল ফিল্টার করুন

সর্বাধিক পাঁচটি দেশের জন্য অটোমেটিক সম্পূর্ণ হওয়া ফলাফল ফিল্টার করতে, দেশের কোড সেট করতে setCountries() কল করুন। তারপর, ফ্র্যাগমেন্ট বা ইনটেন্টে ফিল্টার পাস করুন। দেশকে অবশ্যই দুই-অক্ষর, ISO 3166-1 Alpha-2 মানানসই দেশের কোড হিসেবে পাস করতে হবে।

নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে যে কীভাবে setCountries()-কে AutocompleteSupportFragment-এ কল করতে হয়, যাতে ফিল্টার সেট করে শুধুমাত্র নির্দিষ্ট দেশের মধ্যে ফলাফল দেখানো যায়।

Kotlin

    intentBuilder.setCountries(listOf("AU", "NZ"))

      

Java

    intentBuilder.setCountries(List.of("AU", "NZ"));

      

ব্যবহারের সীমা

Android-এর জন্য Places SDK (পুরনো) সহ Places API (পুরনো) ব্যবহারের ক্ষেত্রে, প্রতিদিন সর্বাধিক অনুরোধের (QPD) সংখ্যা আর সীমিত নয়। তবে, ব্যবহারের উপর নিম্নলিখিত সীমা এখনও প্রযোজ্য:

  • রেট লিমিট হল ৬,০০০ QPM (প্রতি মিনিটে অনুরোধ)। একই প্রোজেক্টের ক্রেডেনশিয়াল ব্যবহার করে সব অ্যাপ্লিকেশনের জন্য ক্লায়েন্ট-সাইড ও সার্ভার-সাইড অনুরোধের যোগফল হিসেবে এটি গণনা করা হয়।

আপনার অ্যাপে অ্যাট্রিবিউশন দেখান

  • আপনার অ্যাপ যদি প্রোগ্রাম্যাটিক্যালি অটোমেটিক সম্পূর্ণ করার পরিষেবা ব্যবহার করে, তাহলে আপনার UI-কে অবশ্যই 'Google দ্বারা পরিচালিত' অ্যাট্রিবিউশন দেখাতে হবে অথবা Google-ব্র্যান্ডেড ম্যাপের মধ্যে দেখাতে হবে।
  • আপনার অ্যাপ যদি অটোমেটিক সম্পূর্ণ করার উইজেট ব্যবহার করে, তাহলে অতিরিক্ত কোনও অ্যাকশন নেওয়ার প্রয়োজন নেই (প্রয়োজনীয় অ্যাট্রিবিউশন ডিফল্ট হিসেবে দেখানো হয়)।
  • আইডি দিয়ে কোনও জায়গা খোঁজার পরে আপনি যদি অতিরিক্ত জায়গার তথ্য উদ্ধার ও ডিসপ্লে করেন, তাহলে আপনাকে থার্ড-পার্টি অ্যাট্রিবিউশনও ডিসপ্লে করতে হবে।

আরও তথ্যের জন্য, অ্যাট্রিবিউশন সংক্রান্ত ডকুমেন্টেশন দেখুন।

Place Autocomplete (Legacy) অপ্টিমাইজেশন

এই বিভাগে, Place Autocomplete (Legacy) পরিষেবা থেকে সর্বাধিক সুবিধা পেতে আপনাকে সাহায্য করার জন্য পেশাদার পদ্ধতিগুলি বর্ণনা করা হয়েছে।

এখানে কিছু সাধারণ নির্দেশিকা দেওয়া হল:

  • কাজ করে এমন ইউজার ইন্টারফেস ডেভেলপ করার সবচেয়ে দ্রুত উপায় হল Maps JavaScript API জায়গা অটোমেটিক সম্পূর্ণ করা (Legacy) উইজেট, Android-এর জন্য Places SDK জায়গা অটোমেটিক সম্পূর্ণ করা (Legacy) উইজেট, অথবা iOS-এর জন্য Places SDK জায়গা অটোমেটিক সম্পূর্ণ করা (Legacy) UI কন্ট্রোল ব্যবহার করা।
  • শুরু থেকেই Place Autocomplete (Legacy) ডেটা ফিল্ড সম্পর্কে প্রয়োজনীয় তথ্য জেনে নিন।
  • লোকেশন বায়াসিং ও লোকেশন সংক্রান্ত বিধিনিষেধের ফিল্ডগুলি ঐচ্ছিক হলেও, অটো-কমপ্লিট পারফর্ম্যান্সের উপর এগুলির উল্লেখযোগ্য প্রভাব থাকতে পারে।
  • API কোনও সমস্যা রিটার্ন করলে, আপনার অ্যাপ যাতে ঠিকভাবে কাজ করা বন্ধ করে দেয় তা নিশ্চিত করতে সমস্যা ম্যানেজ করার সুবিধা ব্যবহার করুন।
  • কোনও কিছু বেছে না নেওয়া হলে আপনার অ্যাপ যেন সেটি ম্যানেজ করতে পারে এবং ব্যবহারকারীকে চালিয়ে যাওয়ার উপায় অফার করে তা নিশ্চিত করুন।

খরচ অপ্টিমাইজ করার পেশাদার পদ্ধতি

প্রাথমিক খরচ অপ্টিমাইজেশন

Place Autocomplete (Legacy) পরিষেবা ব্যবহারের খরচ অপ্টিমাইজ করতে, Place Details (Legacy) এবং Place Autocomplete (Legacy) উইজেটে ফিল্ড মাস্ক ব্যবহার করুন যাতে শুধুমাত্র Place Autocomplete (Legacy) ডেটা ফিল্ড ফেরত পাওয়া যায়।

উন্নত খরচ অপ্টিমাইজেশন

Place Autocomplete (Legacy) অ্যাক্সেস করার জন্য প্রোগ্রাম্যাটিক ইমপ্লিমেন্টেশন বিবেচনা করুন SKU: Autocomplete - প্রতি অনুরোধের জন্য মূল্য এবং Place Details (Legacy)-এর পরিবর্তে বেছে নেওয়া জায়গার জন্য Geocoding API ফলাফল অনুরোধ করুন। Geocoding API-এর সাথে পেয়ার করা প্রতি-অনুরোধের মূল্য প্রতি-সেশন (সেশন-ভিত্তিক) মূল্যের চেয়ে বেশি সাশ্রয়ী হয় যদি নিম্নলিখিত দুটি শর্তই পূরণ হয়:

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

আপনার অ্যাপ্লিকেশনে কি বেছে নেওয়া পূর্বাভাসের ঠিকানা এবং অক্ষাংশ/দ্রাঘিমাংশ ছাড়া অন্য কোনও তথ্য প্রয়োজন?

হ্যাঁ, আরও বিবরণ প্রয়োজন

জায়গার বিবরণ (লিগ্যাসি) সহ সেশন-ভিত্তিক জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) ব্যবহার করুন।
আপনার অ্যাপ্লিকেশনের জন্য জায়গার বিবরণ (লিগ্যাসি) প্রয়োজন, যেমন জায়গার নাম, ব্যবসার স্ট্যাটাস বা খোলা থাকার সময়, তাই আপনার Place Autocomplete (লিগ্যাসি) প্রয়োগের ক্ষেত্রে সেশন টোকেন (প্রোগ্রাম্যাটিক্যালি বা JavaScript, Android বা iOS উইজেটে বিল্ট-ইন) প্রতি সেশনে এবং প্রযোজ্য Places Data SKU ব্যবহার করা উচিত, আপনি কোন কোন জায়গার ডেটা ফিল্ডের জন্য অনুরোধ করছেন তার উপর নির্ভর করে।১

উইজেট প্রয়োগ করা
সেশন ম্যানেজমেন্ট অটোমেটিক JavaScript, Android, অথবা iOS উইজেটে তৈরি করা হয়। এর মধ্যে জায়গা অটোমেটিক সম্পূর্ণ করা (পুরনো) অনুরোধ এবং বেছে নেওয়া পূর্বাভাসের উপর জায়গার বিবরণ (পুরনো) অনুরোধ অন্তর্ভুক্ত। আপনার প্রয়োজনীয় জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) ডেটা ফিল্ড শুধুমাত্র অনুরোধ করছেন কিনা তা নিশ্চিত করতে fields প্যারামিটার উল্লেখ করতে ভুলবেন না।

প্রোগ্রাম্যাটিক প্রয়োগ
আপনার Place Autocomplete (Legacy) অনুরোধের সাথে সেশন টোকেন ব্যবহার করুন। বেছে নেওয়া পূর্বাভাসের জন্য জায়গার বিবরণ (পুরনো) সংক্রান্ত অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলি অন্তর্ভুক্ত করুন:

  1. প্লেস অটোকমপ্লিট (লিগ্যাসি) রেসপন্স থেকে প্লেস আইডি
  2. জায়গা অটোমেটিক সম্পূর্ণ করা (পুরনো) অনুরোধে সেশন টোকেন ব্যবহার করা হয়েছে
  3. fields প্যারামিটার আপনার প্রয়োজনীয় জায়গা অটোমেটিক সম্পূর্ণ করা (Legacy) ডেটা ফিল্ড নির্দিষ্ট করে

না, শুধু ঠিকানা ও লোকেশন প্রয়োজন

আপনার Place Autocomplete (Legacy) ব্যবহারের পারফর্ম্যান্সের উপর নির্ভর করে, Geocoding API আপনার অ্যাপ্লিকেশনের জন্য Place Details (Legacy)-এর চেয়ে বেশি সাশ্রয়ী বিকল্প হতে পারে। প্রতিটি অ্যাপ্লিকেশনের Place Autocomplete (Legacy) কার্যকারিতা নির্ভর করে ব্যবহারকারীরা কী লিখছেন, অ্যাপ্লিকেশনটি কোথায় ব্যবহার করা হচ্ছে এবং পারফর্ম্যান্স অপ্টিমাইজেশনের পেশাদার পদ্ধতি প্রয়োগ করা হয়েছে কিনা তার উপর।

নিম্নলিখিত প্রশ্নের উত্তর দিতে, আপনার অ্যাপ্লিকেশনে প্লেস অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) পূর্বাভাস বেছে নেওয়ার আগে একজন ব্যবহারকারী গড়ে কতগুলি অক্ষর টাইপ করেন তা বিশ্লেষণ করুন।

আপনার ব্যবহারকারীরা কি গড়ে চার বা তার কম অনুরোধে প্লেস অটোকমপ্লিট (লিগ্যাসি) সংক্রান্ত পূর্বাভাস বেছে নেন?

হ্যাঁ

সেশন টোকেন ছাড়াই প্রোগ্রাম্যাটিকভাবে Place Autocomplete (Legacy) প্রয়োগ করুন এবং বেছে নেওয়া জায়গার পূর্বাভাসের উপর Geocoding API কল করুন।
Geocoding API ঠিকানা এবং অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক প্রদান করে। চারটি Autocomplete - Per Request অনুরোধ এবং বেছে নেওয়া জায়গার পূর্বাভাসের জন্য একটি Geocoding API কল করার খরচ সেশন প্রতি Place Autocomplete (Legacy) খরচের চেয়ে কম।১

আপনার ব্যবহারকারীরা যাতে আরও কম অক্ষর ব্যবহার করে তাদের কাঙ্ক্ষিত পূর্বাভাস পেতে পারেন, তার জন্য পারফর্ম্যান্স সংক্রান্ত পেশাদার পদ্ধতি প্রয়োগ করার কথা বিবেচনা করুন।

না

জায়গার বিবরণ (লিগ্যাসি) সহ সেশন-ভিত্তিক জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) ব্যবহার করুন।
ব্যবহারকারী কোনও Place Autocomplete (Legacy) পূর্বাভাস বেছে নেওয়ার আগে আপনি যতগুলি অনুরোধ করবেন বলে আশা করেন, তার গড় সংখ্যা সেশন প্রতি দামের থেকে বেশি হয়, তাই আপনার Place Autocomplete (Legacy) প্রয়োগের ক্ষেত্রে Place Autocomplete (Legacy) অনুরোধ এবং সংশ্লিষ্ট Place Details (Legacy) অনুরোধ, উভয়ের জন্যই সেশন টোকেন ব্যবহার করা উচিত সেশন প্রতি। ১

উইজেট প্রয়োগ করা
সেশন ম্যানেজমেন্ট অটোমেটিক JavaScript, Android অথবা iOS উইজেটে তৈরি করা হয়। এর মধ্যে জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) অনুরোধ এবং বেছে নেওয়া পূর্বাভাসের উপর জায়গার বিবরণ (লিগ্যাসি) অনুরোধ, দুটিই অন্তর্ভুক্ত। আপনার প্রয়োজনীয় ফিল্ডের জন্য অনুরোধ করছেন কিনা তা নিশ্চিত করতে fields প্যারামিটার উল্লেখ করতে ভুলবেন না।

প্রোগ্রাম্যাটিক প্রয়োগ
আপনার Place Autocomplete (Legacy) অনুরোধের সাথে সেশন টোকেন ব্যবহার করুন। বেছে নেওয়া পূর্বাভাসের জন্য জায়গার বিবরণ (পুরনো) সংক্রান্ত অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলি অন্তর্ভুক্ত করুন:

  1. প্লেস অটোকমপ্লিট (লিগ্যাসি) রেসপন্স থেকে প্লেস আইডি
  2. জায়গা অটোমেটিক সম্পূর্ণ করা (পুরনো) অনুরোধে সেশন টোকেন ব্যবহার করা হয়েছে
  3. fields প্যারামিটার প্রাথমিক ডেটা ফিল্ড নির্দিষ্ট করে যেমন ঠিকানা ও জ্যামিতি

প্লেস অটোকমপ্লিট (লিগ্যাসি) অনুরোধে দেরি করার কথা বিবেচনা করুন
আপনি এমন কৌশল অবলম্বন করতে পারেন যেমন ব্যবহারকারী প্রথম তিন বা চারটি অক্ষর টাইপ না করা পর্যন্ত প্লেস অটোকমপ্লিট (লিগ্যাসি) অনুরোধে দেরি করা যাতে আপনার অ্যাপ্লিকেশন কম অনুরোধ করে। যেমন, ব্যবহারকারী তৃতীয় অক্ষর টাইপ করার পরে প্রতিটি অক্ষরের জন্য Place Autocomplete (Legacy) অনুরোধ করার অর্থ হল, ব্যবহারকারী সাতটি অক্ষর টাইপ করে একটি সাজেশন বেছে নিলে, যার জন্য আপনি একটি Geocoding API অনুরোধ করেন, তাহলে মোট খরচ হবে ৪টি Place Autocomplete (Legacy) প্রতি অনুরোধ + Geocoding।১

অনুরোধে দেরি করার ফলে আপনার গড় প্রোগ্রাম্যাটিক অনুরোধ চারের কম হলে, আপনি Geocoding API-এর সাথে পারফর্ম্যান্ট Place Autocomplete (Legacy) প্রয়োগ করার নির্দেশিকা অনুসরণ করতে পারেন। মনে রাখবেন, অনুরোধ পাঠাতে দেরি হলে ব্যবহারকারী মনে করতে পারেন যে লেটেন্সি হচ্ছে, কারণ তিনি হয়ত প্রতিটি নতুন কিস্ট্রোকে সাজেশন দেখতে চান।

আপনার ব্যবহারকারীরা যাতে কম অক্ষর ব্যবহার করেই তাদের প্রয়োজনীয় পূর্বাভাস পেতে পারেন, তার জন্য পারফর্ম্যান্স সংক্রান্ত পেশাদার পদ্ধতি প্রয়োগ করার কথা বিবেচনা করুন।


  1. খরচের জন্য, Google Maps Platform-এর দামের তালিকা দেখুন।

পারফর্ম্যান্স সংক্রান্ত পেশাদার পদ্ধতি

নিচে উল্লেখ করা নির্দেশিকায় জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) পারফর্ম্যান্স অপ্টিমাইজ করার উপায় বর্ণনা করা হয়েছে:

  • আপনার 'জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি)' ইমপ্লিমেন্টেশনে নিষেধাজ্ঞা আছে এমন দেশ, লোকেশন বায়াসিং এবং (প্রোগ্রাম্যাটিক ইমপ্লিমেন্টেশনের জন্য) পছন্দের ভাষা যোগ করুন। উইজেটের ক্ষেত্রে ভাষার পছন্দ সেট করার প্রয়োজন নেই কারণ এটি ব্যবহারকারীর ব্রাউজার বা মোবাইল ডিভাইস থেকে ভাষার পছন্দ বেছে নেয়।
  • জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) ফিচারের সাথে ম্যাপ থাকলে, আপনি ম্যাপ ভিউপোর্ট অনুযায়ী লোকেশন বায়াস করতে পারবেন।
  • এমন পরিস্থিতিতে যখন কোনও ব্যবহারকারী জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) সংক্রান্ত পূর্বাভাসের মধ্যে থেকে কোনও একটি বেছে নেন না, সাধারণত কারণ সেইসব পূর্বাভাসের মধ্যে কোনওটিই কাঙ্ক্ষিত ফলাফল-ঠিকানা নয়, আপনি আরও প্রাসঙ্গিক ফলাফল পাওয়ার চেষ্টা করতে ব্যবহারকারীর আসল ইনপুট আবার ব্যবহার করতে পারেন:
    • আপনি যদি আশা করেন যে ব্যবহারকারী শুধুমাত্র ঠিকানা সংক্রান্ত তথ্য লিখবেন, তাহলে Geocoding API-তে কল করার সময় ব্যবহারকারীর আসল ইনপুট আবার ব্যবহার করুন।
    • ব্যবহারকারী নাম বা ঠিকানা দিয়ে নির্দিষ্ট কোনও জায়গার জন্য কোয়েরি লিখবেন বলে আপনি আশা করলে, জায়গার বিবরণ (লিগ্যাসি) সংক্রান্ত অনুরোধ ব্যবহার করুন। শুধুমাত্র নির্দিষ্ট অঞ্চলে ফলাফল প্রত্যাশিত হলে, লোকেশন বায়াসিং ব্যবহার করুন।
    অন্যান্য পরিস্থিতিতে Geocoding API-তে ফিরে যাওয়া সবচেয়ে ভালো, যার মধ্যে রয়েছে:
    • ব্যবহারকারীরা সাব-প্রিমাইজ ঠিকানা ইনপুট করছেন, যেমন কোনও বিল্ডিংয়ের মধ্যে নির্দিষ্ট ইউনিট বা অ্যাপার্টমেন্টের ঠিকানা। যেমন, চেক প্রজাতন্ত্রের ঠিকানা "Stroupežnického 3191/17, Praha" জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি) ফিচারে আংশিক পূর্বাভাস দেখায়।
    • ব্যবহারকারীরা রাস্তার সেগমেন্ট প্রিফিক্স সহ ঠিকানা ইনপুট করছেন, যেমন নিউ ইয়র্ক সিটিতে "23-30 29th St, Queens" বা হাওয়াইয়ের কাউয়াই দ্বীপে "47-380 Kamehameha Hwy, Kaneohe"।

লোকেশন বায়াসিং

location প্যারামিটার ও radius প্যারামিটার পাস করে নির্দিষ্ট এলাকার জন্য পক্ষপাতদুষ্ট ফলাফল দেখান। এটি 'জায়গা অটোমেটিক সম্পূর্ণ করা (লিগ্যাসি)' ফিচারকে নির্দিষ্ট এলাকার মধ্যে ফলাফল দেখানোর জন্য অগ্রাধিকার দিতে নির্দেশ দেয়। নির্দিষ্ট করা এলাকার বাইরের ফলাফল এখনও দেখানো হতে পারে। আপনি includedRegionCodes প্যারামিটার ব্যবহার করে ফলাফল ফিল্টার করতে পারেন যাতে শুধুমাত্র নির্দিষ্ট দেশের মধ্যে থাকা জায়গাগুলি দেখানো হয়।

লোকেশন সংক্রান্ত বিধিনিষেধ

locationRestriction প্যারামিটার পাস করে ফলাফল নির্দিষ্ট এলাকায় সীমাবদ্ধ করুন।

এছাড়াও, আপনি location এবং radius প্যারামিটার দ্বারা নির্ধারিত অঞ্চলে ফলাফল সীমাবদ্ধ করতে পারেন, এর জন্য strictbounds প্যারামিটার যোগ করতে হবে। এটি জায়গা অটোমেটিক সম্পূর্ণ করা (Legacy) ফিচারকে নির্দেশ দেয় যাতে সেটি শুধুমাত্র সেই অঞ্চলের মধ্যে ফলাফল দেখায়।

সমস্যার সমাধান

যদিও বিভিন্ন ধরনের সমস্যা হতে পারে, তবে আপনার অ্যাপে বেশিরভাগ সমস্যা সাধারণত কনফিগারেশন সংক্রান্ত সমস্যার কারণে (যেমন, ভুল API কী ব্যবহার করা হয়েছে বা API কী ভুলভাবে কনফিগার করা হয়েছে) বা কোটা সংক্রান্ত সমস্যার কারণে (আপনার অ্যাপ তার কোটা অতিক্রম করেছে) হতে পারে। কোটা সম্পর্কে আরও তথ্যের জন্য ব্যবহারের সীমা দেখুন।

অটোকমপ্লিট কন্ট্রোল ব্যবহার করার সময় কোনও সমস্যা হলে, তা onActivityResult() কলব্যাকে দেখানো হয়। ফলাফলের জন্য স্ট্যাটাস মেসেজ পেতে Autocomplete.getStatus()-এ কল করুন।