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

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 จะเป็นค่า Null
  • 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: โดยส่งพารามิเตอร์ต่อไปนี้

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

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

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 API อื่นๆ

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

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

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

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