Cette page explique les différences entre les fonctionnalités de Place Search basées sur du texte dans la classe Place (nouvelle) et PlacesService (ancienne), et fournit des extraits de code à titre de comparaison.
L'ancienne version de PlacesService propose 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 accepte 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 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, 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() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
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 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. |
| Les champs de données d'un lieu sont formatés en snake_case. | Les champs de données de lieu sont formatés en camelCase. |
| 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 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 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
- Voir l'exemple de code complet
- Voir la documentation
- Référence de l'interface
FindPlaceFromQueryRequest
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 et ajoute un repère pour chacun d'eux, en ajustant les limites de la carte en fonction de la position des repères. Comme 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 beaucoup plus d'options de requête que 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 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, ne renvoyer que les lieux ayant trois étoiles ou plus).locationRestriction, qui omet les résultats en dehors de l'emplacement spécifié (locationBiasest également accepté).
En savoir plus
- Voir l'exemple de code complet
- Consulter la documentation sur Text Search (New)
- Consultez la documentation de référence sur
searchByText().