Migrer vers la nouvelle interface Place Search

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

L'ancienne PlacesService propose les méthodes de recherche basées sur le texte suivantes:

  • La méthode findPlaceFromQuery(), qui prend une requête textuelle et renvoie un seul résultat de lieu, et prend en charge l'utilisation de champs de données de lieu.
  • La méthode findPlaceFromPhoneNumber() vous permet de rechercher un lieu à l'aide d'un numéro de téléphone et prend en charge l'utilisation de champs de données de lieu.
  • La méthode textSearch(), qui accepte une requête textuelle et renvoie une liste de résultats de lieux. textSearch() est plus ancien 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 personnaliser vos recherches à l'aide d'une sélection étendue de champs de données et de types de lieux régulièrement mis à jour.

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

PlacesService (ancienne) Place (nouveau)
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 la réponse google.maps.places.PlacesServiceStatus. Utilise des promesses et fonctionne de manière asynchrone.
Nécessite une vérification PlacesServiceStatus. Aucune vérification d'état requise. Vous pouvez utiliser la gestion des erreurs standard.
Compatible uniquement avec le biais de localisation. Compatible avec le biais de localisation et la restriction de l'emplacement.
Les champs de données de lieu sont mis en forme en snake case. Les champs de données de lieu sont mis en forme en Camel Case.
Renvoie un résultat de lieu unique. Renvoie jusqu'à 20 résultats de lieux.
Limité à un ensemble fixe de types d'établissements et de champs de données sur les établissements. 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 de texte pour illustrer les différences entre le service Places et la classe Place. Les extraits de code montrent le code requis sur chaque API respective pour effectuer une requête de recherche textuelle.

Service Places (ancien)

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 de l'é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 itère sur 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() accepte de nombreuses autres options de requête par rapport à 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 inférieurs à la limite spécifiée (par exemple, n'afficher que les lieux ayant reçu trois étoiles ou plus).
  • locationRestriction, qui exclut les résultats en dehors de l'emplacement spécifié (locationBias est également accepté).

En savoir plus