জায়গার বিবরণ

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

স্থানের বিবরণ

এই GMSPlace ক্লাস নির্দিষ্ট কোনও জায়গা সম্পর্কে তথ্য প্রদান করে। আপনি নিম্নলিখিত উপায়ে GMSPlace অবজেক্ট পেতে পারেন:

আপনি কোনও জায়গার জন্য অনুরোধ করলে, কোন ধরনের জায়গার ডেটা ফেরাতে হবে তা আপনাকে নির্দিষ্ট করতে হবে। এটি করতে, GMSPlaceField পাস করুন, ডেটার ধরন উল্লেখ করে ফেরত পাঠান। এটি একটি গুরুত্বপূর্ণ বিবেচনা, কারণ এটি প্রতিটি অনুরোধের খরচকে প্রভাবিত করবে।

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

নিম্নলিখিত উদাহরণে দুটি ফিল্ড ভ্যালুর তালিকা পাস করা হয় যাতে অনুরোধের মাধ্যমে ফেরত আসা ডেটা নির্দিষ্ট করা যায়:

Swift

      // A hotel in Saigon with an attribution.
      let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

      // Specify the place data types to return.
      let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
      UInt(GMSPlaceField.placeID.rawValue))
  

Objective-C

      // A hotel in Saigon with an attribution.
      NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

      // Specify the place data types to return.
      GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
  

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

GMSPlace ক্লাসে নিম্নলিখিত জায়গার ডেটা থাকতে পারে:

  • name – জায়গাটির নাম।
  • editorialSummary – কোনও জায়গার বিবরণ দেয়।
  • placeID – জায়গার টেক্সচুয়াল শনাক্তকারী। এই পৃষ্ঠার বাকি অংশে জায়গা আইডি সম্পর্কে আরও পড়ুন।
  • coordinate – জায়গাটির ভৌগোলিক লোকেশন, যা অক্ষাংশ ও দ্রাঘিমাংশ কোঅর্ডিনেট হিসেবে নির্দিষ্ট করা হয়েছে।
  • phoneNumber – জায়গাটির ফোন নম্বর, আন্তর্জাতিক ফর্ম্যাটে।
  • formattedAddress – এই লোকেশনের মানুষের-পঠনযোগ্য ঠিকানা।

    সাধারণত এই ঠিকানা পোস্টাল ঠিকানার সমতুল্য হয়। মনে রাখবেন, যুক্তরাজ্য সহ কিছু দেশে লাইসেন্সিং সংক্রান্ত বিধিনিষেধের কারণে আসল ডাক ঠিকানা ডিস্ট্রিবিউট করার অনুমতি দেওয়া হয় না।

    ফর্ম্যাট করা ঠিকানা এক বা একাধিক ঠিকানার কম্পোনেন্ট নিয়ে গঠিত। যেমন, "111 8th Avenue, New York, NY" ঠিকানায় নিম্নলিখিত উপাদানগুলি রয়েছে: "111" (রাস্তার নম্বর), "8th Avenue" (রুট), "New York" (শহর) এবং "NY" (মার্কিন যুক্তরাষ্ট্রের রাজ্য)।

    প্রোগ্রাম্যাটিক উপায়ে ফর্ম্যাট করা ঠিকানা পার্স করবেন না। পরিবর্তে, আপনাকে ঠিকানার আলাদা আলাদা অংশ ব্যবহার করতে হবে, যা API রেসপন্সে ফর্ম্যাট করা ঠিকানা ফিল্ডের পাশাপাশি অন্তর্ভুক্ত থাকে।

  • openingHours – জায়গাটি খোলা থাকার সময় (যেমন GMSOpeningHours দ্বারা দেখানো হয়েছে)। কল করে GMSOpeningHours.weekdayText সপ্তাহের জন্য প্রতিদিনের খোলা থাকার সময়ের স্থানীয় স্ট্রিংয়ের তালিকা পান। GMSOpeningHours.Periods-এ কল করুন GMSPeriod-এর একটি তালিকা পেতে, যাতে আরও বিস্তারিত তথ্য থাকে যা weekdayText-এর দেওয়া ডেটার সমতুল্য। মনে রাখবেন: কোনও জায়গা সবসময় খোলা থাকলে, সময়সীমাটি রবিবার মধ্যরাত হিসেবে দেখানো হয় এবং closeEvent হল শূন্য।
  • currentOpeningHours ও secondaryOpeningHours – কোনও জায়গার জন্য ছুটির দিন ও শিডিউলে অস্থায়ী পরিবর্তন সংক্রান্ত ফিল্ড।
  • addressComponents – কোনও জায়গার ঠিকানার কম্পোনেন্টকে উপস্থাপনকারী GMSAddressComponent অবজেক্টের একটি অ্যারে। এইসব কম্পোনেন্ট কোনও জায়গার ঠিকানা সম্পর্কে স্ট্রাকচার্ড তথ্য এক্সট্র্যাক্ট করার উদ্দেশ্যে প্রদান করা হয়, যেমন কোনও জায়গা কোন শহরে অবস্থিত তা খুঁজে বের করা। ঠিকানা ফর্ম্যাটিংয়ের জন্য এইসব কম্পোনেন্ট ব্যবহার করবেন না ; পরিবর্তে, formattedAddress প্রপার্টি ব্যবহার করুন, যা একটি লোকাল ফর্ম্যাট করা ঠিকানা প্রদান করে।

    addressComponents অ্যারে সম্পর্কে নিম্নলিখিত তথ্য মনে রাখবেন:

    • ঠিকানার কম্পোনেন্টের অ্যারেতে formattedAddress-এর থেকে বেশি কম্পোনেন্ট থাকতে পারে।
    • অ্যারেতে ঠিকানা আছে এমন সব রাজনৈতিক সত্তাকে অন্তর্ভুক্ত করতে হবে না, তবে formattedAddress-এ অন্তর্ভুক্ত রাজনৈতিক সত্তাকে অন্তর্ভুক্ত করতে হবে।
    • অনুরোধের মধ্যে উত্তরের ফর্ম্যাট একই থাকবে কিনা তার কোনও গ্যারান্টি নেই। বিশেষ করে, অনুরোধ করা ঠিকানার উপর ভিত্তি করে addressComponents সংখ্যাটি পরিবর্তিত হয় এবং একই ঠিকানার জন্য সময়ের সাথে সাথে পরিবর্তিত হতে পারে। অ্যারের মধ্যে কোনও কম্পোনেন্টের পজিশন পরিবর্তন হতে পারে। কম্পোনেন্টের ধরন পরিবর্তন হতে পারে। পরবর্তী উত্তরে কোনও বিশেষ কম্পোনেন্ট উল্লেখ করা নাও থাকতে পারে।
  • userRatingsTotal – কতগুলি রিভিউয়ের ভিত্তিতে জায়গার রেটিং নির্ধারণ করা হয়েছে তা দেখায়।

GMSPlace ক্লাসে নিম্নলিখিত মেম্বার ফাংশন রয়েছে:

  • isOpen গণনা করে দেখে যে প্রদত্ত সময়ে কোনও জায়গা খোলা আছে কিনা, openingHours এবং UTCOffsetMinutes এবং বর্তমান তারিখ ও সময়ের উপর ভিত্তি করে এটি করা হয়।
  • isOpenAtDate openingHours এবং UTCOffsetMinutes, এবং বর্তমান তারিখ ও সময়ের উপর ভিত্তি করে, কোনও জায়গা নির্দিষ্ট তারিখে খোলা আছে কিনা তা গণনা করে।
  • খোলার সময় এবং/অথবা তারিখ পাওয়ার জন্য এইসব ফাংশন ব্যবহার করার সময়, আসল fetchPlaceFromPlaceID: বা findPlaceLikelihoodsFromUserLocationWithPlaceFields: অনুরোধে অবশ্যই GMSPlaceFieldOpeningHours এবং GMSPlaceFieldUTCOffsetMinutes দুটি ফিল্ডই উল্লেখ করতে হবে। এই ফিল্ডগুলির মধ্যে কোনও একটি না থাকলে, ফলাফল হিসেবে পাওয়া GMSPlace অবজেক্টে খোলার সময় বা তারিখ থাকবে না এবং কলটি GMSPlaceOpenStatusUnknown রিটার্ন করবে। সঠিক ফলাফল পেতে, আপনার মূল প্লেস অনুরোধে GMSPlaceFieldBusinessStatus এবং GMSPlaceFieldUTCOffsetMinutes ফিল্ডের জন্য অনুরোধ করুন। অনুরোধ করা না হলে, ধরে নেওয়া হয় যে ব্যবসাটি চালু আছে।

    জায়গার বিবরণের সাথে isOpen কীভাবে ব্যবহার করতে হয় তা জানতে, খোলা থাকার সময় সংক্রান্ত ভিডিও কীভাবে পাবেন দেখুন।

ব্যতিক্রমী সময় পান

openingHours-এর মাধ্যমে নিয়মিত খোলা থাকার সময় পাওয়া গেলেও, currentOpeningHours এবং secondaryOpeningHours ছুটির দিন ও সাময়িক শিডিউল পরিবর্তন সংক্রান্ত তথ্য প্রদান করে। এইসব বিশেষ দিনের জন্য ব্যতিক্রমী সময় উপলভ্য থাকলে তা ফিল্টার করে দেখানো যেতে পারে।

Swift

    func examineOpeningHours(place: GMSPlace) {

      // Check if the current opening hours contains a special day that has exceptional hours
      guard let currentOpeningHours = place.currentOpeningHours else { return }
      if let specialDays = currentOpeningHours.specialDays {
        guard !specialDays.isEmpty else { return }
        if let specialDay = specialDays.filter { $0.isExceptional }.first  {
          // Indicate exceptional hours
        }
      }

      // Check if current opening hours contains a truncated time period
      let periods = currentOpeningHours.periods

      if !periods.isEmpty {
        for period in periods {
          let open = period.open
          let close = period.close

          if let open = open {
            let date = open.date

            if open.isTruncated {
              // Indicate truncated time period
            }
          }
        }
      }

      // Check if the place's secondary opening hours indicate when delivery is available
      let secondaryOpeningHours = place.secondaryOpeningHours
      guard let hoursType = secondaryOpeningHours.first?.hoursType else {
      return
      }

      if (hoursType == GMSPlaceHoursTypeDelivery) {
        // Indicate hours where delivery is available
      }
  }

Objective-C

- (void)examineOpeningHours:(GMSPlace *) place {

    // Check if the current opening hours contains a special day that has exceptional hours
    GMSOpeningHours *currentOpeningHours = place.currentOpeningHours;
    if (currentOpeningHours != nil) {
      NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays;
      if ([specialDays count] != 0) {
        for (GMSPlaceSpecialDay *specialDay in specialDays) {
          NSDate *date = specialDay.date;
          if ([specialDay isExceptional]) {
            // Indicate exceptional hours
          }
        }
      }
    }

    // Check if current opening hours contains a truncated time period
    NSArray <GMSPeriod *> * periods = currentOpeningHours.periods;

    if ([periods count] != 0) {
      for (GMSPeriod * period in periods) {
        GMSTimeOfWeek *open = period.open;
        GMSTimeOfWeek *close = period.close;

        if (open) {
          if ([open isTruncated]) {
            // Indicate truncated time period
          }
        }
      }
    }

    // Check if the place's secondary opening hours indicate when delivery is available
    GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours;
    GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType;

    if (hoursType == GMSPlaceHoursTypeDelivery) {
      // Indicate hours where delivery is available
    }
}

আইডি দিয়ে কোনও জায়গা সম্পর্কে তথ্য পাওয়া

প্লেস আইডি হল একটি টেক্সচুয়াল শনাক্তকারী যা কোনও জায়গাকে অনন্যভাবে শনাক্ত করে। iOS-এর জন্য Places SDK-তে, আপনি কোনও GMSPlace অবজেক্ট থেকে কোনও জায়গার আইডি রিট্রিভ করতে পারবেন। আপনি প্লেস আইডি স্টোর করতে এবং পরে আবার অবজেক্ট GMSPlace রিট্রিভ করতে এটি ব্যবহার করতে পারবেন।

আইডি দিয়ে কোনও জায়গা পেতে, নিম্নলিখিত প্যারামিটার পাস করিয়ে GMSPlacesClient fetchPlaceFromPlaceID:-এ কল করুন:

  • একটি স্ট্রিং যাতে একটি স্থান আইডি রয়েছে।
  • ফেরত পাঠানোর জন্য ডেটার ধরন নির্দিষ্ট করে এক বা একাধিক GMSPlaceField।
  • অটোকমপ্লিট কোয়েরি সম্পূর্ণ করার জন্য কল করা হলে সেশন টোকেন। অন্যথায়, nil পাস করুন।
  • ফলাফল ম্যানেজ করার জন্য GMSPlaceResultCallback।

API নির্দিষ্ট কলব্যাক পদ্ধতিকে কল করে, GMSPlace অবজেক্টে পাস করে। জায়গাটি খুঁজে পাওয়া না গেলে, জায়গা অবজেক্টটি শূন্য হবে।

iOS-এর জন্য Places Swift SDK

// Initialize Places Swift Client.
let placesClient = PlacesClient.shared

// A hotel in Saigon with an attribution
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
    
// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(
  placeID: placeID,
  placeProperties: [.displayName]
)
    
Task {
  switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
  case .success(let place):
    print("The selected place is: \(place.displayName): \(String(describing: place.description))")
  case .failure(let placesError):
    print("Place not found: \(placeID); \(placesError)")
  }
}

Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
  UInt(GMSPlaceField.placeID.rawValue))!

placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: {
  (place: GMSPlace?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }
  if let place = place {
    self.lblName?.text = place.name
    print("The selected place is: \(place.name)")
  }
})

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);

[_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (place != nil) {
    NSLog(@"The selected place is: %@", [place name]);
  }
}];

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

আপনার অ্যাপে GMSPlacesClient lookUpPlaceID:callback: থেকে পাওয়া তথ্য দেখানো হলে, অ্যাপে অ্যাট্রিবিউশনও দেখাতে হবে। অ্যাট্রিবিউশন সম্পর্কিত ডকুমেন্টেশন দেখুন।

প্লেস আইডি সম্পর্কে আরও জানুন

iOS-এর জন্য Places SDK-তে ব্যবহৃত প্লেস আইডি হল একই শনাক্তকারী যা Places API, Android-এর জন্য Places SDK এবং অন্যান্য Google API-তে ব্যবহৃত হয়।

প্রতিটি প্লেস আইডি শুধুমাত্র একটি জায়গাকেই রেফার করতে পারে, কিন্তু একটি জায়গার একাধিক প্লেস আইডি থাকতে পারে।

এমন কিছু পরিস্থিতি আছে যার কারণে কোনও জায়গার নতুন প্লেস আইডি তৈরি হতে পারে। যেমন, কোনও ব্যবসা নতুন লোকেশনে চলে গেলে এটি হতে পারে।

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

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