Text Search menampilkan informasi tentang serangkaian tempat berdasarkan string. Misalnya, "pizza di Bandung", "toko sepatu di dekat Solo", atau "Jl. Rajawali 3". Layanan ini merespons dengan daftar tempat yang cocok dengan string teks dan bias lokasi yang ditetapkan.
Layanan ini sangat berguna untuk membuat kueri alamat ambigu dalam sistem otomatis, dan komponen non-alamat pada string yang mungkin cocok dengan bisnis serta alamat. Contoh kueri alamat ambigu adalah alamat yang tidak diformat dengan baik atau permintaan yang menyertakan komponen non-alamat, seperti nama bisnis. Permintaan seperti dua contoh pertama mungkin menampilkan hasil nol kecuali jika lokasi (seperti wilayah, pembatasan lokasi, atau bias lokasi) ditetapkan.
"10 High Street, UK" atau "123 Main Street, US" | Beberapa "High Street" di Inggris Raya; beberapa "Main Street" di Amerika Serikat. Kueri tidak menampilkan hasil yang diinginkan kecuali jika batasan lokasi ditetapkan. |
"Restoran berantai New York" | Beberapa lokasi "Restoran berantai" di New York; tidak ada alamat jalan atau bahkan nama jalan. |
"10 High Street, Escher UK" atau "123 Main Street, Pleasanton US" | Hanya ada satu "High Street" di kota Escher, Inggris Raya; hanya ada satu "Main Street" di kota Pleasanton, California, AS. |
"UniqueRestaurantName New York" | Hanya ada satu tempat dengan nama ini di New York; tidak perlu alamat jalan untuk membedakannya. |
"restoran pizza di Jakarta" | Kueri ini berisi batasan lokasinya, dan "restoran pizza" adalah jenis tempat yang ditentukan dengan baik. Fungsi ini menampilkan beberapa hasil. |
"+1 514-670-8700" | Kueri ini berisi nomor telepon. Fungsi ini menampilkan beberapa hasil untuk tempat yang terkait dengan nomor telepon tersebut. |
Mendapatkan daftar tempat berdasarkan penelusuran teks
Buat permintaan Text Search dengan memanggil
GMSPlacesClient searchByTextWithRequest:
,
meneruskan objek
GMSPlaceSearchByTextRequest
yang menentukan parameter permintaan dan metode callback, dengan jenis
GMSPlaceSearchByTextResultCallback
,
untuk menangani respons.
Objek GMSPlaceSearchByTextRequest
menentukan semua parameter
wajib dan opsional
untuk permintaan. Parameter yang diperlukan meliputi:
- Daftar kolom yang akan ditampilkan dalam objek
GMSPlace
, juga disebut mask kolom, seperti yang ditentukan olehGMSPlaceProperty
. Jika Anda tidak menentukan setidaknya satu kolom dalam daftar kolom, atau jika Anda menghapus daftar kolom, panggilan akan menampilkan error. - Kueri teks.
Contoh permintaan penelusuran teks ini menentukan bahwa objek GMSPlace
respons
berisi nama tempat dan ID tempat untuk setiap objek GMSPlace
dalam hasil
penelusuran. Fungsi ini juga memfilter respons untuk hanya menampilkan tempat jenis
"restoran".
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; } } } ];
Places Swift SDK for iOS (Pratinjau)
let restriction = RectangularLocationRestriction( 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 }
Respons Text Search
Text Search API menampilkan array kecocokan dalam
bentuk
objek
GMSPlace
, dengan satu objek GMSPlace
per tempat yang cocok.
Mendapatkan status terbuka
Objek GMSPlacesClient
berisi fungsi anggota yang disebut isOpenWithRequest
(isOpenRequest
di Swift dan isPlaceOpenRequest
di GooglePlacesSwift) yang menampilkan respons yang menunjukkan apakah tempat saat ini buka, berdasarkan waktu yang ditentukan dalam panggilan.
Metode ini menggunakan satu argumen jenis GMSPlaceIsOpenWithRequest
yang berisi:
- Objek
GMSPlace
, atau string yang menentukan ID tempat. Untuk informasi selengkapnya tentang cara membuat objek Place dengan kolom yang diperlukan, lihat Place details.
- Objek
NSDate
(Obj-C) atauDate
(Swift) opsional yang menentukan waktu yang ingin Anda periksa. Jika tidak ada waktu yang ditentukan, default-nya adalah sekarang. - Metode
GMSPlaceOpenStatusResponseCallback
untuk menangani respons. >
Metode GMSPlaceIsOpenWithRequest
mengharuskan kolom berikut ditetapkan dalam objek GMSPlace
:
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyBusinessStatus
GMSPlacePropertyOpeningHours
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
Jika kolom ini tidak disediakan dalam objek Place, atau jika Anda meneruskan ID tempat, metode ini akan menggunakan GMSPlacesClient GMSFetchPlaceRequest:
untuk mengambilnya.
isOpenWithRequest
tanggapan
isOpenWithRequest
menampilkan objek GMSPlaceIsOpenResponse
yang berisi nilai boolean bernama status
yang menunjukkan apakah bisnis buka, tutup, atau statusnya tidak diketahui.
Language | Nilai jika terbuka | Nilai jika ditutup | Nilai jika status tidak diketahui |
---|---|---|---|
Swift | .open |
.closed |
.unknown |
Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
GooglePlacesSwift (Pratinjau) | true |
false |
nil |
Penagihan untuk isOpenWithRequest
- Kolom
GMSPlacePropertyUTCOffsetMinutes
danGMSPlacePropertyBusinessStatus
dikenai biaya berdasarkan SKU Data Dasar. Jam Buka lainnya akan dikenai biaya berdasarkan SKU Place Details (Advanced). - Jika objek
GMSPlace
Anda sudah memiliki kolom ini dari permintaan sebelumnya, Anda tidak akan ditagih lagi.
Contoh: Membuat permintaan GMSPlaceIsOpenWithRequest
Contoh berikut menunjukkan cara menginisialisasi GMSPlaceIsOpenWithRequest
dalam objek GMSPlace
yang ada.
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 } }];
GooglePlacesSwift
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 }
Parameter wajib
Gunakan objek GMSPlaceSearchByTextRequest
untuk menentukan parameter yang diperlukan untuk penelusuran.
-
Daftar kolom
Tentukan properti data tempat yang akan ditampilkan. Teruskan daftar properti
GMSPlace
yang menentukan kolom data yang akan ditampilkan. Jika Anda menghapus mask kolom, permintaan akan menampilkan error.Daftar kolom adalah praktik desain yang baik untuk memastikan Anda tidak meminta data yang tidak diperlukan, yang membantu menghindari waktu pemrosesan dan biaya penagihan yang tidak perlu.
Tentukan satu atau beberapa kolom berikut:
Kolom berikut memicu SKU Text Search (ID Only):
GMSPlacePropertyPlaceID
,GMSPlacePropertyName
Kolom berikut memicu SKU Text Search (Basic):
GMSPlacePropertyAddressComponents
,GMSPlacePropertyBusinessStatus
,GMSPlacePropertyFormattedAddress
,GMSPlacePropertyIconBackgroundColor
,GMSPlacePropertyIconImageURL
,GMSPlacePropertyCoordinate
,GMSPlacePropertyPhotos
,GMSPlacePropertyPlusCode
,GMSPlacePropertyTypes
,GMSPlacePropertyUTCOffsetMinutes
,GMSPlacePropertyViewport
,GMSPlacePropertyWheelchairAccessibleEntrance
Kolom berikut memicu SKU Text Search (Advanced):
GMSPlacePropertyCurrentOpeningHours
,GMSPlacePropertySecondaryOpeningHours
,GMSPlacePropertyPhoneNumber
,GMSPlacePropertyPriceLevel
,GMSPlacePropertyRating
,GMSPlacePropertyOpeningHours
,GMSPlacePropertyUserRatingsTotal
,GMSPlacePropertyWebsite
Kolom berikut memicu SKU Text Search (Preferred):
GMSPlacePropertyCurbsidePickup
,GMSPlacePropertyDelivery
,GMSPlacePropertyDineIn
,GMSPlacePropertyEditorialSummary
,GMSPlacePropertyReservable
,GMSPlacePropertyReviews
,GMSPlacePropertyServesBeer
,GMSPlacePropertyServesBreakfast
,GMSPlacePropertyServesBrunch
,GMSPlacePropertyServesDinner
,GMSPlacePropertyServesLunch
,GMSPlacePropertyServesVegetarianFood
,GMSPlacePropertyServesWine
,GMSPlacePropertyTakeout
-
textQuery
String teks yang digunakan untuk menelusuri, misalnya: "restaurant", "123 Main Street", atau "best place to visit in San Francisco".
Parameter opsional
Gunakan objek GMSPlaceSearchByTextRequest
untuk menentukan parameter
opsional untuk penelusuran.
includedType
Membatasi hasil ke tempat yang cocok dengan jenis yang ditentukan oleh Tabel A. Hanya satu jenis yang dapat ditentukan. Contoh:
request.includedType = "bar"
request.includedType = "pharmacy"
isOpenNow
Jika
true
, hanya tampilkan tempat yang sedang buka pada saat kueri dikirim. Jikafalse
, tampilkan semua bisnis terlepas dari status buka. Tempat yang tidak menetapkan jam buka dalam database Google Places akan ditampilkan jika Anda menetapkan parameter ini kefalse
.isStrictTypeFiltering
Digunakan dengan parameter
includeType
. Jika ditetapkan ketrue
, hanya tempat yang cocok dengan jenis yang ditentukan olehincludeType
yang akan ditampilkan. Jika salah, respons default dapat berisi tempat yang tidak cocok dengan jenis yang ditentukan.locationBias
Menentukan area yang akan ditelusuri. Lokasi ini berfungsi sebagai bias yang berarti bahwa hasil di sekitar lokasi yang ditentukan dapat ditampilkan, termasuk hasil di luar area yang ditentukan.
Anda dapat menentukan
locationRestriction
ataulocationBias
, tetapi tidak keduanya. AnggaplocationRestriction
sebagai menentukan wilayah tempat hasil harus berada, danlocationBias
sebagai menentukan wilayah tempat hasil harus berada di dekatnya, tetapi dapat berada di luar area.Tentukan wilayah sebagai Viewport persegi panjang atau sebagai lingkaran.
Lingkaran ditentukan oleh titik tengah dan radius dalam meter. Radius harus antara 0,0 dan 50000,0, inklusif. Radius defaultnya adalah 0,0. Contoh:
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
Persegi panjang adalah area pandang lintang-bujur, yang direpresentasikan sebagai dua titik rendah dan tinggi yang berlawanan secara diagonal. Titik terendah menandai sudut barat daya persegi panjang, dan titik tertinggi mewakili sudut timur laut persegi panjang.
Area pandang dianggap sebagai wilayah tertutup, yang berarti mencakup batasnya. Batas lintang harus berkisar antara -90 hingga 90 derajat inklusif, dan batas bujur harus berkisar antara -180 hingga 180 derajat inklusif:
- Jika
low
=high
, area pandang terdiri dari satu titik tersebut. - Jika
low.longitude
>high.longitude
, rentang bujur akan terbalik (area pandang melintasi garis bujur 180 derajat). - Jika
low.longitude
= -180 derajat danhigh.longitude
= 180 derajat, area pandang akan menyertakan semua bujur. - Jika
low.longitude
= 180 derajat danhigh.longitude
= -180 derajat, rentang bujur kosong. - Jika
low.latitude
>high.latitude
, rentang lintang akan kosong.
- Jika
locationRestriction
Menentukan area yang akan ditelusuri. Hasil di luar area yang ditentukan tidak ditampilkan. Tentukan wilayah sebagai Viewport persegi panjang. Lihat deskripsi
locationBias
untuk mengetahui informasi tentang cara menentukan Area Tampilan.Anda dapat menentukan
locationRestriction
ataulocationBias
, tetapi tidak keduanya. AnggaplocationRestriction
sebagai menentukan wilayah tempat hasil harus berada, danlocationBias
sebagai menentukan wilayah tempat hasil harus berada di dekatnya, tetapi dapat berada di luar area.-
maxResultCount
Menentukan jumlah maksimum hasil tempat yang akan ditampilkan. Harus antara 1 dan 20 (default) inklusif.
minRating
Membatasi hasil hanya untuk bisnis yang memiliki rating pengguna rata-rata lebih besar dari atau sama dengan batas ini. Nilai harus antara 0,0 dan 5,0 (inklusif) dengan inkremen 0,5. Misalnya: 0, 0,5, 1,0, ... , 5,0 inklusif. Nilai dibulatkan ke atas ke 0,5 terdekat. Misalnya, nilai 0,6 akan menghapus semua hasil dengan rating kurang dari 1,0.
-
priceLevels
Membatasi penelusuran ke tempat yang ditandai dengan tingkat harga tertentu. Setelan defaultnya adalah memilih semua tingkat harga.
Tentukan array dari satu atau beberapa nilai yang ditentukan oleh
PriceLevel
.Contoh:
request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Menentukan cara hasil diberi peringkat dalam respons berdasarkan jenis kueri:
- Untuk kueri kategori seperti "Restoran di New York City",
.relevance
(peringkat hasil berdasarkan relevansi penelusuran) adalah default. Anda dapat menetapkanrankPreference
ke.relevance
atau.distance
(mengurutkan hasil menurut jarak). - Untuk kueri non-kategoris seperti "Mountain View, CA", sebaiknya
Anda membiarkan
rankPreference
tidak ditetapkan.
- Untuk kueri kategori seperti "Restoran di New York City",
regionCode
Kode wilayah yang digunakan untuk memformat respons, yang ditentukan sebagai nilai kode CLDR dua karakter. Parameter ini juga dapat memiliki efek bias pada hasil penelusuran. Tidak ada nilai default.
Jika nama negara kolom alamat dalam respons cocok dengan kode wilayah, kode negara akan dihilangkan dari alamat.
Sebagian besar kode CLDR identik dengan kode ISO 3166-1, dengan beberapa pengecualian. Misalnya, ccTLD Inggris Raya adalah "uk" (.co.uk) sedangkan kode ISO 3166-1-nya adalah "gb" (secara teknis untuk entitas "The United Kingdom of Great Britain and Northern Ireland"). Parameter ini dapat memengaruhi hasil berdasarkan hukum yang berlaku.
Menampilkan atribusi dalam aplikasi Anda
Saat aplikasi Anda menampilkan informasi yang diperoleh dari
GMSPlacesClient
,
seperti foto dan ulasan, aplikasi juga harus menampilkan atribusi yang diperlukan.
Misalnya, properti reviews
dari objek GMSPlacesClient
berisi array hingga lima objek GMSPlaceReview
. Setiap objek GMSPlaceReview
dapat berisi atribusi dan atribusi penulis.
Jika menampilkan ulasan di aplikasi, Anda juga harus menampilkan atribusi atau atribusi penulis.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi tentang atribusi.