การค้นหาข้อความ (ใหม่) แสดงข้อมูลเกี่ยวกับชุดสถานที่ตามสตริง (เช่น "พิซซ่า ในนิวยอร์ก" หรือ "ร้านขายรองเท้าใกล้ออตตาวา" หรือ "123 Main Street") บริการจะ ตอบกลับด้วยรายการสถานที่ที่ตรงกับสตริงข้อความและอคติทางตำแหน่ง ที่ตั้งไว้
นอกเหนือจากพารามิเตอร์ที่จำเป็นแล้ว การค้นหาข้อความ (ใหม่) ยังรองรับการปรับแต่งคำค้นหาโดยใช้พารามิเตอร์ที่ไม่บังคับเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
รับรายการสถานที่โดยการค้นหาข้อความ
ส่งคำขอค้นหาข้อความโดยเรียกใช้ GMSPlacesClient
searchByTextWithRequest:
ส่งออบเจ็กต์
GMSPlaceSearchByTextRequest
ที่กำหนดพารามิเตอร์คำขอและเมธอดเรียกกลับของประเภท
GMSPlaceSearchByTextResultCallback
เพื่อจัดการการตอบกลับ
ออบเจ็กต์ GMSPlaceSearchByTextRequest จะระบุพารามิเตอร์ที่จำเป็นและที่ไม่บังคับทั้งหมด
สำหรับคำขอ พารามิเตอร์ที่จำเป็นมีดังนี้
- รายการฟิลด์ที่จะแสดงในออบเจ็กต์
GMSPlaceหรือที่เรียกว่ามาสก์ฟิลด์ตามที่กำหนดโดยGMSPlacePropertyหากคุณไม่ได้ระบุฟิลด์อย่างน้อย 1 รายการในรายการฟิลด์ หรือหากคุณละเว้น รายการฟิลด์ การเรียกจะแสดงข้อผิดพลาด - คำค้นหาที่เป็นข้อความ
คำขอค้นหาข้อความตัวอย่างนี้ระบุว่าออบเจ็กต์ GMSPlace ในการตอบกลับ
ต้องมีชื่อสถานที่และรหัสสถานที่สำหรับออบเจ็กต์ GMSPlace แต่ละรายการในผลการค้นหา
นอกจากนี้ ยังกรองการตอบกลับเพื่อแสดงเฉพาะสถานที่ประเภท "ร้านอาหาร" ด้วย
Places Swift SDK
let restriction = GMSPlaceRectangularLocationOption( northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30), southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50) ) let searchByTextRequest = SearchByTextRequest( textQuery: "pizza in New York", placeProperties: [ .name, .placeID ], locationRestriction: restriction, includedType: .restaurant, maxResultCount: 5, minRating: 3.5, priceLevels: [ .moderate, .inexpensive ], isStrictTypeFiltering: true ) switch await placesClient.searchByText(with: searchByTextRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Swift
// Create the GMSPlaceSearchByTextRequest object. let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue} let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties) request.isOpenNow = true request.includedType = "restaurant" request.maxResultCount = 5 request.minRating = 3.5 request.rankPreference = .distance request.isStrictTypeFiltering = true request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0) // Array to hold the places in the response var placeResults: [GMSPlace] = [] let callback: GMSPlaceSearchByTextResultCallback = { [weak self] results, error in guard let self, error == nil else { if let error { print(error.localizedDescription) } return } guard let results = results as? [GMSPlace] else { return } placeResults = results } GMSPlacesClient.shared().searchByText(with: request, callback: callback)
Objective-C
// Create the GMSPlaceSearchByTextRequest object. GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]]; request.isOpenNow = YES; request.includedType = @"restaurant"; request.maxResultCount = 5; request.minRating = 3.5; request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance; request.isStrictTypeFiltering = YES; request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ]; request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0); // Array to hold the places in the response _placeResults = [NSArray array]; // Create the GMSPlaceSearchByTextRequest object. [_placesClient searchByTextWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable placeResults, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { if (placeResults.count > 0) { // Get list of places. _placeResults = placeResults; } } } ];
คำตอบการค้นหาข้อความ
Text Search API จะแสดงผลอาร์เรย์ของการจับคู่ในรูปแบบของออบเจ็กต์
GMSPlace
โดยมีออบเจ็กต์ GMSPlace 1 รายการต่อสถานที่ที่ตรงกัน
ดูสถานะการเปิด
ออบเจ็กต์ GMSPlacesClient มีฟังก์ชันสมาชิกที่ชื่อ isOpenWithRequest (isOpenRequest ใน Swift และ isPlaceOpenRequest ใน GooglePlacesSwift) ซึ่งจะแสดงผลการตอบกลับที่ระบุว่าสถานที่เปิดอยู่หรือไม่ในขณะนั้น โดยอิงตามเวลาที่ระบุในการเรียก
เมธอดนี้รับอาร์กิวเมนต์เดียวประเภท GMSPlaceIsOpenWithRequest ซึ่งมีข้อมูลต่อไปนี้
- ออบเจ็กต์
GMSPlaceหรือสตริงที่ระบุรหัสสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างออบเจ็กต์ Place ที่มีฟิลด์ที่จำเป็นได้ที่รายละเอียดสถานที่
- ออบเจ็กต์
NSDate(Obj-C) หรือDate(Swift) ที่ไม่บังคับซึ่งระบุเวลาที่คุณต้องการตรวจสอบ หากไม่ได้ระบุเวลา ค่าเริ่มต้นจะเป็นเวลาปัจจุบัน GMSPlaceOpenStatusResponseCallbackวิธีจัดการการตอบกลับ >
เมธอด GMSPlaceIsOpenWithRequest ต้องตั้งค่าฟิลด์ต่อไปนี้ในออบเจ็กต์ GMSPlace
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
หากไม่ได้ระบุช่องเหล่านี้ในออบเจ็กต์สถานที่ หรือหากคุณส่งรหัสสถานที่ เมธอดจะใช้ GMSPlacesClient GMSFetchPlaceRequest: เพื่อดึงข้อมูล
การตอบกลับ isOpenWithRequest รายการ
isOpenWithRequest จะแสดงออบเจ็กต์ GMSPlaceIsOpenResponse ที่มีค่าบูลีนชื่อ status ซึ่งระบุว่าธุรกิจเปิด ปิด หรือไม่ทราบสถานะ
| ภาษา | มูลค่าหากเปิด | มูลค่าหากปิด | ค่าหากไม่ทราบสถานะ |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
การเรียกเก็บเงินสำหรับ isOpenWithRequest
- ระบบจะเรียกเก็บเงินฟิลด์
GMSPlacePropertyUTCOffsetMinutesและGMSPlacePropertyBusinessStatusภายใต้ SKU ข้อมูลพื้นฐาน ส่วนเวลาเปิดทำการที่เหลือจะมีการเรียกเก็บเงินภายใต้ SKU ของรายละเอียดสถานที่สำหรับองค์กร - หาก
GMSPlaceออบเจ็กต์มีฟิลด์เหล่านี้อยู่แล้วจากคำขอก่อนหน้า ระบบจะไม่เรียกเก็บเงินจากคุณอีก
ตัวอย่าง: ส่งGMSPlaceIsOpenWithRequestคำขอ
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มต้น GMSPlaceIsOpenWithRequest ภายในออบเจ็กต์ GMSPlace ที่มีอยู่
Places Swift SDK
let isOpenRequest = IsPlaceOpenRequest(place: place) switch await placesClient.isPlaceOpen(with: isOpenRequest) { case .success(let isOpenResponse): switch isOpenResponse.status { case true: // Handle open case false: // Handle closed case nil: // Handle unknown case .failure(let placesError): // Handle error }
Swift
let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil) GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in if let error = error { // Handle Error } switch response.status { case .open: // Handle open case .closed: // Handle closed case .unknown: // Handle unknown } }
Objective-C
GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil]; [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) { if (error) { // Handle error } switch (response.status) { case GMSPlaceOpenStatusOpen: // Handle open case GMSPlaceOpenStatusClosed: // Handle closed case GMSPlaceOpenStatusUnknown: // Handle unknown } }];
พารามิเตอร์ที่จำเป็น
ใช้ออบเจ็กต์ GMSPlaceSearchByTextRequest เพื่อระบุพารามิเตอร์ที่จำเป็น
สำหรับการค้นหา
-
รายการฟิลด์
ระบุพร็อพเพอร์ตี้ข้อมูลสถานที่ที่จะแสดง ส่งรายการพร็อพเพอร์ตี้
GMSPlaceที่ระบุฟิลด์ข้อมูลที่จะแสดง หากคุณละเว้นฟิลด์ มาสก์ คำขอจะแสดงข้อผิดพลาดรายการฟิลด์เป็นแนวทางปฏิบัติในการออกแบบที่ดีเพื่อให้มั่นใจว่าคุณจะไม่ขอข้อมูลที่ไม่จำเป็น ซึ่งจะช่วยหลีกเลี่ยงเวลาในการประมวลผลและการเรียกเก็บเงินที่ไม่จำเป็น
ระบุช่องต่อไปนี้อย่างน้อย 1 ช่อง
ฟิลด์ต่อไปนี้จะทริกเกอร์ Text Search Essentials ID Only SKU
GMSPlacePropertyPlaceIDฟิลด์ต่อไปนี้จะทริกเกอร์ SKU ของ Text Search Pro
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyPhotos
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntranceฟิลด์ต่อไปนี้จะทริกเกอร์ SKU ของ Text Search Enterprise
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsiteฟิลด์ต่อไปนี้จะทริกเกอร์ SKU การค้นหาข้อความ Enterprise Plus
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
-
textQuery
สตริงข้อความที่จะค้นหา เช่น "ร้านอาหาร" "123 ถนนเมน" หรือ "สถานที่ที่ดีที่สุดในการเยี่ยมชมในซานฟรานซิสโก"
พารามิเตอร์ที่ไม่บังคับ
ใช้GMSPlaceSearchByTextRequestออบเจ็กต์เพื่อระบุพารามิเตอร์ที่ไม่บังคับ
สำหรับการค้นหา
includedType
จำกัดผลการค้นหาให้แสดงเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุซึ่งกำหนดโดยตาราง ก ระบุได้เพียงประเภทเดียว เช่น
let request = SearchByTextRequest()
request.includedType = "bar"let request = SearchByTextRequest()
request.includedType = "pharmacy"
isOpenNow
หาก
trueให้แสดงเฉพาะสถานที่ที่เปิดให้บริการ ในขณะที่ส่งคำค้นหา หากfalseให้แสดงธุรกิจทั้งหมด โดยไม่คำนึงถึงสถานะเปิดทำการ สถานที่ที่ไม่ได้ระบุเวลาทำการในฐานข้อมูล Google Places จะ แสดงขึ้นหากคุณตั้งค่าพารามิเตอร์นี้เป็นfalseisStrictTypeFiltering
ใช้กับพารามิเตอร์
includeTypeเมื่อตั้งค่าเป็นtrueระบบจะแสดงเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุโดยincludeTypeเมื่อเป็นเท็จ (ค่าเริ่มต้น) คำตอบอาจมีสถานที่ที่ไม่ตรงกับ ประเภทที่ระบุlocationBias
ระบุพื้นที่ที่จะค้นหา ตำแหน่งนี้ทำหน้าที่เป็นค่าอคติ ซึ่งหมายความว่า ระบบจะแสดงผลการค้นหาที่อยู่รอบๆ ตำแหน่งที่ระบุ รวมถึงผลการค้นหา ที่อยู่นอกพื้นที่ที่ระบุ
คุณระบุ
locationRestrictionหรือlocationBiasได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ คิดว่าlocationRestrictionเป็นการระบุ ภูมิภาคที่ผลการค้นหาต้องอยู่ภายใน และlocationBiasเป็นการ ระบุภูมิภาคที่ผลการค้นหาต้องอยู่ใกล้ แต่สามารถอยู่นอก พื้นที่ได้ระบุภูมิภาคเป็นวิวพอร์ตสี่เหลี่ยมผืนผ้าหรือเป็นวงกลม
วงกลมกำหนดโดยจุดศูนย์กลางและรัศมีเป็นเมตร รัศมี ต้องอยู่ระหว่าง 0.0 ถึง 50000.0 เท่านั้น รัศมีเริ่มต้นคือ 0.0 เช่น
let request = SearchByTextRequest() request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
สี่เหลี่ยมผืนผ้าคือวิวพอร์ตละติจูด-ลองจิจูด ซึ่งแสดงเป็นจุดต่ำและจุดสูงที่อยู่ตรงข้ามกันในแนวทแยง 2 จุด จุดต่ำสุดจะทำเครื่องหมายมุมตะวันตกเฉียงใต้ ของสี่เหลี่ยมผืนผ้า และจุดสูงสุดจะแสดงมุมตะวันออกเฉียงเหนือ ของสี่เหลี่ยมผืนผ้า
ระบบจะถือว่าวิวพอร์ตเป็น ภูมิภาคปิด ซึ่งหมายความว่ารวมถึงขอบเขตของวิวพอร์ตด้วย ขอบเขตละติจูด ต้องอยู่ระหว่าง -90 ถึง 90 องศา และขอบเขตลองจิจูด ต้องอยู่ระหว่าง -180 ถึง 180 องศา
- หาก
low=highวิวพอร์ตจะประกอบด้วย จุดเดียว - หาก
low.longitude>high.longitudeระบบจะกลับช่วงลองจิจูด (วิวพอร์ตข้ามเส้นลองจิจูด 180 องศา) - หาก
low.longitude= -180 องศา และhigh.longitude= 180 องศา วิวพอร์ตจะรวมลองจิจูดทั้งหมด - หาก
low.longitude= 180 องศาและhigh.longitude= -180 องศา ช่วงลองจิจูดจะ ว่างเปล่า - หาก
low.latitude>high.latitudeช่วงละติจูดจะว่าง
- หาก
locationRestriction
ระบุพื้นที่ที่จะค้นหา ระบบจะไม่แสดงผลลัพธ์ที่อยู่นอกพื้นที่ที่ระบุ ระบุภูมิภาคเป็นวิวพอร์ตสี่เหลี่ยม ดูคำอธิบายของ
locationBiasเพื่อดูข้อมูลเกี่ยวกับการกำหนดวิวพอร์ตคุณระบุ
locationRestrictionหรือlocationBiasได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ คิดว่าlocationRestrictionเป็นการระบุ ภูมิภาคที่ผลการค้นหาต้องอยู่ภายใน และlocationBiasเป็นการ ระบุภูมิภาคที่ผลการค้นหาต้องอยู่ใกล้ แต่สามารถอยู่นอก พื้นที่ได้-
maxResultCount
ระบุจำนวนผลการค้นหาสถานที่สูงสุดที่จะแสดง ต้องอยู่ระหว่าง 1 ถึง 20 (ค่าเริ่มต้น) เท่านั้น
minRating
จำกัดผลลัพธ์เฉพาะผลลัพธ์ที่มีคะแนนจากผู้ใช้โดยเฉลี่ยมากกว่า หรือเท่ากับขีดจำกัดนี้ ค่าต้องอยู่ระหว่าง 0.0 ถึง 5.0 (รวม) โดยเพิ่มขึ้นทีละ 0.5 เช่น 0, 0.5, 1.0, ... , 5.0 ระบบจะปัดเศษค่าขึ้นเป็น 0.5 ที่ใกล้ที่สุด เช่น ค่า 0.6 จะตัดผลลัพธ์ทั้งหมดที่มีคะแนนน้อยกว่า 1.0 ออก
-
priceLevels
จำกัดการค้นหาเฉพาะสถานที่ที่มีการทำเครื่องหมายในระดับราคาที่กำหนด ค่าเริ่มต้นคือการเลือกระดับราคาทั้งหมด
ระบุอาร์เรย์ของค่าอย่างน้อย 1 ค่าที่กำหนดโดย
PriceLevelเช่น
let request = SearchByTextRequest() request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
ระบุวิธีจัดอันดับผลลัพธ์ในการตอบกลับตามประเภทของคำค้นหา ดังนี้
- สำหรับคำค้นหาตามหมวดหมู่ เช่น "ร้านอาหารในนิวยอร์ก"
.relevance(จัดอันดับผลลัพธ์ตามความเกี่ยวข้องกับการค้นหา) คือค่าเริ่มต้น คุณตั้งค่าrankPreferenceเป็น.relevanceหรือ.distance(จัดอันดับผลลัพธ์ตามระยะทาง) ได้ - สำหรับคำค้นหาที่ไม่ใช่หมวดหมู่ เช่น "เมาน์เทนวิว แคลิฟอร์เนีย" เราขอแนะนำ
ให้คุณปล่อย
rankPreferenceไว้โดยไม่ต้องตั้งค่า
- สำหรับคำค้นหาตามหมวดหมู่ เช่น "ร้านอาหารในนิวยอร์ก"
regionCode
รหัสภูมิภาคที่ใช้จัดรูปแบบการตอบกลับ โดยระบุเป็นค่า รหัส CLDR 2 อักขระ พารามิเตอร์นี้อาจส่งผลต่อความเอนเอียงของผลการค้นหาด้วย ไม่มีค่าเริ่มต้น
หากชื่อประเทศของช่องที่อยู่ในคำตอบตรงกับรหัสภูมิภาค ระบบจะละเว้นรหัสประเทศจากที่อยู่
รหัส CLDR ส่วนใหญ่จะเหมือนกับรหัส ISO 3166-1 โดยมีข้อยกเว้นที่สำคัญบางประการ ตัวอย่างเช่น ccTLD ของสหราชอาณาจักรคือ "uk" (.co.uk) ขณะที่รหัส ISO 3166-1 คือ "gb" (ในทางเทคนิคสำหรับ นิติบุคคลของ "สหราชอาณาจักรบริเตนใหญ่และไอร์แลนด์เหนือ") พารามิเตอร์นี้อาจส่งผลต่อผลลัพธ์ตามกฎหมายที่เกี่ยวข้อง
shouldIncludePureServiceAreaBusinesses
หากเป็น
trueระบบจะแสดงธุรกิจที่ให้บริการเฉพาะในพื้นที่ในผลการค้นหา ธุรกิจที่ให้บริการตามสถานที่เพียงอย่างเดียวคือธุรกิจที่บริการแบบถึงที่หรือออกให้บริการแก่ลูกค้าโดยตรง โดยไม่ได้ให้บริการลูกค้า ณ ที่อยู่ธุรกิจเช่น
Places Swift SDK
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses = true
Swift
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses: true
Objective-C
GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]]; request.shouldIncludePureServiceAreaBusinesses = YES;
แสดงการระบุแหล่งที่มาในแอป
เมื่อแอปแสดงข้อมูลที่ได้จาก
GMSPlacesClient
เช่น รูปภาพและรีวิว แอปจะต้องแสดงการระบุแหล่งที่มาที่จำเป็นด้วย
เช่น พร็อพเพอร์ตี้ reviews ของออบเจ็กต์ GMSPlacesClient
มีอาร์เรย์ของออบเจ็กต์ GMSPlaceReview
ได้สูงสุด 5 รายการ ออบเจ็กต์ GMSPlaceReview แต่ละรายการอาจมีการระบุแหล่งที่มาและการระบุแหล่งที่มาของผู้เขียน
หากแสดงรีวิวในแอป คุณต้องแสดงการระบุแหล่งที่มาหรือการระบุแหล่งที่มาของผู้เขียนด้วย
ดูข้อมูลเพิ่มเติมได้ในเอกสารเกี่ยวกับการระบุแหล่งที่มา