Metin arama, bir dizeye göre bir yer grubu hakkında bilgi döndürür. Örneğin, "New York'ta pizza", "Ottawa yakınlarındaki ayakkabı mağazaları" veya "123 Ana Cadde". Hizmet, metin dizesine ve ayarlanmış konum yanlılığına eşleşen yerlerin listesini döndürür.
Bu hizmet, özellikle otomatik bir sistemde belirsiz adres sorguları yapmak için kullanışlıdır. Ayrıca dizenin adres dışındaki bileşenleri, adreslerin yanı sıra işletmelerle de eşleşebilir. Belirsiz adres sorgularına örnek olarak kötü biçimlendirilmiş adresler veya işletme adları gibi adres dışı bileşenler içeren istekler verilebilir. İlk iki örnekteki gibi istekler, bir konum (ör. bölge, konum kısıtlaması veya konum yanlılığı) ayarlanmazsa sıfır sonuç döndürebilir.
"10 High Street, UK" veya "123 Main Street, US" | Birleşik Krallık'ta birden fazla "High Street", ABD'de birden fazla "Main Street". Konum kısıtlaması ayarlanmadığı sürece sorgu istenen sonuçları döndürmez. |
"New York'ta zincir restoran" | New York'ta birden fazla "zincir restoran" konumu; açık adres veya hatta sokak adı yok. |
"10 High Street, Escher UK" veya "123 Main Street, Pleasanton US" | Birleşik Krallık'taki Escher şehrinde yalnızca bir "High Street", ABD'deki Pleasanton CA şehrinde ise yalnızca bir "Main Street" vardır. |
"UniqueRestaurantName New York" | New York'ta bu ada sahip yalnızca bir işletme var. Ayrıştırmak için sokak adresi gerekmiyor. |
"New York'ta pizza restoranları" | Bu sorgu, konum kısıtlamasını içerir ve "pizza restoranları" iyi tanımlanmış bir yer türüdür. Birden fazla sonuç döndürür. |
"+1 514-670-8700" | Bu sorgu bir telefon numarası içeriyor. Bu telefon numarasıyla ilişkili yerler için birden fazla sonuç döndürür. |
Metin aramayla yerlerin listesini alma
GMSPlacesClient searchByTextWithRequest:
işlevini çağırarak bir metin arama isteği gönderin. Bu işlev, istek parametrelerini tanımlayan bir GMSPlaceSearchByTextRequest
nesnesi ve yanıtı işlemek için GMSPlaceSearchByTextResultCallback
türündeki bir geri çağırma yöntemi ile çağrılır.
GMSPlaceSearchByTextRequest
nesnesi, istek için tüm zorunlu ve isteğe bağlı parametreleri belirtir. Gerekli parametreler şunlardır:
GMSPlaceProperty
tarafından tanımlandığı üzere,GMSPlace
nesnesinde döndürülecek alanların listesi (alan maskesi olarak da bilinir). Alan listesinde en az bir alan belirtmezseniz veya alan listesini atlarsanız çağrı bir hata döndürür.- Metin sorgusu.
Bu örnek metin arama isteğinde, yanıt GMSPlace
nesnelerinin arama sonuçlarındaki her GMSPlace
nesnesinin yer adını ve yer kimliğini içerdiği belirtilmektedir. Ayrıca yanıtı, yalnızca "restoran" türündeki yerleri döndürecek şekilde filtreler.
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; } } } ];
iOS için Yerler Swift SDK'sı (Önizleme)
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 }
Metin arama yanıtları
Metin Arama API'si, eşleşen her yer için bir GMSPlace
nesnesi içeren GMSPlace
nesneleri biçiminde bir eşleşme dizisi döndürür.
Açık durumu alma
GMSPlacesClient
nesnesi, çağrıda belirtilen saate göre yerin şu anda açık olup olmadığını belirten bir yanıt döndüren isOpenWithRequest
adlı bir üye işlevi (Swift'te isOpenRequest
ve GooglePlacesSwift'te isPlaceOpenRequest
) içerir.
Bu yöntem, aşağıdakileri içeren GMSPlaceIsOpenWithRequest
türündeki tek bir bağımsız değişken alır:
- Bir
GMSPlace
nesnesi veya yer kimliğini belirten bir dize. Yer nesnesini gerekli alanlarla oluşturma hakkında daha fazla bilgi için Yer ayrıntıları başlıklı makaleyi inceleyin.
- Kontrol etmek istediğiniz zamanı belirten isteğe bağlı bir
NSDate
(Obj-C) veyaDate
(Swift) nesnesi. Saat belirtilmezse varsayılan olarak şu anki saat kullanılır. - Yanıtı işleyen bir
GMSPlaceOpenStatusResponseCallback
yöntemi. >
GMSPlaceIsOpenWithRequest
yöntemi, GMSPlace
nesnesinde aşağıdaki alanların ayarlanmasını gerektirir:
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyBusinessStatus
GMSPlacePropertyOpeningHours
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
Bu alanlar Place nesnesinde sağlanmazsa veya bir yer kimliği iletiyorsanız yöntem bunları almak için GMSPlacesClient GMSFetchPlaceRequest:
kullanır.
isOpenWithRequest
yanıt
isOpenWithRequest
, işletmenin açık, kapalı veya durumunun bilinmediğini belirten status
adlı bir boole değeri içeren bir GMSPlaceIsOpenResponse
nesnesi döndürür.
Dil | Açıksa değer | Kapalıysa değer | Durum bilinmiyorsa değer |
---|---|---|---|
Swift | .open |
.closed |
.unknown |
Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
GooglePlacesSwift (Önizleme) | true |
false |
nil |
isOpenWithRequest
için faturalandırma
GMSPlacePropertyUTCOffsetMinutes
veGMSPlacePropertyBusinessStatus
alanları, Temel Veri SKU'su kapsamında ücretlendirilir. Çalışma saatlerinin geri kalanı Yer Ayrıntıları (Gelişmiş) SKU'su kapsamında ücretlendirilir.GMSPlace
nesnenizde önceki bir istekten bu alanlar zaten varsa sizden tekrar ücret alınmaz.
Örnek: GMSPlaceIsOpenWithRequest
isteği gönderme
Aşağıdaki örnekte, mevcut bir GMSPlace
nesnesi içinde GMSPlaceIsOpenWithRequest
değerinin nasıl başlatılacağı gösterilmektedir.
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 }
Gerekli parametreler
Arama için gereken parametreleri belirtmek üzere GMSPlaceSearchByTextRequest
nesnesini kullanın.
-
Alan listesi
Döndürülecek yer verisi özelliklerini belirtin. Döndürülecek veri alanlarını belirten bir
GMSPlace
özelliği listesi gönderin. Alan maskesini atlarsanız istek hata döndürür.Alan listeleri, gereksiz veri istememenizi sağlamak için iyi bir tasarım uygulamasıdır. Bu sayede gereksiz işlem süresi ve faturalandırma ücretlerinden kaçınabilirsiniz.
Aşağıdaki alanlardan en az birini belirtin:
Aşağıdaki alanlar Metin Arama (Yalnızca Kimlik) SKU'sunu tetikler:
GMSPlacePropertyPlaceID
,GMSPlacePropertyName
Aşağıdaki alanlar Metin Arama (Temel) SKU'sunu tetikler:
GMSPlacePropertyAddressComponents
,GMSPlacePropertyBusinessStatus
,GMSPlacePropertyFormattedAddress
,GMSPlacePropertyIconBackgroundColor
,GMSPlacePropertyIconImageURL
,GMSPlacePropertyCoordinate
,GMSPlacePropertyPhotos
,GMSPlacePropertyPlusCode
,GMSPlacePropertyTypes
,GMSPlacePropertyUTCOffsetMinutes
,GMSPlacePropertyViewport
,GMSPlacePropertyWheelchairAccessibleEntrance
Aşağıdaki alanlar Metin Arama (Gelişmiş) SKU'sunu tetikler:
GMSPlacePropertyCurrentOpeningHours
,GMSPlacePropertySecondaryOpeningHours
,GMSPlacePropertyPhoneNumber
,GMSPlacePropertyPriceLevel
,GMSPlacePropertyRating
,GMSPlacePropertyOpeningHours
,GMSPlacePropertyUserRatingsTotal
,GMSPlacePropertyWebsite
Aşağıdaki alanlar Metin Arama (Tercih Edilen) SKU'sunu tetikler:
GMSPlacePropertyCurbsidePickup
,GMSPlacePropertyDelivery
,GMSPlacePropertyDineIn
,GMSPlacePropertyEditorialSummary
,GMSPlacePropertyReservable
,GMSPlacePropertyReviews
,GMSPlacePropertyServesBeer
,GMSPlacePropertyServesBreakfast
,GMSPlacePropertyServesBrunch
,GMSPlacePropertyServesDinner
,GMSPlacePropertyServesLunch
,GMSPlacePropertyServesVegetarianFood
,GMSPlacePropertyServesWine
,GMSPlacePropertyTakeout
-
textQuery
Aramanın yapılacağı metin dizesi. Örneğin: "restoran", "123 Ana Cadde" veya "San Francisco'da gidilecek en iyi yer".
İsteğe bağlı parametreler
Arama için isteğe bağlı parametreleri belirtmek üzere GMSPlaceSearchByTextRequest
nesnesini kullanın.
includedType
Sonuçları, A Tablosu tarafından tanımlanan belirli türle eşleşen yerlerle sınırlandırır. Yalnızca bir tür belirtilebilir. Örneğin:
request.includedType = "bar"
request.includedType = "pharmacy"
isOpenNow
true
ise yalnızca sorgu gönderildiği sırada açık olan yerleri döndürür.false
ise açık durumdan bağımsız olarak tüm işletmeleri döndürür. Bu parametreyifalse
olarak ayarlarsanız Google Haritalar veritabanında çalışma saatlerini belirtmeyen yerler döndürülür.isStrictTypeFiltering
includeType
parametresiyle kullanılır.true
olarak ayarlandığında, yalnızcaincludeType
ile belirtilen türlerle eşleşen yerler döndürülür. Yanlış olduğunda (varsayılan), yanıt belirtilen türlerle eşleşmeyen yerler içerebilir.locationBias
Arama yapılacak bir alanı belirtir. Bu konum, bir önyargı görevi görür. Bu, belirtilen alanın dışındaki sonuçlar da dahil olmak üzere belirtilen konumun çevresindeki sonuçların döndürülebileceği anlamına gelir.
locationRestriction
veyalocationBias
ikilisinden birini belirtebilirsiniz; ikisini birden belirtmeyin.locationRestriction
'ü, sonuçların içinde olması gereken bölgeyi belirtmek,locationBias
'ü ise sonuçların yakınında olması gereken ancak alanın dışında olabileceği bölgeyi belirtmek olarak düşünebilirsiniz.Bölgeyi dikdörtgen bir görüntü alanı veya daire olarak belirtin.
Daireler, merkez noktası ve yarıçapı (metre cinsinden) ile tanımlanır. Yarıçap, 0,0 ile 50000,0 arasında (bu değerler dahil) olmalıdır. Varsayılan yarıçap 0,0'dır. Örneğin:
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
Dikdörtgen, iki çapraz karşıt düşük ve yüksek nokta olarak temsil edilen bir enlem-boylam görüntü alanıdır. Düşük nokta, dikdörtgenin güney batı köşesini, yüksek nokta ise dikdörtgenin kuzeydoğu köşesini gösterir.
Görüntü alanı kapalı bir bölge olarak kabul edilir. Enlem sınırları -90 ile 90 derece arasında, boylam sınırları ise -180 ile 180 derece arasında olmalıdır:
low
=high
ise görüntü alanı bu tek noktadan oluşur.low.longitude
>high.longitude
ise boylam aralığı tersine çevrilir (görüntü alanı 180 derece boylam çizgisini aşar).low.longitude
= -180 derece vehigh.longitude
= 180 derece ise görüntü alanı tüm boylamları içerir.low.longitude
= 180 derece vehigh.longitude
= -180 derece ise boylam aralığı boş olur.low.latitude
>high.latitude
ise enlem aralığı boş olur.
locationRestriction
Arama yapılacak bir alanı belirtir. Belirtilen alanın dışındaki sonuçlar döndürülmez. Bölgeyi dikdörtgen bir görüntü alanı olarak belirtin. Görüntü alanını tanımlama hakkında bilgi edinmek için
locationBias
açıklamasına bakın.locationRestriction
veyalocationBias
ikilisinden birini belirtebilirsiniz; ikisini birden belirtmeyin.locationRestriction
'ü, sonuçların içinde olması gereken bölgeyi belirtmek,locationBias
'ü ise sonuçların yakınında olması gereken ancak alanın dışında olabileceği bölgeyi belirtmek olarak düşünebilirsiniz.-
maxResultCount
Döndürülecek maksimum yer sonucu sayısını belirtir. 1 ile 20 (varsayılan) arasında olmalıdır.
minRating
Sonuçları yalnızca ortalama kullanıcı puanı bu sınırdan yüksek veya bu sınıra eşit olanlarla kısıtlar. Değerler 0,0 ile 5,0 (başlangıç ve bitiş değerleri dahil) arasında, 0,5'lik artışlarla olmalıdır. Örneğin: 0, 0,5, 1,0, ..., 5,0 dahil. Değerler en yakın 0,5'e yuvarlanır. Örneğin, 0,6 değeri, puanı 1,0'dan düşük olan tüm sonuçları ortadan kaldırır.
-
priceLevels
Aramayı belirli fiyat seviyelerinde işaretlenmiş yerlerle sınırlayın. Varsayılan olarak tüm fiyat seviyeleri seçilidir.
PriceLevel
ile tanımlanan bir veya daha fazla değer dizisi belirtin.Örneğin:
request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Sorgu türüne göre sonuçların yanıtta nasıl sıralandığını belirtir:
- "New York'taki restoranlar" gibi kategorik bir sorgu için varsayılan değer
.relevance
'tür (sonuçları arama alaka düzeyine göre sırala).rankPreference
değerini.relevance
veya.distance
olarak ayarlayabilirsiniz (sonuçları mesafeye göre sıralar). - "Mountain View, CA" gibi kategorik olmayan bir sorgu için
rankPreference
değerini ayarlamamanızı öneririz.
- "New York'taki restoranlar" gibi kategorik bir sorgu için varsayılan değer
regionCode
Yanıtı biçimlendirmek için kullanılan bölge kodu. İki karakterli CLDR kodu değeri olarak belirtilir. Bu parametre, arama sonuçlarında da önyargı etkisi yaratabilir. Varsayılan değer yoktur.
Yanıttaki adres alanının ülke adı bölge koduyla eşleşirse ülke kodu adresten çıkarılır.
CLDR kodlarının çoğu, bazı önemli istisnalar dışında ISO 3166-1 kodlarıyla aynıdır. Örneğin, Birleşik Krallık'ın ccTLD'si "uk" (.co.uk) iken ISO 3166-1 kodu "gb"dir (teknik olarak "Büyük Britanya ve Kuzey İrlanda Birleşik Krallığı" tüzel kişiliği için). Parametre, geçerli yasaya göre sonuçları etkileyebilir.
Uygulamanızda ilişkilendirmeleri gösterme
Uygulamanız, GMSPlacesClient
'dan alınan fotoğraf ve yorumlar gibi bilgileri görüntülerken gerekli ilişkilendirmeleri de göstermelidir.
Örneğin, GMSPlacesClient
nesnesinin reviews
özelliği beş adede kadar GMSPlaceReview
nesnesi içeren bir dizi içerir. Her GMSPlaceReview
nesnesi ilişkilendirmeler ve yazar ilişkilendirmeleri içerebilir.
Yorumu uygulamanızda gösteriyorsanız ilişkilendirmeyi veya yazar ilişkilendirmesini de göstermeniz gerekir.
Daha fazla bilgi için ilişkilendirmeler hakkındaki dokümanları inceleyin.