Wyszukiwanie tekstu (nowość)

Wyszukiwanie tekstowe zwraca informacje o zestawie miejsc na podstawie ciągu znaków. Na przykład „pizza w Krakowie”, „sklepy obuwnicze w pobliżu Ottawy” lub „ul. Główna 123”. W odpowiedzi usługa podaje listę miejsc pasujących do ciągu tekstowego i dowolne ustawione odchylenie od lokalizacji.

Ta usługa jest szczególnie przydatna do wysyłania niejednoznacznych zapytań o adres w automatycznym systemie, a komponenty niebędące adresem w ciągu znaków mogą pasować zarówno do firm, jak i adresów. Przykładami niejednoznacznych zapytań dotyczących adresu są źle sformatowane adresy lub żądania zawierające składniki niezwiązane z adresem, np. nazwę firmy. Żądania takie jak pierwsze 2 przykłady mogą nie zwracać żadnych wyników, chyba że jest ustawiona lokalizacja (np. region, ograniczenie lokalizacji lub promowanie lokalizacji).

„ul. Główna 10, Wielka Brytania” lub „ul. Główna 123, USA” Wiele „ul. Głównej” w Wielkiej Brytanii i kilka ulic „Main Street” w Stanach Zjednoczonych. Zapytanie nie zwraca pożądanych wyników, jeśli nie ustawiono ograniczenia lokalizacji.
„Restauracja sieciowa Warszawa” Wiele lokalizacji „restauracji sieciowych” w Nowym Jorku, bez adresu czy nawet nazwy ulicy.
„ul. Główna 10, Warszawa” lub „ul. Główna 123, Pleasanton PL” W mieście Escher w Wielkiej Brytanii tylko jedna „High Street” i tylko jedna „Main Street” w amerykańskim mieście Pleasanton, Kalifornia.
„UniqueRestaurantName Warszawa” Tylko 1 instytucja o tej nazwie w Nowym Jorku; do odróżnienia nie trzeba podawać adresu.
„pizzerie w Warszawie” To zapytanie zawiera ograniczenie lokalizacji, a „pizzeria” jest dobrze zdefiniowanym typem miejsca. Zwraca wiele wyników.
„+1 514-670-8700”

To zapytanie zawiera numer telefonu. Zwraca ono wiele wyników dotyczących miejsc powiązanych z tym numerem telefonu.

Uzyskaj listę miejsc za pomocą wyszukiwania tekstowego

Utwórz żądanie wyszukiwania tekstowego, wywołując metodę GMSPlacesClient searchByTextWithRequest: i przekazując obiekt GMSPlaceSearchByTextRequest definiujący parametry żądania oraz metodę wywołania zwrotnego typu GMSPlaceSearchByTextResultCallback w celu obsługi odpowiedzi.

Obiekt GMSPlaceSearchByTextRequest określa wszystkie wymagane i opcjonalne parametry żądania. Wymagane parametry to:

  • Lista pól do zwrócenia w obiekcie GMSPlace (zwana też maską pola) zdefiniowaną przez GMSPlaceProperty. Jeśli nie określisz co najmniej 1 pola na liście pól lub pominiesz listę pól, wywołanie zwróci błąd.
  • Zapytanie tekstowe.

To przykładowe żądanie wyszukiwania tekstowego określa, że odpowiedzi obiektów GMSPlace w wynikach wyszukiwania zawierają nazwę miejsca i identyfikator miejsca dla każdego obiektu GMSPlace. Filtruje też w odpowiedzi tylko miejsca typu „restauracja”.

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;
      }
    }
  }
];

GooglePlacesSwift

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
}

Odpowiedzi na wyszukiwanie tekstowe

Interfejs Text Search API zwraca tablicę dopasowań w postaci obiektów GMSPlace, z 1 obiektem GMSPlace na pasujące miejsce.

Oprócz pól danych obiekt GMSPlace w odpowiedzi zawiera te funkcje składowe:

  • Funkcja isOpen określa, czy dane miejsce jest w danym momencie otwarte.
  • isOpenAtDate określa, czy dane miejsce jest otwarte w danym dniu.

Wymagane parametry

Aby określić parametry wyszukiwania, użyj obiektu GMSPlaceSearchByTextRequest.

  • Lista pól

    Określ, które właściwości danych o miejscach mają być zwracane. Przekaż listę właściwości GMSPlace określającą pola danych do zwrócenia. Jeśli pominiesz maskę pola, żądanie zwróci błąd.

    Listy pól to sprawdzona metoda projektowania, dzięki której nie żądasz zbędnych danych. Pozwala to uniknąć niepotrzebnego czasu przetwarzania i opłat.

    Wypełnij co najmniej jedno z tych pól:

    • Następujące pola aktywują kod SKU wyszukiwania tekstowego (tylko identyfikator):

      GMSPlacePropertyPlaceID, GMSPlacePropertyName
    • Te pola aktywują kod SKU wyszukiwania tekstowego (podstawowego):

      GMSPlacePropertyAddressComponents, GMSPlacePropertyBusinessStatus, GMSPlacePropertyFormattedAddress, GMSPlacePropertyIconBackgroundColor, GMSPlacePropertyIconImageURL, GMSPlacePropertyCoordinate, GMSPlacePropertyPhotos, GMSPlacePropertyPlusCode, GMSPlacePropertyTypes, GMSPlacePropertyUTCOffsetMinutes, GMSPlacePropertyViewport, GMSPlacePropertyWheelchairAccessibleEntrance
    • Te pola aktywują kod SKU wyszukiwania tekstowego (zaawansowane):

      GMSPlacePropertyCurrentOpeningHours, GMSPlacePropertySecondaryOpeningHours, GMSPlacePropertyPhoneNumber, GMSPlacePropertyPriceLevel, GMSPlacePropertyRating, GMSPlacePropertyOpeningHours, GMSPlacePropertyUserRatingsTotal, GMSPlacePropertyWebsite
    • Te pola aktywują kod SKU wyszukiwania tekstowego (preferowany):

      GMSPlacePropertyCurbsidePickup, GMSPlacePropertyDelivery, GMSPlacePropertyDineIn, GMSPlacePropertyEditorialSummary, GMSPlacePropertyReservable, GMSPlacePropertyReviews, GMSPlacePropertyServesBeer, GMSPlacePropertyServesBreakfast, GMSPlacePropertyServesBrunch, GMSPlacePropertyServesDinner, GMSPlacePropertyServesLunch, GMSPlacePropertyServesVegetarianFood, GMSPlacePropertyServesWine, GMSPlacePropertyTakeout
  • textQuery

    Ciąg tekstowy, który ma zostać wyszukany, na przykład: „restauracja”, „ulica Główna 123” lub „najlepsze miejsce do odwiedzenia w Krakowie”.

Parametry opcjonalne

Aby określić opcjonalne parametry wyszukiwania, użyj obiektu GMSPlaceSearchByTextRequest.

  • includedType

    Ogranicza wyniki do miejsc pasujących do określonego typu określonego w tabeli A. Można podać tylko jeden typ. Na przykład:

    • request.includedType = "bar"
    • request.includedType = "pharmacy"
  • isOpenNow

    Jeśli ustawiona zostanie wartość true, zwróć tylko te miejsca, które są otwarte w momencie wysyłania zapytania. W przypadku wartości false zwróć wszystkie firmy niezależnie od tego, czy są otwarte. Miejsca, które nie określają godzin otwarcia w bazie danych Miejsc Google, są zwracane, jeśli ustawisz ten parametr na wartość false.

  • isStrictTypeFiltering

    Używana z parametrem includeType. Jeśli ustawisz wartość true, zwracane będą tylko miejsca pasujące do typów określonych przez atrybut includeType. Jeśli wartością domyślną jest false (fałsz), odpowiedź domyślna może zawierać miejsca, które nie pasują do określonych typów.

  • locationBias

    Określa obszar wyszukiwania. Ta lokalizacja działa jako odchylenie, co oznacza, że mogą być zwracane wyniki dotyczące określonej lokalizacji, w tym wyniki spoza określonego obszaru.

    Możesz określić locationRestriction lub locationBias, ale nie oba jednocześnie. Pole locationRestriction określa region, w którym muszą się znajdować wyniki, a locationBias określa region, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza tym obszarem.

    Określ region jako prostokątny widoczny lub okrągły obszar.

    • Okrąg jest wyznaczany przez punkt środkowy i promień w metrach. Promień musi mieścić się w zakresie od 0,0 do 50 000,0 włącznie. Domyślny promień to 0,0. Na przykład:

      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
      
    • Prostokąt to widoczny obszar o długości i szerokości geograficznej, przedstawiony jako dwa punkty po przekątnej, znajdujące się naprzeciwko dolnego i wyższego punktu. Punkt dolny oznacza południowy róg prostokąta, a najwyższy – północno-wschodni róg prostokąta.

      Widoczny obszar jest uważany za obszar zamknięty, co oznacza, że obejmuje swoją granicę. Granice szerokości geograficznej muszą mieścić się w przedziale od -90 do 90 stopni włącznie, a granice długości geograficznej od -180 do 180 stopni włącznie:

      • Jeśli low = high, widoczny obszar składa się z tego pojedynczego punktu.
      • Jeśli low.longitude > high.longitude, zakres długości geograficznej jest odwrócony (widoczny obszar przecina linię długości geograficznej 180 stopni).
      • Jeśli low.longitude = –180 stopni, a high.longitude = 180 stopni, widoczny obszar obejmuje wszystkie długości geograficzne.
      • Jeśli low.longitude = 180 stopni, a high.longitude = -180 stopni, zakres długości geograficznej jest pusty.
      • Jeśli low.latitude > high.latitude, zakres szerokości geograficznej jest pusty.
  • locationRestriction

    Określa obszar wyszukiwania. Wyniki spoza określonego obszaru nie będą zwracane. Wskaż region jako prostokątny widoczny obszar. Informacje o definiowaniu widocznego obszaru znajdziesz w opisie obiektu locationBias.

    Możesz określić locationRestriction lub locationBias, ale nie oba jednocześnie. Pole locationRestriction określa region, w którym muszą się znajdować wyniki, a locationBias określa region, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza tym obszarem.

  • maxResultCount

    Określa maksymalną liczbę wyników miejsc do zwrócenia. Wartość musi mieścić się w przedziale od 1 do 20 (domyślnie) włącznie.

  • minRating

    Ogranicza wyniki tylko do tych, których średnia ocena użytkowników jest wyższa od tego limitu lub jej równa. Wartości muszą mieścić się w zakresie od 0,0 do 5,0 (włącznie) w przyrostach co 0,5. Na przykład: 0, 0,5, 1,0, ... , 5,0 włącznie. Wartości są zaokrąglane w górę do najbliższej wielokrotności 0,5. Na przykład wartość 0,6 eliminuje wszystkie wyniki o ocenie niższej niż 1,0.

  • priceLevels

    Ogranicz wyszukiwanie do miejsc oznaczonych na określonych poziomach cen. Domyślnie wybrane są wszystkie poziomy cen.

    Określ tablicę z co najmniej 1 wartością zdefiniowaną przez PriceLevel.

    Na przykład:

    request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • rankPreference

    Określa kolejność wyników w odpowiedzi na podstawie typu zapytania:

    • W przypadku zapytania kategorialnego, takiego jak „Restauracje w Nowym Jorku”, domyślna wartość to .relevance (ranking wyników według trafności wyszukiwania). Możesz ustawić rankPreference na .relevance lub .distance (ranking wyników według dystansu).
    • W przypadku zapytania niezwiązanego z kategorią, np. „Mountain View, CA”, zalecamy pozostawienie wartości rankPreference nieskonfigurowanej.
  • regionCode

    Kod regionu używany do formatowania odpowiedzi podany jako wartość dwuznakowego kodu CLDR. Ten parametr może też mieć wpływ na wyniki wyszukiwania. Nie ma wartości domyślnej.

    Jeśli nazwa kraju w polu adresu w odpowiedzi jest zgodna z kodem regionu, kod kraju zostanie pominięty w adresie.

    Większość kodów CLDR jest identyczna z kodami ISO 3166-1 z kilkoma wyjątkami. Na przykład domena ccTLD Wielkiej Brytanii to „uk” (.co.uk), a kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Wielka Brytania i Irlandia Północna”). Ten parametr może wpływać na wyniki w zależności od obowiązującego prawa.

Wyświetl atrybucję w swojej aplikacji

Gdy aplikacja wyświetla informacje uzyskane z usługi GMSPlacesClient, np. zdjęcia i opinie, musi też wyświetlać wymagane informacje o źródłach.

Na przykład właściwość reviews obiektu GMSPlacesClient zawiera tablicę maksymalnie 5 obiektów GMSPlaceReview. Każdy obiekt GMSPlaceReview może zawierać informacje o atrybucji lub autorach. Jeśli wyświetlasz opinię w aplikacji, musisz też podać informacje o autorze lub pochodzeniu danych.

Więcej informacji znajdziesz w dokumentacji dotyczącej atrybucji.