Text Search (nouvelle version)

Sélectionnez une plate-forme : Android iOS JavaScript Services Web

Développeurs de l'Espace économique européen (EEE)

Text Search renvoie des informations sur un ensemble de lieux en fonction d'une chaîne. Par exemple, "pizza à New York", "magasin de chaussures près d'Ottawa" ou "123 Main Street". Ce service renvoie une liste des lieux correspondant à la chaîne de texte et aux limitations de zone géographique définis.

Ce service est particulièrement utile pour effectuer des requêtes d'adresses ambiguës dans un système automatisé. Les composants non liés à l'adresse de la chaîne peuvent également correspondre à des établissements et à des adresses. Les requêtes d'adresse ambiguës sont des adresses mal formatées ou des requêtes qui incluent des composants non liés à l'adresse, tels que des noms d'établissements. Les requêtes comme les deux premiers exemples peuvent ne renvoyer aucun résultat, sauf si un emplacement (tel qu'une région, une restriction géographique ou un biais de localisation) est défini.

"10 High Street, Royaume-Uni" ou "123 Main Street, États-Unis" Plusieurs "High Street" au Royaume-Uni, plusieurs "Main Street" aux États-Unis. La requête ne renvoie pas les résultats souhaités, sauf si une restriction géographique est définie.
"Chaîne de restaurants New York" Plusieurs établissements de la chaîne de restaurants à New York, sans adresse postale ni nom de rue.
"10 High Street, Escher UK" ou "123 Main Street, Pleasanton US" Il n'y a qu'une seule "High Street" dans la ville britannique d'Escher et une seule "Main Street" dans la ville américaine de Pleasanton, en Californie.
"UniqueRestaurantName New York" Un seul établissement porte ce nom à New York. Aucune adresse n'est nécessaire pour le différencier.
"restaurants de pizzas à New York" Cette requête contient sa restriction d'emplacement et "restaurants de pizzas" est un type de lieu bien défini. Elle renvoie plusieurs résultats.
"+1 514-670-8700"

Cette requête contient un numéro de téléphone. Elle renvoie plusieurs résultats pour les lieux associés à ce numéro de téléphone.

Obtenir une liste de lieux par recherche textuelle

Effectuez une requête de recherche de texte en appelant GMSPlacesClient searchByTextWithRequest:, en transmettant un objet GMSPlaceSearchByTextRequest qui définit les paramètres de la requête et une méthode de rappel, de type GMSPlaceSearchByTextResultCallback, pour gérer la réponse.

L'objet GMSPlaceSearchByTextRequest spécifie tous les paramètres obligatoires et facultatifs pour la requête. Les paramètres requis incluent :

  • Liste des champs à renvoyer dans l'objet GMSPlace, également appelée masque de champ, telle que définie par GMSPlaceProperty. Si vous ne spécifiez pas au moins un champ dans la liste des champs ou si vous omettez la liste des champs, l'appel renvoie une erreur.
  • La requête textuelle.

Cet exemple de requête de recherche de texte indique que les objets GMSPlace de la réponse contiennent le nom et l'ID du lieu pour chaque objet GMSPlace dans les résultats de recherche. Il filtre également la réponse pour n'afficher que les lieux de type "restaurant".

SDK Places Swift

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
}

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

Réponses Text Search

L'API Text Search renvoie un tableau de correspondances sous la forme d'objets GMSPlace, avec un objet GMSPlace par lieu correspondant.

Obtenir l'état d'ouverture

L'objet GMSPlacesClient contient une fonction membre appelée isOpenWithRequest (isOpenRequest en Swift et isPlaceOpenRequest dans GooglePlacesSwift) qui renvoie une réponse indiquant si le lieu est actuellement ouvert, en fonction de l'heure spécifiée dans l'appel.

Cette méthode utilise un seul argument de type GMSPlaceIsOpenWithRequest qui contient :

  • Objet GMSPlace ou chaîne spécifiant un ID de lieu. Pour en savoir plus sur la création de l'objet Place avec les champs nécessaires, consultez Détails du lieu.
  • Objet NSDate (Obj-C) ou Date (Swift) facultatif spécifiant l'heure à vérifier. Si aucune heure n'est spécifiée, la valeur par défaut est l'heure actuelle.
  • Méthode GMSPlaceOpenStatusResponseCallback pour gérer la réponse.
  • >

La méthode GMSPlaceIsOpenWithRequest nécessite que les champs suivants soient définis dans l'objet GMSPlace :

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Si ces champs ne sont pas fournis dans l'objet Place ou si vous transmettez un ID de lieu, la méthode utilise GMSPlacesClient GMSFetchPlaceRequest: pour les récupérer.

isOpenWithRequest réponse

isOpenWithRequest renvoie un objet GMSPlaceIsOpenResponse contenant une valeur booléenne nommée status qui indique si l'établissement est ouvert, fermé ou si son état est inconnu.

Langue Valeur si ouvert Valeur si la porte est fermée Valeur si l'état est inconnu
Places Swift true false nil
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

Facturation pour isOpenWithRequest

  • Les champs GMSPlacePropertyUTCOffsetMinutes et GMSPlacePropertyBusinessStatus sont facturés sous le SKU Basic Data. Le reste des horaires d'ouverture est facturé sous le SKU Enterprise Place Details.
  • Si votre objet GMSPlace possède déjà ces champs à la suite d'une demande précédente, vous ne serez pas facturé à nouveau.

Exemple : effectuer une requête GMSPlaceIsOpenWithRequest

L'exemple suivant montre comment initialiser un GMSPlaceIsOpenWithRequest dans un objet GMSPlace existant.

SDK Places Swift

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

Paramètres obligatoires

Utilisez l'objet GMSPlaceSearchByTextRequest pour spécifier les paramètres requis pour la recherche.

  • Liste des champs

    Spécifiez les propriétés de données de lieu à renvoyer. Transmettez une liste de propriétés GMSPlace spécifiant les champs de données à renvoyer. Si vous omettez le masque de champ, la requête renverra une erreur.

    Les listes de champs sont une bonne pratique à appliquer pour vous assurer de ne pas demander de données inutiles. Vous pourrez ainsi réduire le temps de traitement et les frais facturés.

    Spécifiez un ou plusieurs des champs suivants :

    • Les champs suivants déclenchent le SKU Text Search Essentials ID Only :

      GMSPlacePropertyPlaceID
    • Les champs suivants déclenchent le SKU Text Search Pro :

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyName
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance
    • Les champs suivants déclenchent le SKU Text Search Enterprise :

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite
    • Les champs suivants déclenchent le SKU Text Search Enterprise Plus :

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

    Chaîne de texte sur laquelle doit porter la recherche, par exemple "restaurant", "123 Main Street" ou "meilleur endroit à visiter à San Francisco".

Paramètres facultatifs

Utilisez l'objet GMSPlaceSearchByTextRequest pour spécifier les paramètres facultatifs de la recherche.

  • includedType

    Limite les résultats aux lieux correspondant au type spécifié défini par le tableau A. Vous ne pouvez spécifier qu'un seul type. Exemple :

    • let request = SearchByTextRequest()
      request.includedType = "bar"
    • let request = SearchByTextRequest()
      request.includedType = "pharmacy"
  • isOpenNow

    Si la valeur est true, ne renvoyez que les lieux ouverts au moment de l'envoi de la requête. Si la valeur est false, renvoie tous les établissements, quel que soit leur état (ouvert ou fermé). Les lieux sans horaires d'ouverture dans la base de données Google Places sont renvoyés si vous définissez ce paramètre sur false.

  • isStrictTypeFiltering

    Utilisé avec le paramètre includeType. Lorsque la valeur est définie sur true, seuls les lieux correspondant aux types spécifiés par includeType sont renvoyés. Si la valeur est "false" (valeur par défaut), la réponse peut contenir des lieux qui ne correspondent pas aux types spécifiés.

  • locationBias

    Spécifie une zone de recherche. Cet emplacement sert de biais, ce qui signifie que des résultats autour de l'emplacement spécifié peuvent être renvoyés, y compris des résultats en dehors de la zone spécifiée.

    Vous pouvez spécifier locationRestriction ou locationBias, mais pas les deux. Considérez locationRestriction comme spécifiant la région dans laquelle les résultats doivent se trouver, et locationBias comme spécifiant la région dont les résultats doivent être proches, mais qui peut être en dehors de la zone.

    Spécifiez la région sous forme de fenêtre d'affichage rectangulaire ou de cercle.

    • Un cercle est défini par un point central et un rayon en mètres. Le rayon doit être compris entre 0,0 et 50 000,0 (inclus). Le rayon par défaut est de 0.0. Exemple :

      let request = SearchByTextRequest()
      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
    • Un rectangle est une fenêtre d'affichage latitude-longitude, représentée par deux points bas et hauts diagonalement opposés. Le point bas marque l'angle sud-ouest du rectangle, et le point haut représente l'angle nord-est du rectangle.

      Une fenêtre d'affichage est considérée comme une région fermée, ce qui signifie qu'elle inclut sa limite. Les limites de latitude doivent être comprises entre -90 et 90 degrés inclus, et les limites de longitude doivent être comprises entre -180 et 180 degrés inclus :

      • Si low = high, la fenêtre d'affichage se compose de ce seul point.
      • Si low.longitude > high.longitude, la plage de longitude est inversée (la fenêtre d'affichage traverse la ligne de longitude de 180 degrés).
      • Si low.longitude = -180 degrés et high.longitude = 180 degrés, la fenêtre d'affichage inclut toutes les longitudes.
      • Si low.longitude = 180 degrés et high.longitude = -180 degrés, la plage de longitude est vide.
      • Si low.latitude > high.latitude, la plage de latitude est vide.
  • locationRestriction

    Spécifie une zone de recherche. Les résultats en dehors de la zone spécifiée ne sont pas renvoyés. Spécifiez la région en tant que fenêtre d'affichage rectangulaire. Pour savoir comment définir la fenêtre d'affichage, consultez la description de locationBias.

    Vous pouvez spécifier locationRestriction ou locationBias, mais pas les deux. Considérez locationRestriction comme spécifiant la région dans laquelle les résultats doivent se trouver, et locationBias comme spécifiant la région dont les résultats doivent être proches, mais qui peut être en dehors de la zone.

  • maxResultCount

    Spécifie le nombre maximal de résultats de lieux à renvoyer. Doit être compris entre 1 et 20 (valeur par défaut), inclus.

  • minRating

    Restreint les résultats à ceux dont la note moyenne des utilisateurs est supérieure ou égale à cette limite. Les valeurs doivent être comprises entre 0,0 et 5,0 (inclus), par incréments de 0,5. Par exemple : 0, 0.5, 1.0, ... , 5.0 inclus. Les valeurs sont arrondies à la demi-unité supérieure. Par exemple, une valeur de 0,6 élimine tous les résultats dont la note est inférieure à 1,0.

  • priceLevels

    Limiter la recherche aux lieux marqués à certains niveaux de prix Par défaut, tous les niveaux de prix sont sélectionnés.

    Spécifiez un tableau d'une ou plusieurs valeurs définies par PriceLevel.

    Exemple :

        let request = SearchByTextRequest()
        request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • rankPreference

    Spécifie le classement des résultats dans la réponse en fonction du type de requête :

    • Pour une requête par catégorie telle que "Restaurants à New York", .relevance (classer les résultats par pertinence de la recherche) est la valeur par défaut. Vous pouvez définir rankPreference sur .relevance ou .distance (classer les résultats par distance).
    • Pour une requête non catégorielle telle que "Mountain View, CA", nous vous recommandons de laisser rankPreference non défini.
  • regionCode

    Code de région utilisé pour mettre en forme la réponse, spécifié sous la forme d'une valeur de code CLDR à deux caractères. Ce paramètre peut également avoir un effet de biais sur les résultats de recherche. Il n'existe pas de valeur par défaut.

    Si le nom du pays du champ d'adresse dans la réponse correspond au code de région, le code pays est omis de l'adresse.

    La plupart des codes CLDR sont identiques aux codes ISO 3166-1, à quelques exceptions près. Par exemple, le ccTLD du Royaume-Uni est "uk" (.co.uk), tandis que son code ISO 3166-1 est "gb" (techniquement pour l'entité "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord"). Ce paramètre peut avoir une incidence sur les résultats en fonction de la loi applicable.

  • shouldIncludePureServiceAreaBusinesses

    Si la valeur est true, seuls les établissements de la zone de couverture sont renvoyés dans les résultats de recherche. Un établissement de services de proximité à domicile est un établissement qui se rend directement chez les clients pour effectuer une prestation ou leur livrer des produits, mais qui ne les accueille pas à l'adresse de l'établissement.

    Exemple :

    SDK Places Swift

    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;

Afficher les mentions dans votre application

Lorsque votre application affiche des informations obtenues à partir de GMSPlacesClient, comme des photos et des avis, elle doit également afficher les attributions requises.

Par exemple, la propriété reviews de l'objet GMSPlacesClient contient un tableau de cinq objets GMSPlaceReview maximum. Chaque objet GMSPlaceReview peut contenir des attributions et des attributions d'auteur. Si vous affichez l'avis dans votre application, vous devez également afficher toute attribution ou attribution d'auteur.

Pour en savoir plus, consultez la documentation sur les attributions.