Nesta página, explicamos as diferenças entre a pesquisa por proximidade usada na classe
Place (nova) e na
PlacesService
(legada) e fornecemos alguns snippets de código para comparação.
- O PlacesServicelegado 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, usando 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 pesquisa por proximidade
entre a classe Place e PlacesService:
| PlacesService(legado) | Place(Novo) | 
|---|---|
| nearbySearch() | searchNearby() | 
| PlaceSearchRequest | SearchNearbyRequest | 
| Exige 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, pode usar o tratamento de erros padrão. Saiba mais. | 
| Aceita apenas o viés de local. | Tem suporte para restrição e viés de local. | 
| Retorna todos os campos de dados disponíveis (um subconjunto dos campos aceitos) e não pode ser restringido a campos específicos. | Retorna apenas os campos de dados de lugar solicitados. A classe Placeoferece uma seleção de campos expandida e atualizada regularmente. | 
| Limitado a um conjunto fixo de tipos de lugar. | Acesse uma seleção ampliada e atualizada regularmente de tipos de lugar. | 
| Pesquisa de texto compatível com a palavra-chave. | A pesquisa baseada em texto não é compatível. Use a Pesquisa de texto (nova). | 
Comparação de código
Esta seção compara o código dos métodos de pesquisa por proximidade para ilustrar as diferenças entre o serviço Places e a classe Place. Os snippets 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 locais em uma área especificada por palavra-chave ou tipo. Não há como restringir as pesquisas usando campos de dados de lugar. Portanto, 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 (novo)
A nova versão da Pesquisa por proximidade melhora a versão 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, use o tratamento de erros padrão.
O snippet de código a seguir mostra uma função que faz uma solicitação de pesquisa por proximidade
de restaurantes. Este exemplo mostra como usar a 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 em 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
- Confira o exemplo completo de código
- Consulte a documentação da Nearby Search (nova)
- Consulte a referência de searchNearby()