Migrer vers la nouvelle interface Nearby Search

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

  • L'ancienne 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 lieu pour plus de flexibilité.

Le tableau suivant présente 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 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.
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. La classe Place propose une sélection étendue et régulièrement mise à jour de champs.
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 basée sur le texte n'est pas prise en charge. 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 fonctionnalité Nearby Search vous 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 soient renvoyés avec chaque requête. L'extrait de code suivant montre comment appeler nearbySearch() pour renvoyer des informations sur les restaurants à Sydney, en Australie. La requête est synchrone, utilise un rappel et inclut une vérification conditionnelle requise 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 (nouveau)

La nouvelle version de la recherche à proximité améliore son prédécesseur de plusieurs manières:

  • Possibilité de spécifier les champs de données de lieu à renvoyer.
  • L'utilisation de promesses, qui permet une opération asynchrone.
  • Il n'est pas nécessaire de vérifier l'état de PlacesService. Vous pouvez utiliser la gestion des erreurs standard à la place.

L'extrait de code suivant montre une fonction qui envoie une requête de recherche dans les environs pour les 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). Étant donné que 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