Migrer vers la nouvelle interface Nearby Search

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

Cette page explique les différences entre la recherche à proximité telle qu'elle est utilisée dans la classe Place (nouvelle) et dans la classe PlacesService (ancienne), et fournit des extraits de code à titre de comparaison.

  • L'ancien PlacesService dispose d'une méthode nearbySearch(), qui vous permet de rechercher des lieux dans une zone spécifiée par mot clé ou par type.
  • La classe Place dispose d'une méthode searchNearby() qui vous permet de rechercher des lieux dans une zone spécifiée par type de lieu, en utilisant une sélection étendue de champs de données de lieu et de types de lieux pour plus de flexibilité.

Le tableau suivant liste certaines des principales différences entre les méthodes de recherche à proximité de la classe Place et de PlacesService :

PlacesService (ancienne) Place (Nouveau)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
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 n'est requise. Vous pouvez utiliser la gestion des erreurs standard. En savoir plus
N'accepte que la pondération géographique. Compatible avec la pondération et la restriction d'emplacement.
Renvoie tous les champs de données disponibles (un sous-ensemble des champs acceptés). Ne peut pas être limité à des champs spécifiques. Renvoie uniquement les champs de données de lieu demandés. La classe Place propose une sélection de champs étendue et régulièrement mise à jour.
Limité à un ensemble fixe de types de lieux. Accédez à une sélection étendue et régulièrement mise à jour de types de lieux.
Recherche textuelle compatible avec le mot clé. La recherche textuelle n'est pas acceptée. Utilisez plutôt Text Search (nouvelle version).

Comparaison de code

Cette section compare le code des méthodes de recherche à proximité 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.

Nearby Search (ancienne version)

L'ancienne version de Nearby Search permet de rechercher des lieux dans une zone définie par mot clé ou par type. Il n'existe aucun moyen de limiter les recherches à l'aide de champs de données de lieu, de sorte que tous les champs disponibles sont renvoyés avec chaque requête. L'extrait de code suivant montre comment appeler nearbySearch() pour renvoyer des informations sur les restaurants de Sydney, en Australie. La requête est synchrone, utilise un rappel et inclut une vérification conditionnelle obligatoire sur PlacesServiceStatus.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

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

En savoir plus

Nearby Search (nouvelle version)

La nouvelle version de Nearby Search améliore la version précédente de la manière suivante :

  • La possibilité de spécifier les champs de données de lieu à renvoyer.
  • L'utilisation de promesses, qui permet d'effectuer des opérations asynchrones.
  • Il n'est pas nécessaire de vérifier l'état de PlacesService. Vous pouvez utiliser la gestion des exceptions standard à la place.

L'extrait de code suivant montre une fonction qui effectue une requête Nearby Search pour des restaurants. Cet exemple montre comment utiliser l'option rankPreference pour classer les résultats de recherche par popularité (dans la version précédente, le classement est spécifié à l'aide de l'option rankBy). Comme la méthode searchNearby() utilise l'opérateur await, elle ne peut être utilisée que dans une fonction async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    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");
  }
}

En savoir plus