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) et la classe PlacesService (ancienne), et fournit quelques extraits de code à des fins de comparaison.

L'ancienne classe PlacesService comporte les méthodes de recherche textuelle 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 des 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 accepte 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 des 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. Elle vous permet également de personnaliser vos recherches à l'aide d'une sélection élargie de champs de données et de types de lieux régulièrement mis à jour.

Le tableau suivant liste certaines des principales différences entre les méthodes de recherche de lieux des classes Place et 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 de l'état n'est requise. Vous pouvez utiliser la gestion des erreurs standard. En savoir plus
Compatible uniquement avec le biais de localisation. Compatible avec le biais géographique et la restriction géographique.
Les champs de données de lieu sont mis en forme à l'aide de la casse snake. Les champs de données de lieu sont mis en forme en camel case.
Renvoie un seul résultat de lieu. Renvoie jusqu'à 20 résultats de lieux.
Limité à un ensemble fixe de types de lieux et de champs de données de lieux. Fournit une sélection élargie de types de lieux et de champs de données de lieux régulièrement mis à jour.
textSearch()
searchByText()
Renvoie tous les champs de données disponibles (un sous-ensemble des champs acceptés). Il n'est pas possible de le contraindre à 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 (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 proprement dite.

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 parcourt les résultats en boucle 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 par rapport à la version précédente, y compris :

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

En savoir plus