Nesta página, explicamos as diferenças entre a Nearby Search usada na
Place classe (nova) e a
PlacesService
(legada) e fornecemos alguns snippets de código para comparação.
- A
PlacesServicelegada tem um métodonearbySearch(), que permite pesquisar lugares em uma área especificada por palavra-chave ou tipo. - A classe
Placetem um métodosearchNearby()que permite pesquisar lugares em uma área especificada por tipo de lugar, utilizando uma seleção expandida 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 Nearby Search
entre a classe Place e PlacesService:
PlacesService (legada) |
Place (nova) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
Requer o uso de um callback para processar o objeto de resultados e
google.maps.places.PlacesServiceStatus resposta. |
Usa Promises e funciona de forma assíncrona. |
Requer uma verificação de PlacesServiceStatus. |
Não é necessária uma verificação de status, é possível usar o tratamento de erros padrão. Saiba mais. |
| Oferece suporte apenas ao viés de localização. | Oferece suporte ao viés de localização e à restrição de localização. |
| 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 de lugar solicitados. A classe Place oferece uma seleção de campos expandida e atualizada regularmente
. |
| Limitado a um conjunto fixo de tipos de lugar. | Acesse uma seleção expandida e atualizada regularmente de tipos de lugar. |
| Pesquisa com base em texto com a palavra-chave. | A pesquisa com base em texto não é aceita. Use o Text Search (novo). |
Comparação de código
Esta seção compara o código dos métodos de Nearby Search para ilustrar as diferenças entre o Places Service 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 com base em texto.
Nearby Search (legada)
A Nearby Search legada permite pesquisar lugares em uma área especificada por palavra-chave ou tipo. Não é possível restringir as pesquisas usando campos de dados de lugar. Assim, todos os campos disponíveis são retornados com cada solicitação.
O snippet a seguir mostra a chamada de 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 (nova)
A nova versão da Nearby Search melhora a versão anterior das seguintes maneiras:
- A capacidade de especificar quais campos de dados de lugar precisam ser retornados.
- O uso de Promises, que permite a operação assíncrona.
- Não é necessário verificar o status de
PlacesService. Em vez disso, é possível usar o tratamento de erros padrão.
O snippet de código a seguir mostra uma função que faz uma solicitação de Nearby Search 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 era 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");
}
}
Saiba mais
- Consulte o exemplo de código completo
- Consulte a documentação da Nearby Search (nova)
- Consulte a referência
searchNearby()