Places SDK สำหรับ iOS ให้ข้อมูลที่สมบูรณ์เกี่ยวกับสถานที่แก่แอปของคุณ ซึ่งรวมถึงชื่อและที่อยู่ของสถานที่ ตำแหน่งทางภูมิศาสตร์ที่ระบุเป็นพิกัดละติจูด/ลองจิจูด ประเภทของสถานที่ (เช่น ไนต์คลับ ร้านขายสัตว์เลี้ยง พิพิธภัณฑ์) และอื่นๆ หากต้องการเข้าถึงข้อมูลนี้สำหรับสถานที่ที่เจาะจง คุณสามารถใช้รหัสสถานที่ ซึ่งเป็นตัวระบุที่คงที่ซึ่งระบุสถานที่หนึ่งๆ โดยไม่ซ้ำกัน
รายละเอียดสถานที่
คลาส GMSPlace จะให้ข้อมูลเกี่ยวกับสถานที่ที่เฉพาะเจาะจง คุณรับออบเจ็กต์ GMSPlace ได้ด้วยวิธีต่อไปนี้
- โทรหา
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:ดูคำแนะนำในการรับสถานที่ปัจจุบัน - เรียก
GMSPlacesClient fetchPlaceFromPlaceID:โดยส่งGMSPlaceField, รหัสสถานที่ และเมธอด Callback สำหรับคำขอรายละเอียดสถานที่ หากคุณไม่ได้ระบุฟิลด์อย่างน้อย 1 ฟิลด์พร้อมคำขอ หรือหากคุณละเว้นพารามิเตอร์fieldsจากคำขอ ระบบจะแสดงผลฟิลด์ที่เป็นไปได้ทั้งหมด และคุณจะถูกเรียกเก็บเงินตามนั้น ดูคำแนะนำเกี่ยวกับการรับสถานที่ตามรหัส
เมื่อขอสถานที่ คุณต้องระบุประเภทข้อมูลสถานที่ที่จะแสดงผล โดยส่ง 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 รหัส
มีบางสถานการณ์ที่อาจทำให้สถานที่ได้รับรหัสสถานที่ใหม่ เช่น กรณีนี้อาจเกิดขึ้นหากธุรกิจย้ายไปยังสถานที่ตั้งใหม่
เมื่อขอสถานที่โดยระบุรหัสสถานที่ คุณมั่นใจได้ว่าจะได้รับสถานที่เดียวกันในการตอบกลับเสมอ (หากสถานที่นั้นยังคงอยู่) อย่างไรก็ตาม โปรดทราบว่าการตอบกลับอาจมีรหัสสถานที่ที่แตกต่างจากรหัสในคำขอของคุณ
ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมรหัสสถานที่