Nesta página, explicamos as diferenças entre os recursos de pesquisa de lugares baseados em texto em
a classe Place (nova) e
o PlacesService
(legado) e fornecemos alguns snippets de código para comparação.
O PlacesService legado tem os seguintes métodos de pesquisa baseados em texto:
- O método
findPlaceFromQuery(), que recebe uma consulta de texto e retorna um único resultado de lugar, e oferece suporte ao uso de campos de dados de lugar. - O método
findPlaceFromPhoneNumber(), que permite pesquisar um lugar usando um número de telefone e oferece suporte ao uso de campos de dados de lugar. - O método
textSearch(), que recebe uma consulta de texto e retorna uma lista de resultados de lugares.textSearch()é mais antigo e não oferece suporte ao uso de campos de dados de lugar.
A nova classe Place oferece o método Place.searchByText(), que permite buscar lugares usando uma consulta de texto ou um número de telefone, além de personalizar as pesquisas usando uma seleção expandida de campos de dados de lugar e tipos de lugar atualizados regularmente.
A tabela a seguir lista algumas das principais diferenças nos métodos de pesquisa de lugares
entre a classe Place e PlacesService:
PlacesService (legado) |
Place (novo) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Opções de consulta limitadas. | Opções de consulta mais abrangentes. |
Exige 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. |
Exige uma verificação de PlacesServiceStatus. |
Nenhuma verificação de status necessária, pode usar o tratamento de erros padrão. Saiba mais. |
| Oferece suporte apenas ao viés de local. | Oferece suporte ao viés de local e à restrição de local. |
| Os campos de dados de lugar são formatados usando snake case. | Os campos de dados de lugar são formatados usando camel case. |
| Retorna um único resultado de lugar. | Retorna até 20 resultados de lugares. |
| Limitado a um conjunto fixo de tipos de lugar e campos de dados de lugar. | Oferece uma seleção expandida de tipos de lugar e campos de dados de lugar atualizados regularmente. |
textSearch() |
searchByText() |
| Retorna todos os campos de dados disponíveis (um subconjunto dos campos aceitos); não pode ser restrito a campos específicos. | Retorna apenas os campos de dados de lugar solicitados. |
Comparação de código
Esta seção compara o código dos métodos de pesquisa de texto 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.
Serviço Places (legado)
O snippet de código a seguir mostra o uso do método findPlaceFromQuery() para pesquisar um lugar. A solicitação é síncrona e inclui uma verificação condicional em PlacesServiceStatus. Os campos de dados de lugar necessários são especificados no corpo da solicitação, que é definido antes de fazer a solicitação real.
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);
}
});
}
Saiba mais
- Confira o exemplo completo de código.
- Consulte a documentação.
- Referência da interface
FindPlaceFromQueryRequest
Text Search (novo)
O snippet de código a seguir mostra o uso do método searchByText() para pesquisar lugares. A solicitação é assíncrona e não exige uma verificação de status (o tratamento de erros padrão pode ser usado). Neste exemplo, a solicitação inclui um maxResultCount de 8 (o valor precisa estar entre 1 e 20). Essa função faz um loop nos resultados e adiciona um marcador para cada um deles, ajustando os limites do mapa com base na posição dos marcadores. Como o método searchByText() usa o operador await, ele só pode ser usado dentro de uma função 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");
}
}
O método searchByText() oferece suporte a muitas outras opções de solicitação em comparação com a versão anterior, incluindo:
includedType, que permite restringir as pesquisas a um tipo de lugar específico.isOpenNow, que permite restringir as pesquisas para retornar apenas lugares abertos.minRating, que permite filtrar resultados abaixo do limite especificado (por exemplo, retornar apenas lugares com três estrelas ou mais).locationRestriction, que omite resultados fora do local especificado (locationBiastambém é aceito).
Saiba mais
- Confira o exemplo completo de código.
- Consulte a documentação do Text Search (novo).
- Consulte a referência
searchByText().