Os aeroportos são grandes complexos com vários terminais, e a navegação precisa é essencial para chegadas e partidas pontuais. Normalmente, a API Geocoding do Google Maps retorna uma coordenada (latitude/longitude), que na maioria dos casos é o centroide do grande complexo aeroportuário. Esse app é uma ferramenta interativa projetada especificamente para ajudar os usuários a identificar e visualizar locais precisos em um local grande e complexo, como terminais específicos ou pontos de embarque/desembarque em um aeroporto.
Veja como isso é feito:
Pesquisa de aeroporto/local: os usuários começam pesquisando um local principal (por exemplo, "Aeroporto Internacional Indira Gandhi") usando a entrada do Google Places Autocomplete, que é restrita à Índia.
Descoberta de sublocalizações: depois que um local principal é selecionado, o script usa a API Google Places para buscar detalhes, incluindo principalmente os "subdestinos" listados associados a esse lugar (como Terminal 1, Terminal 3, portões específicos etc., se disponíveis nos dados do Google).
Mapeamento visual: o script usa a API Geocoding para encontrar as coordenadas do local principal e dos subdestinos.
Em seguida, ele mostra o local principal e coloca marcadores distintos e clicáveis (círculos azuis) no mapa para cada subdestino identificado.
Identificação precisa: clicar em um marcador de subdestino o destaca (fica verde) e abre uma janela de informações mostrando o nome e outros detalhes disponíveis (como endereço ou tipo), permitindo que o usuário confirme se selecionou o ponto específico correto.
Visualização contextual: o mapa ajusta automaticamente a visualização (fitBounds
) para verificar se todos os marcadores relevantes (local principal e subdestinos) estão claramente visíveis.
APIs da Plataforma Google Maps no app de navegação em aeroportos
Este documento explica as principais APIs da Plataforma Google Maps e os parâmetros usados no aplicativo de demonstração "Navegar até o aeroporto". O app usa vários serviços para fornecer exibição de mapa, pesquisa de lugares, informações detalhadas sobre lugares e insights avançados de localização.
1. Inicialização e exibição do mapa
A base do aplicativo é o próprio mapa interativo.
- API usada:
google.maps.Map
(da API Maps JavaScript) - Finalidade:criar e mostrar o mapa interativo na página da Web.
- Parâmetros principais:
center
: define o centro geográfico inicial do mapa. Neste app, ele é inicialmente definido como as coordenadas de Délhi ({ lat: 28.461835685621395, lng: 77.05004035761647 }
).zoom
: define o nível de zoom inicial do mapa.DEFAULT_ZOOM_LEVEL
(15) é usado para uma visualização em close-up.mapId
: um identificador exclusivo de um estilo de mapa configurado no console do Google Cloud.
2. Place Search e Autocomplete
A funcionalidade da barra de pesquisa é fornecida pela API Places.
- API usada:
google.maps.places.Autocomplete
(da biblioteca Places da API Maps JavaScript) - Finalidade:oferece preenchimento automático de texto preditivo para pesquisas geográficas à medida que o usuário digita, sugerindo lugares relevantes, como aeroportos.
- Parâmetros principais:
input
: o elemento de entrada HTML (#search-input
) em que o usuário digita a consulta.componentRestrictions
: filtra os resultados da pesquisa para um país específico. Aqui,{ country: 'in' }
restringe os resultados à Índia.fields
: especifica os campos de dados que serão retornados para o lugar selecionado.['place_id']
é usado inicialmente para recuperar apenas o identificador exclusivo do lugar, otimizando a transferência de dados.
- Como usar o preenchimento automático
// Initialize Autocomplete
const autocomplete = new google.maps.places.Autocomplete(input, {
componentRestrictions: { country: 'in' },
fields: ['place_id'],
});
// Add listener to the Autocomplete
autocomplete.addListener('place_changed', async () => {
const place = autocomplete.getPlace();
if (!place.place_id) {
return;
}
// Once a place is selected, fetch details
await getPlaceDetails(place.place_id);
});
3. Recuperar informações detalhadas sobre lugares e processar subdestinos
Depois que um lugar é selecionado nas sugestões de preenchimento automático, mais detalhes abrangentes são buscados.
- API usada:API Places (via chamada direta de
fetch
parahttps://places.googleapis.com/v1/places/{placeId}
) - Finalidade:recuperar detalhes avançados sobre um lugar específico, incluindo nome de exibição, endereço, tipos e, principalmente,
subDestinations
(por exemplo, terminais individuais ou áreas importantes em um complexo maior, como um aeroporto). - Parâmetros principais no URL:
{placeId}
: o identificador exclusivo do lugar selecionado.fields
: especifica os campos de dados exatos a serem recuperados. O app solicitaid
,displayName
,subDestinations
,types
eformattedAddress
. Isso é fundamental para controlar custos e receber apenas os dados necessários.
- Como receber
subDestinations
de um local
async function getPlaceDetails(placeId) {
// Construct the URL for the Places API (v1) details endpoint
// The 'fields' parameter is crucial for requesting subDestinations
const url = `https://places.googleapis.com/v1/places/${placeId}?key=YOUR_API_KEY&fields=id,displayName,subDestinations,types,formattedAddress`;
const response = await fetch(url);
const data = await response.json();
// Accessing subDestinations from the Places API response
if (data.subDestinations && data.subDestinations.length > 0) {
for (const subDestination of data.subDestinations) {
// Each subDestination object contains an 'id' and 'displayName'
console.log(`Sub-destination ID: ${subDestination.id}`);
console.log(`Sub-destination Name: ${subDestination.displayName?.text}`);
// This subDestination.id is then used in a geocoding call (as shown in section 4)
}
}
}
**Handling `subDestinations`:** When the Places API returns
`subDestinations`, the application initiates a process for each one:
1. **Geocoding:** It uses the `google.maps.Geocoder` to convert
each `subDestination.id` into its precise geographical coordinates
(`lat`, `lng`).
1. **Marker Placement:** A distinct marker is added to the map for
each sub-destination. These markers are styled with a blue circle icon
to differentiate them.
1. **Map Bounds Adjustment:** The `google.maps.LatLngBounds` object
is used to dynamically expand the map's view to encompass all retrieved
sub-destinations, verifying they are all visible within the current map
frame.
1. **Interactive Information Window:** A `click` listener is
attached to each sub-destination marker. When clicked, the marker's
icon changes to green, and an `InfoWindow` appears, displaying the
sub-destination's name, address, and types. This provides immediate,
detailed context to the user.
4. Geocodificação e geocodificação inversa: busca de detalhes para subdestinos
O aplicativo usa a geocodificação para duas finalidades principais: converter IDs de lugar em coordenadas e converter coordenadas de volta em detalhes de local. Esta seção destaca especificamente como a geocodificação é usada para receber informações detalhadas sobre subdestinos.
- API usada:
google.maps.Geocoder
(da API Maps JavaScript) e API Geocoding (via chamada diretafetch
parahttps://maps.googleapis.com/maps/api/geocode/json
) - Finalidade:
google.maps.Geocoder
: usado para converter umplaceId
(obtido da API Autocomplete ou Places) em coordenadas geográficas (lat
,lng
) e uma janela de visualização, permitindo que o mapa seja centralizado e tenha zoom correto no local selecionado e nos subdestinos dele.- API Geocoding (
fetch
): usada para geocodificação reversa (conversão de latitude e longitude em um endereço legível para humanos) e para recuperar dados avançados de localização, como contornos de edifícios e pontos de navegação.
- Parâmetros principais:
google.maps.Geocoder.geocode()
:placeId
: o ID do lugar a ser geocodificado.location
: o objetoLatLng
para geocodificação reversa.
- Chamada da API Geocoding
fetch
:latlng
: as coordenadas de latitude e longitude para a geocodificação inversa.extra_computations=BUILDING_AND_ENTRANCES
: esse parâmetro crítico solicita dados adicionais, especificamente pegadas de construção e informações de entrada, que são usadas para mostrar contornos de edifícios e pontos de navegação.
Como usar o ID subDestination
para buscar mais detalhes (por exemplo, local, endereço formatado, tipos)
function geocodeAndAddMarker(subDestination, bounds) {
return new Promise((resolve, reject) => {
const geocoder = new google.maps.Geocoder();
// Using the subDestination.id to geocode and get location details
geocoder.geocode({ placeId: subDestination.id }, (results, status) => {
if (status === "OK" && results[0]) {
const location = results[0].geometry.location;
const displayName = subDestination.displayName?.text || "Sub-destination";
const formattedAddress = results[0].formatted_address; // Further detail from Geocoding
const types = results[0].types; // Further detail from Geocoding
const marker = new google.maps.Marker({
map: map,
position: location,
title: displayName,
icon: {
path: google.maps.SymbolPath.CIRCLE,
fillColor: 'blue',
fillOpacity: 0.6,
strokeWeight: 0,
scale: 8
}
});
marker.addListener('click', () => {
marker.setIcon({
path: google.maps.SymbolPath.CIRCLE,
fillColor: 'green',
fillOpacity: 0.6,
strokeWeight: 0,
scale: 8
});
const infowindow = new google.maps.InfoWindow({
content: `<b>${displayName}</b><br><p>Address: ${formattedAddress}</p><p>Types: ${types.join(', ')}</p>`,
});
infowindow.open(map, marker);
});
bounds.extend(location);
resolve(true);
} else {
reject(new Error(`Geocoding failed for placeId: ${subDestination.id}`));
}
});
});
}
5. Mostrar marcadores
Os marcadores são usados para destacar locais específicos no mapa.
- API usada:
google.maps.Marker
(da API Maps JavaScript) egoogle.maps.marker.AdvancedMarkerElement
comgoogle.maps.marker.PinElement
(da biblioteca de marcadores da API Maps JavaScript) - Finalidade:
google.maps.Marker
: usado para o marcador arrastável inicial (emboradraggable
esteja definido comofalse
no código fornecido, ele faz parte da capacidade) e para marcadores de subdestino básicos, conforme descrito na seção 3.AdvancedMarkerElement
ePinElement
: usados para os marcadores de ponto de navegação mais visualmente distintos, permitindo a estilização personalizada do alfinete do marcador.
- Parâmetros principais:
position
: as coordenadasLatLng
onde o marcador será colocado.map
: a instância do mapa em que o marcador será exibido.title
: texto exibido ao passar o cursor sobre o marcador.icon
: permite ícones personalizados paragoogle.maps.Marker
(por exemplo,google.maps.SymbolPath.CIRCLE
com cores personalizadas).content
: paraAdvancedMarkerElement
, isso permite incorporar conteúdo HTML personalizado, incluindoPinElement
para ícones pré-estilizados.- Parâmetros
PinElement
:background
,borderColor
,glyphColor
,scale
para personalização visual.
6. Como mostrar contornos de edifícios
O aplicativo pode representar visualmente a área construída dos edifícios.
- API usada:
google.maps.Data
(da API Maps JavaScript) - Finalidade:exibir dados geográficos, como contornos de edifícios (retornados como GeoJSON
display_polygon
daextra_computations
da API Geocoding). - Parâmetros principais:
map
: a instância do mapa a que a camada de dados é aplicada.style
: define a aparência visual dos recursos GeoJSON (por exemplo,strokeColor
,fillColor
,fillOpacity
).addGeoJson()
: método para adicionar dados GeoJSON à camada.
7. Limites e zoom do mapa
verificando se a visualização do mapa abrange todos os locais relevantes.
- API usada:
google.maps.LatLngBounds
(da API Maps JavaScript) - Finalidade:ajustar dinamicamente a janela de visualização do mapa para se adequar a uma coleção de pontos geográficos (por exemplo, o lugar principal e todos os subdestinos dele).
- Principais métodos:
extend(location)
: adiciona um pontoLatLng
aos limites, expandindo-os se necessário.fitBounds(bounds)
: ajusta o centro e o nível de zoom do mapa para mostrar toda a área definida pelo objetoLatLngBounds
.
Ao combinar essas APIs da Plataforma Google Maps, o aplicativo oferece uma experiência abrangente e interativa para pesquisar lugares, ver detalhes e visualizar informações geográficas relacionadas, como subdestinos e contornos de edifícios.
Considerações sobre a implementação Isso não funciona em todas as áreas dos aeroportos e está sujeito à disponibilidade de dados (terminal do aeroporto).
Recursos API Geocoding API Places API Maps JavaScript
Autores: