Esta página explica as diferenças entre a pesquisa por proximidade usada na classe
Place
(nova) e a
PlacesService
(legado) e fornece alguns snippets de código para comparação.
- O
PlacesService
legado tem um métodonearbySearch()
, que permite pesquisar lugares em uma área especificada por palavra-chave ou tipo. - A classe
Place
tem um métodosearchNearby()
que permite pesquisar lugares em uma área especificada por tipo de lugar, usando uma seleção ampliada de campos de dados e tipos de lugar para maior flexibilidade.
A tabela a seguir lista algumas das principais diferenças nos métodos de pesquisa por proximidade
entre a classe Place
e PlacesService
:
PlacesService (legado) |
Place (novo) |
---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
Requer o uso de um callback para processar o objeto de resultados e a
resposta google.maps.places.PlacesServiceStatus . |
Usa promessas e funciona de forma assíncrona. |
Requer uma verificação de PlacesServiceStatus . |
Nenhuma verificação de status necessária. É possível usar o tratamento de erros padrão. |
Suporte apenas para viés de localização. | Oferece suporte a viés e restrição de local. |
Retorna todos os campos de dados disponíveis (um subconjunto dos campos aceitos). Não é possível restringir a campos específicos. | Retorna apenas os campos de dados do lugar solicitados. A classe Place oferece uma seleção de campos ampliada e atualizada regularmente. |
Limitado a um conjunto fixo de tipos de lugar. | Acesse uma seleção ampliada e atualizada regularmente de tipos de lugar. |
Suporte a pesquisa de texto com a palavra-chave. | A pesquisa baseada em texto não é compatível. Use Text Search (New). |
Comparação de código
Esta seção compara o código dos métodos de pesquisa nas proximidades para ilustrar as diferenças entre o serviço Places e a classe Place. Os snippets de código mostram o código necessário em cada API para fazer uma solicitação de pesquisa baseada em texto.
Nearby Search (legado)
A Nearby Search legada permite pesquisar lugares em uma área especificada por palavra-chave ou tipo. Não há como restringir as pesquisas usando campos de dados de lugar, de modo que todos os campos disponíveis sejam retornados em cada solicitação.
O snippet a seguir mostra como chamar nearbySearch()
para retornar informações sobre restaurantes em Sydney, Austrália. A solicitação é síncrona, usa um callback
e inclui uma verificação condicional obrigatória em 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,
});
}
Saiba mais
Nearby Search (novo)
A nova versão da Pesquisa nas proximidades melhora a anterior das seguintes maneiras:
- A capacidade de especificar quais campos de dados de lugar serão retornados.
- O uso de promessas que permite a operação assíncrona.
- Não é necessário verificar o status de
PlacesService
. Em vez disso, é possível usar o processamento de erros padrão.
O snippet de código a seguir mostra uma função que faz uma solicitação de pesquisa por proximidade
para restaurantes. Este exemplo mostra o uso da opção rankPreference
para classificar
os resultados da pesquisa por popularidade. Na versão anterior, a classificação é especificada
usando a opção rankBy
. Como o método searchNearby()
usa o operador await
,
ele só pode ser usado dentro de uma função 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");
}
}