Migrer vers la nouvelle interface Place Search

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

Cette page explique les différences entre les fonctionnalités de recherche de lieux basées sur du texte dans la classe Place (nouvelle version) et PlacesService (ancienne version), et fournit quelques extraits de code à titre de comparaison.

L'ancienne version de PlacesService comporte les méthodes de recherche basées sur du texte suivantes :

  • La méthode findPlaceFromQuery() qui prend une requête textuelle et renvoie un seul résultat de lieu, et qui est compatible avec l'utilisation de champs de données de lieu.
  • La méthode findPlaceFromPhoneNumber() qui vous permet de rechercher un lieu à l'aide d'un numéro de téléphone et qui est compatible avec l'utilisation de champs de données de lieu.
  • La méthode textSearch() qui prend une requête textuelle et renvoie une liste de résultats de lieu. textSearch() est plus ancienne et n'est pas compatible avec l'utilisation de champs de données de lieu.

La nouvelle classe Place propose la méthode Place.searchByText(), qui vous permet de rechercher des lieux à l'aide d'une requête textuelle ou d'un numéro de téléphone, et de vous permettre de personnaliser vos recherches à l'aide d'une sélection étendue de champs de données de lieu et de types de lieux régulièrement mis à jour.

Le tableau suivant répertorie certaines des principales différences entre les méthodes de recherche de lieux entre la classe Place et PlacesService :

PlacesService (ancienne version) Place (nouvelle version)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Options de requête limitées. Options de requête plus étendues.
Nécessite l'utilisation d'un rappel pour gérer l'objet de résultats et google.maps.places.PlacesServiceStatus réponse. Utilise des promesses et fonctionne de manière asynchrone.
Nécessite une vérification PlacesServiceStatus. Aucune vérification d'état requise, peut utiliser la gestion des erreurs standard. En savoir plus.
N'accepte que le biais de localisation. Accepte le biais de localisation et la restriction de localisation.
Les champs de données de lieu sont mis en forme à l'aide de la casse serpent. Les champs de données de lieu sont mis en forme à l'aide de la casse chameau.
Renvoie un seul résultat de lieu. Renvoie jusqu'à 20 résultats de lieu.
Limité à un ensemble fixe de types de lieux et champs de données de lieu. Fournit une sélection étendue de types de lieux et de champs de données de lieu régulièrement mis à jour.
textSearch()
searchByText()
Renvoie tous les champs de données disponibles (un sous-ensemble des champs acceptés) ; ne peut pas être limité à des champs spécifiques. Ne renvoie que les champs de données de lieu demandés.

Comparaison de code

Cette section compare le code des méthodes de recherche textuelle pour illustrer les différences entre Places Service et la classe Place. Les extraits de code montrent le code requis sur chaque API respective pour effectuer une requête de recherche textuelle.

Places Service (ancienne version)

L'extrait de code suivant montre comment utiliser la méthode findPlaceFromQuery() pour rechercher un lieu. La requête est synchrone et inclut une vérification conditionnelle sur PlacesServiceStatus. Les champs de données de lieu nécessaires sont spécifiés dans le corps de la requête, qui est défini avant d'effectuer la requête réelle.

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

En savoir plus

Text Search (nouvelle version)

L'extrait de code suivant montre comment utiliser la méthode searchByText() pour rechercher des lieux. La requête est asynchrone et ne nécessite pas de vérification d'état (la gestion des erreurs standard peut être utilisée). Dans cet exemple, la requête inclut un maxResultCount de 8 (la valeur doit être comprise entre 1 et 20). Cette fonction parcourt les résultats et ajoute un repère pour chacun d'eux, en ajustant les limites de la carte en fonction de la position des repères. Étant donné que la méthode searchByText() utilise l'opérateur await, elle ne peut être utilisée que dans une fonction async.

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

La méthode searchByText() est compatible avec de nombreuses autres options de requête que la version précédente, y compris les suivantes :

  • includedType qui vous permet de limiter les recherches à un type de lieu spécifique.
  • isOpenNow qui vous permet de limiter les recherches pour ne renvoyer que les lieux ouverts.
  • minRating qui vous permet de filtrer les résultats en dessous de la limite spécifiée (par exemple, ne renvoyer que les lieux avec trois étoiles ou plus).
  • locationRestriction qui omet les résultats en dehors de l'emplacement spécifié (locationBias est également accepté).

En savoir plus