A Plataforma Google Maps permite que os clientes desenvolvam experiências únicas personalizando o design visual dos marcadores do mapa usando os Marcadores avançados. Neste documento, vamos analisar como os clientes podem ir além e criar marcadores que mudam dinamicamente com base em dados em tempo real.
Os marcadores de mapa são uma ferramenta útil para oferecer experiências ricas em mapas aos usuários. Os atributos do marcador, como tamanho, cor e forma, podem transmitir informações adicionais sobre cada local marcado. Em alguns casos, essas informações adicionais podem mudar dinamicamente, e o desenvolvedor pode querer atualizar a visualização do mapa, mantendo uma sensação de novidade para o usuário.
Neste artigo, usamos um exemplo para fins ilustrativos: uma rede de varejo quer usar um mapa para mostrar os tempos de espera das lojas aos usuários. No entanto, essa mesma arquitetura pode ser usada para muitos outros casos de uso. Aqui estão algumas ideias adicionais:
- Disponibilidade de quartos do hotel: em um mapa que mostra os resultados da pesquisa de hotéis, a disponibilidade de quartos é um indicador importante que pode incentivar os usuários a fazer uma reserva em um hotel à medida que o inventário diminui.
- Disponibilidade de vagas de estacionamento: em um mapa de estacionamentos, dê aos usuários a confiança de selecionar um destino que tenha uma vaga para eles quando chegarem.
- Restaurantes abertos, que vão fechar em breve e fechados: em um mapa que mostra os resultados da pesquisa de restaurantes, é importante que os usuários saibam se um restaurante pode estar fechado quando eles chegarem.
Solução de marcadores avançados dinâmicos
Agora, vamos mostrar como criar um mapa usando Marcadores Avançados para visualizar dados dinâmicos. Como mencionado anteriormente, o caso de uso é uma rede de lojas de varejo que usa um sistema de gerenciamento de filas de check-out para estimar e visualizar os tempos de espera dos usuários. Esta é a arquitetura do aplicativo:
Etapa 1: determinar os atributos para definir a experiência visual
A primeira etapa é determinar uma ou mais propriedades de local para mostrar aos usuários. Nesse caso, queremos apresentar apenas uma propriedade: o tempo de espera atual em cada loja, medido em minutos.
A próxima etapa é selecionar um ou mais atributos de marcador correspondentes para anotar visualmente o tempo de espera no marcador do mapa. A lista de atributos do marcador está disponível na especificação PinElement. Você também pode usar HTML personalizado para ter mais opções de personalização.
Neste exemplo, vamos usar dois atributos de marcador para visualizar os dados de tempo de espera:
- Cor do marcador: azul para tempo de espera inferior a 5 minutos e amarelo para mais de 5 minutos
- Conteúdo do marcador (requer marcadores HTML personalizados): vamos incluir o tempo de espera atual em minutos no próprio marcador.
Etapa 2: configurar a conexão com as fontes de dados em tempo real
Há várias maneiras de se conectar a fontes de dados, e a solução certa depende do seu caso de uso e da infraestrutura técnica. Neste exemplo, usamos uma abordagem de pull, em que solicitamos os dados atualizados do tempo de espera por solicitações HTTP (REST) regularmente. Nas seções a seguir, você vai conhecer arquiteturas alternativas que usam abordagens push.
Para permitir que o aplicativo acesse os dados de tempo de espera do servidor, nossa arquitetura aproveita o Cloud Functions para Firebase. O Cloud Functions permite definir uma função de back-end para acessar e calcular esses dados. Também incluímos a biblioteca do Firebase no nosso aplicativo da Web, o que nos permite acessar a função do Cloud por meio de uma solicitação HTTP.
A próxima etapa é garantir que os dados sejam atualizados para o usuário. Para isso, configuramos um timer usando a função setInterval
do JavaScript com um tempo limite de 30 segundos. Sempre que o timer é acionado, solicitamos dados atualizados sobre o tempo de espera, conforme descrito acima. Quando obtemos os novos dados, precisamos atualizar a aparência dos marcadores do mapa. A próxima etapa detalha como fazer essas alterações.
Etapa 3: renderizar marcadores de mapa
Agora podemos usar os Marcadores Avançados para renderizar os marcadores estilizados no mapa. Os Marcadores Avançados podem ser renderizados em mapas criados pela API Maps JavaScript da Plataforma Google Maps. Ao usar marcadores avançados, inclua o parâmetro de ID do mapa na solicitação de mapa do JS.
No snippet de código mostrado abaixo, criamos os marcadores e definimos o conteúdo do marcador criando um elemento div HTML:
// Create the content div for the marker
storeWaitLabels[store_index] = document.createElement("div");
// Create the marker
markers.push(new google.maps.marker.AdvancedMarkerElement({
map,
position: { lat: latlngs[store_index][0], lng: latlngs[store_index][1] },
content: storeWaitLabels[store_index]
}));
A etapa final é atualizar o texto do marcador e o estilo CSS para cada loja. O código abaixo lê os dados de tempo de espera atualizados e atribui um estilo a cada pin de loja com base no tempo de espera:
// Update the visual appearcance of a map marker
storeWaitLabels[store_index].textContent = waitTimes[store_index] + " min";
if (waitTimes[store_index] > 5)
storeWaitLabels[store_index].className = "wait-over-5";
else storeWaitLabels[store_index].className = "wait-under-5";
O mapa agora usa nossa API de tempos de espera atual para visualizar os tempos de espera atualizados para os usuários:
Formas alternativas de se conectar a fontes de dados em tempo real
Há várias maneiras de se conectar a fontes de dados em tempo real. Veja abaixo duas opções alternativas: Firebase Cloud Messaging e Websockets. Independente da abordagem que você selecionar, considere os fatores abaixo para que sua ferramenta de mapa continue tendo um bom desempenho:
- Frequência das atualizações
- Volume de dados
- Número de marcadores na visualização do mapa
- Recursos de hardware e navegador
Firebase Cloud Messaging
O Firebase Cloud Messaging é uma abordagem push. Com essa abordagem, você vai enviar atualizações para o aplicativo de mapa sempre que os dados de tempo de espera forem atualizados no back-end. As mensagens de atualização vão acionar uma função de callback com o objetivo de atualizar a aparência e o conteúdo do marcador.
Antes de selecionar essa arquitetura, considere que ela exige a manutenção de uma conexão de servidor persistente para cada navegador que executa o aplicativo de mapa. Por isso, pode ser mais caro executar e menos robusto no contexto de problemas de conectividade.
WebSockets
Os WebSockets são outra abordagem baseada em push para manter os dados atualizados. Assim como no cenário anterior, é possível usar WebSockets para estabelecer uma conexão persistente entre o back-end e o aplicativo de mapa. Os benefícios funcionais dessa abordagem são semelhantes aos do Firebase Cloud Messaging, mas pode ser necessário fazer mais trabalho para configurar a infraestrutura necessária.
Conclusão
Os desenvolvedores podem combinar fontes de dados em tempo real com os Marcadores Avançados para criar visualizações intuitivas no Google Maps. Há várias maneiras de conectar essas fontes de dados, dependendo dos requisitos do mapa, do hardware e do navegador do usuário e do volume de dados. Os dados integrados podem ser usados para controlar a aparência dos marcadores avançados em tempo real, permitindo uma experiência dinâmica para os usuários.
Próximas ações
Leia mais:
- Marcadores avançados: Centro para Desenvolvedores do Google
- Criar marcadores com HTML personalizado
- Cloud Functions para Firebase
- Firebase Cloud Messaging
Colaboradores
Principais autores:
Jim Leflar | Engenheiro de soluções da Plataforma Google Maps
John Branigan | Engenheiro de clientes sênior do Google Cloud Platform
Steve Barrett | Engenheiro de soluções da Plataforma Google Maps