รายละเอียดสถานที่

Places SDK สำหรับ iOS ให้ข้อมูลที่สมบูรณ์เกี่ยวกับสถานที่แก่แอปของคุณ ซึ่งรวมถึงชื่อและที่อยู่ของสถานที่ ตำแหน่งทางภูมิศาสตร์ที่ระบุเป็นพิกัดละติจูด/ลองจิจูด ประเภทของสถานที่ (เช่น ไนต์คลับ ร้านขายสัตว์เลี้ยง พิพิธภัณฑ์) และอื่นๆ หากต้องการเข้าถึงข้อมูลนี้สำหรับสถานที่ที่เจาะจง คุณสามารถใช้รหัสสถานที่ ซึ่งเป็นตัวระบุที่คงที่ซึ่งระบุสถานที่หนึ่งๆ โดยไม่ซ้ำกัน

รายละเอียดสถานที่

คลาส GMSPlace จะให้ข้อมูลเกี่ยวกับสถานที่ที่เฉพาะเจาะจง คุณรับออบเจ็กต์ GMSPlace ได้ด้วยวิธีต่อไปนี้

เมื่อขอสถานที่ คุณต้องระบุประเภทข้อมูลสถานที่ที่จะแสดงผล โดยส่ง GMSPlaceField ซึ่งระบุประเภทข้อมูลที่จะแสดงผล ซึ่งเป็นข้อควรพิจารณาที่สำคัญ เนื่องจากจะส่งผลต่อค่าใช้จ่ายสำหรับคำขอแต่ละรายการ

เนื่องจากผลลัพธ์ข้อมูลสถานที่ต้องไม่ว่างเปล่า ระบบจึงจะแสดงเฉพาะผลลัพธ์สถานที่ที่มีข้อมูลเท่านั้น (เช่น หากสถานที่ที่ขอไม่มีรูปภาพ ช่อง photos จะไม่แสดงในผลลัพธ์)

ตัวอย่างต่อไปนี้จะส่งรายการค่าในช่อง 2 ค่าเพื่อระบุข้อมูลที่คำขอแสดงผล

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 – ที่อยู่ที่มนุษย์อ่านได้ของสถานที่ตั้งนี้

    ซึ่งมักจะเป็นที่อยู่เดียวกับที่อยู่ทางไปรษณีย์ โปรดทราบว่าบางประเทศ เช่น สหราชอาณาจักร ไม่อนุญาตให้เผยแพร่ที่อยู่ทางไปรษณีย์จริงเนื่องจากข้อจำกัดด้านการอนุญาตให้ใช้สิทธิ

    ที่อยู่ที่จัดรูปแบบจะประกอบด้วยคอมโพเนนต์ที่อยู่อย่างน้อย 1 รายการตามหลักตรรกะ เช่น ที่อยู่ "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
    }
}

ดูสถานที่ตามรหัส

รหัสสถานที่เป็นตัวระบุข้อความที่ระบุสถานที่โดยไม่ซ้ำกัน ใน Places SDK สำหรับ iOS คุณสามารถดึงรหัสของสถานที่จากออบเจ็กต์ GMSPlace ได้ คุณสามารถจัดเก็บรหัสสถานที่และใช้เพื่อดึงข้อมูลออบเจ็กต์ GMSPlace อีกครั้งในภายหลังได้

หากต้องการดูสถานที่ตามรหัส ให้เรียกใช้ GMSPlacesClient fetchPlaceFromPlaceID: โดยส่งพารามิเตอร์ต่อไปนี้

  • สตริงที่มีรหัสสถานที่
  • GMSPlaceField อย่างน้อย 1 รายการที่ระบุประเภทข้อมูลที่จะแสดงผล
  • โทเค็นของเซสชันหากมีการเรียกใช้เพื่อสรุปคำค้นหาที่เติมข้อความอัตโนมัติ หรือส่งค่า nil
  • GMSPlaceResultCallback เพื่อจัดการผลลัพธ์

API จะเรียกใช้เมธอด Callback ที่ระบุ โดยส่งออบเจ็กต์ GMSPlace เข้ามา หากไม่พบสถานที่ ออบเจ็กต์สถานที่นั้นจะไม่มีค่า

Places Swift SDK สำหรับ iOS

// 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: แอปจะต้องแสดงการระบุแหล่งที่มาด้วย ดูเอกสารประกอบเกี่ยวกับการระบุแหล่งที่มา

ข้อมูลเพิ่มเติมเกี่ยวกับรหัสสถานที่

รหัสสถานที่ที่ใช้ใน Places SDK สำหรับ iOS เป็นตัวระบุเดียวกับที่ใช้ใน Places API, Places SDK สำหรับ Android และ Google APIs อื่นๆ

รหัสสถานที่แต่ละรหัสจะอ้างอิงถึงสถานที่ได้เพียงแห่งเดียว แต่สถานที่แห่งเดียวอาจมีรหัสสถานที่ได้มากกว่า 1 รหัส

มีบางสถานการณ์ที่อาจทำให้สถานที่ได้รับรหัสสถานที่ใหม่ เช่น กรณีนี้อาจเกิดขึ้นหากธุรกิจย้ายไปยังสถานที่ตั้งใหม่

เมื่อขอสถานที่โดยระบุรหัสสถานที่ คุณมั่นใจได้ว่าจะได้รับสถานที่เดียวกันในการตอบกลับเสมอ (หากสถานที่นั้นยังคงอยู่) อย่างไรก็ตาม โปรดทราบว่าการตอบกลับอาจมีรหัสสถานที่ที่แตกต่างจากรหัสในคำขอของคุณ

ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมรหัสสถานที่