স্থান বিবরণ

ইউরোপিয়ান ইকোনমিক এরিয়া (EEA) ডেভেলপার

Android এর জন্য Places SDK স্থানের নাম এবং ঠিকানা, অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক হিসাবে নির্দিষ্ট ভৌগলিক অবস্থান, স্থানের ধরন (যেমন নাইট ক্লাব, পোষা প্রাণীর দোকান, যাদুঘর) এবং আরও অনেক কিছু সহ স্থান সম্পর্কে সমৃদ্ধ তথ্য সহ আপনার অ্যাপকে প্রদান করে৷ একটি নির্দিষ্ট স্থানের জন্য এই তথ্য অ্যাক্সেস করতে, আপনি স্থান আইডি ব্যবহার করতে পারেন, একটি স্থিতিশীল শনাক্তকারী যা একটি স্থানকে অনন্যভাবে সনাক্ত করে।

স্থান বিবরণ

Place বস্তু একটি নির্দিষ্ট স্থান সম্পর্কে তথ্য প্রদান করে। আপনি PlacesClient.fetchPlace() এ কল করে একটি Place অবজেক্ট ধরতে পারেন – আইডির মাধ্যমে একটি জায়গা পাওয়ার গাইড দেখুন।

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

কারণ স্থান ডেটা ফলাফল খালি হতে পারে না, শুধুমাত্র ডেটা সহ স্থানের ফলাফল ফেরত দেওয়া হয়৷ উদাহরণস্বরূপ, যদি অনুরোধ করা জায়গায় কোনও ফটো না থাকে, তাহলে ফলাফলে photos ক্ষেত্রটি উপস্থিত থাকবে না।

নিম্নলিখিত উদাহরণটি একটি অনুরোধ দ্বারা প্রত্যাবর্তিত ডেটা নির্দিষ্ট করতে তিনটি Place.Field মানগুলির একটি তালিকা পাস করে:

কোটলিন

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

জাভা

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

স্থান অবজেক্ট ডেটা ক্ষেত্র অ্যাক্সেস করুন

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

  • getAddress() - স্থানের ঠিকানা, মানুষের পাঠযোগ্য বিন্যাসে।
  • getAddressComponents() – এই জায়গার ঠিকানা উপাদানগুলির একটি List । এই উপাদানগুলি একটি স্থানের ঠিকানা সম্পর্কে কাঠামোগত তথ্য বের করার উদ্দেশ্যে প্রদান করা হয়, উদাহরণস্বরূপ একটি জায়গা যেখানে অবস্থিত সেই শহরটি খুঁজে বের করা। ঠিকানা বিন্যাসের জন্য এই উপাদানগুলি ব্যবহার করবেন না; পরিবর্তে, getAddress() কল করুন, যা একটি স্থানীয় ফর্ম্যাটেড ঠিকানা প্রদান করে।
  • getId() - স্থানটির পাঠ্য শনাক্তকারী। এই পৃষ্ঠার বাকি অংশে স্থান আইডি সম্পর্কে আরও পড়ুন।
  • getLatLng() - স্থানের ভৌগলিক অবস্থান, অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক হিসাবে নির্দিষ্ট করা হয়েছে।
  • getName() - জায়গার নাম।
  • getOpeningHours() - জায়গাটির OpeningHoursOpeningHours.getWeekdayText() কে কল করুন সপ্তাহের প্রতিটি দিনের জন্য খোলা এবং বন্ধ হওয়ার সময় উপস্থাপন করে এমন স্ট্রিংগুলির একটি তালিকা ফেরত দিতে। getWeekdayText() দ্বারা প্রদত্ত ডেটার সমতুল্য আরও বিস্তারিত তথ্য সহ period অবজেক্টের একটি তালিকা ফেরত দিতে OpeningHours.getPeriods() এ কল করুন।

    Place অবজেক্টে getCurrentOpeningHours() পদ্ধতিও রয়েছে যা পরবর্তী সাত দিনে একটি স্থানের কর্মঘণ্টা ফেরত দেয় এবং getSecondaryOpeningHours() যা পরবর্তী সাত দিনে একটি স্থানের সেকেন্ডারি ঘন্টার অপারেশন প্রদান করে।

  • isOpen() - একটি বুলিয়ান নির্দেশ করে যে জায়গাটি বর্তমানে খোলা আছে কিনা। যদি কোন সময় নির্দিষ্ট করা না থাকে, ডিফল্ট এখন। isOpen শুধুমাত্র যদি Place.Field.UTC_OFFSET এবং Place.Field.OPENING_HOURS উপলব্ধ থাকে তবেই ফেরত দেওয়া হবে৷ সঠিক ফলাফল নিশ্চিত করতে, আপনার আসল স্থানের অনুরোধে Place.Field.BUSINESS_STATUS এবং Place.Field.UTC_OFFSET ক্ষেত্রগুলির অনুরোধ করুন৷ যদি অনুরোধ না করা হয় তবে ধরে নেওয়া হয় যে ব্যবসাটি চালু আছে। স্থানের বিবরণ সহ isOpen কীভাবে ব্যবহার করবেন তার জন্য এই ভিডিওটি দেখুন।

কিছু উদাহরণ:

কোটলিন

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

      

জাভা

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

      

আইডি দ্বারা একটি স্থান পান

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

আইডি দ্বারা একটি স্থান পেতে, একটি FetchPlaceRequest পাস করে PlacesClient.fetchPlace() এ কল করুন।

API একটি Task একটি FetchPlaceResponse প্রদান করে। FetchPlaceResponse এ সরবরাহকৃত স্থানের আইডির সাথে মিলে যাওয়া একটি Place বস্তু রয়েছে।

নিম্নলিখিত কোড উদাহরণটি নির্দিষ্ট স্থানের বিবরণ পেতে fetchPlace() কল করা দেখায়।

কোটলিন

// 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")
        }
    }

      

জাভা

// 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.
    }
});

      

ওপেন স্ট্যাটাস পান

PlacesClient.isOpen(IsOpenRequest request) পদ্ধতি একটি IsOpenResponse অবজেক্ট প্রদান করে যা নির্দেশ করে যে কলে নির্দিষ্ট সময়ের উপর ভিত্তি করে স্থানটি বর্তমানে খোলা আছে কিনা।

এই পদ্ধতিটি IsOpenRequest টাইপের একটি একক আর্গুমেন্ট নেয় যাতে রয়েছে:

  • একটি Place বস্তু, বা একটি স্থান আইডি নির্দিষ্ট করে একটি স্ট্রিং।
  • একটি ঐচ্ছিক সময়ের মান যা 1970-01-01T00:00:00Z থেকে মিলিসেকেন্ডে সময় নির্দিষ্ট করে। যদি কোন সময় নির্দিষ্ট করা না থাকে, ডিফল্ট এখন।

এই পদ্ধতির জন্য নিম্নলিখিত ক্ষেত্রগুলি Place অবজেক্টে বিদ্যমান থাকা প্রয়োজন:

  • Place.Field.BUSINESS_STATUS
  • Place.Field.CURRENT_OPENING_HOURS
  • Place.Field.OPENING_HOURS
  • Place.Field.UTC_OFFSET

যদি এই ক্ষেত্রগুলি Place অবজেক্টে দেওয়া না থাকে, অথবা যদি আপনি একটি স্থান আইডি পাস করেন, তবে পদ্ধতিটি তাদের আনার জন্য PlacesClient.fetchPlace() ব্যবহার করে। প্রয়োজনীয় ক্ষেত্রগুলির সাথে প্লেস অবজেক্ট তৈরি করার বিষয়ে আরও তথ্যের জন্য, স্থানের বিবরণ দেখুন।

নিচের উদাহরণটি নির্ধারণ করে যে একটি জায়গা বর্তমানে খোলা আছে কিনা। এই উদাহরণে, আপনি শুধুমাত্র isOpen() এ স্থান আইডি পাস করেন:

কোটলিন

val isOpenCalendar: Calendar = Calendar.getInstance()
val placeId = PlaceIdProvider.getRandomPlaceId()

val request: IsOpenRequest = try {
    IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis)
} catch (e: IllegalArgumentException) {
    Log.e("PlaceIsOpen", "Error: " + e.message)
    return
}
val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request)
isOpenTask.addOnSuccessListener { response ->
    val isOpen = response.isOpen ?: false
    binding.isOpenByIdResult.text = getString(R.string.is_open_by_id, isOpen.toString())
    Log.d("PlaceIsOpen", "Is open by ID: $isOpen")
}
// ...

      

জাভা

@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = PlaceIdProvider.getRandomPlaceId();
IsOpenRequest isOpenRequest;

try {
    isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis());
} catch (IllegalArgumentException e) {
    Log.e("PlaceIsOpen", "Error: " + e.getMessage());
    return;
}

Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest);

placeTask.addOnSuccessListener(
        (response) -> {
            final boolean isOpen = Boolean.TRUE.equals(response.isOpen());
            binding.isOpenByIdResult.setText(getString(R.string.is_open_by_id, String.valueOf(isOpen)));
            Log.d("PlaceIsOpen", "Is open by ID: " + isOpen);
        });
placeTask.addOnFailureListener((exception) -> {
    binding.isOpenByIdResult.setText(getString(R.string.is_open_by_id, "Error: " + exception.getMessage()));
    Log.e("PlaceIsOpen", "Error: " + exception.getMessage());
});

      

পরবর্তী উদাহরণটি isOpen() কল করা দেখায় যেখানে আপনি একটি Place অবজেক্ট পাস করেন। Place অবজেক্টে অবশ্যই একটি বৈধ জায়গা আইডি থাকতে হবে:

কোটলিন

val isOpenCalendar: Calendar = Calendar.getInstance()
var place: Place
val placeId = PlaceIdProvider.getRandomPlaceId()
// Specify the required fields for an isOpen request.
val placeFields: List<Place.Field> = listOf(
    Place.Field.BUSINESS_STATUS,
    Place.Field.CURRENT_OPENING_HOURS,
    Place.Field.ID,
    Place.Field.OPENING_HOURS,
    Place.Field.DISPLAY_NAME
)

val placeRequest: FetchPlaceRequest =
    FetchPlaceRequest.newInstance(placeId, placeFields)
val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest)
placeTask.addOnSuccessListener { placeResponse ->
    place = placeResponse.place

    val isOpenRequest: IsOpenRequest = try {
        IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis)
    } catch (e: IllegalArgumentException) {
        Log.e("PlaceIsOpen", "Error: " + e.message)
        return@addOnSuccessListener
    }
    val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest)
    isOpenTask.addOnSuccessListener { isOpenResponse ->
        val isOpen = when (isOpenResponse.isOpen) {
            true -> getString(R.string.is_open)
            else -> getString(R.string.is_closed)
        }
        binding.isOpenByObjectResult.text = getString(
            R.string.is_open_by_object,
            place.displayName,
            isOpen
        )
        Log.d("PlaceIsOpen", "Is open by object: $isOpen")
    }
    // ...
}
// ...

      

জাভা

@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = PlaceIdProvider.getRandomPlaceId();
// Specify the required fields for an isOpen request.
List<Place.Field> placeFields = new ArrayList<>(Arrays.asList(
        Place.Field.BUSINESS_STATUS,
        Place.Field.CURRENT_OPENING_HOURS,
        Place.Field.ID,
        Place.Field.OPENING_HOURS,
        Place.Field.DISPLAY_NAME
));

FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);
Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request);

placeTask.addOnSuccessListener(
        (placeResponse) -> {
            Place place = placeResponse.getPlace();
            IsOpenRequest isOpenRequest;

            try {
                isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis());
            } catch (IllegalArgumentException e) {
                Log.e("PlaceIsOpen", "Error: " + e.getMessage());
                return;
            }
            Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest);

            isOpenTask.addOnSuccessListener(
                    (isOpenResponse) -> {
                        final boolean isOpen = Boolean.TRUE.equals(isOpenResponse.isOpen());
                        binding.isOpenByObjectResult.setText(getString(R.string.is_open_by_object, place.getDisplayName(), String.valueOf(isOpen)));
                        Log.d("PlaceIsOpen", "Is open by object: " + isOpen);
                    });
            isOpenTask.addOnFailureListener(
                    (exception) -> { // also update the result text field
                        binding.isOpenByObjectResult.setText(getString(R.string.is_open_by_object, place.getDisplayName(), "Error: " + exception.getMessage()));
                        Log.e("PlaceIsOpen", "Error: " + exception.getMessage());
                    });
        });
placeTask.addOnFailureListener(
        (exception) -> {
            binding.isOpenByObjectResult.setText("Error: " + exception.getMessage());
            Log.e("PlaceIsOpen", "Error: " + exception.getMessage());

      

আপনার অ্যাপে বৈশিষ্ট্য প্রদর্শন করুন

যখন আপনার অ্যাপ স্থানের পর্যালোচনা সহ স্থান সংক্রান্ত তথ্য প্রদর্শন করে, তখন অ্যাপটিকে অবশ্যই যেকোন বৈশিষ্ট্যও প্রদর্শন করতে হবে। আরও তথ্যের জন্য, বৈশিষ্ট্য দেখুন।

স্থান আইডি সম্পর্কে আরো

Android এর জন্য Places SDK-এ ব্যবহৃত প্লেস আইডি একই আইডেন্টিফায়ার যেমন Places API- তে ব্যবহৃত হয়। প্রতিটি স্থানের আইডি শুধুমাত্র একটি স্থান উল্লেখ করতে পারে, কিন্তু একটি একক স্থানে একাধিক স্থানের আইডি থাকতে পারে। এমন অন্যান্য পরিস্থিতি রয়েছে যার কারণে একটি নতুন জায়গার আইডি পেতে পারে। উদাহরণস্বরূপ, এটি ঘটতে পারে যদি একটি ব্যবসা একটি নতুন অবস্থানে চলে যায়।

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

আরও তথ্যের জন্য, স্থান আইডি ওভারভিউ দেখুন।