Interaja com os clientes em tempo real com os Marcadores Avançados e o Firebase

Com a Plataforma Google Maps, os clientes podem desenvolver experiências únicas personalizando o design visual dos marcadores de mapa usando os Marcadores Avançados. Neste documento, vamos mostrar como os clientes podem ir além e criar marcadores que mudam dinamicamente com base em dados em tempo real.

A imagem principal mostra um mapa do Google Maps JS centralizado em São Francisco. Vários locais mostram marcadores coloridos com o conteúdo "2 min" ou "4 min".
A coloração e o conteúdo são atualizados com o tempo.

Os marcadores de mapa são uma ferramenta útil para oferecer experiências de mapeamento avançadas aos usuários. Atributos do marcador, como tamanho, cor e forma, podem transmitir mais informações sobre cada local marcado. Em alguns casos, essas informações adicionais podem mudar dinamicamente, e o desenvolvedor pode querer que a visualização do mapa seja atualizada, mantendo uma sensação de novidade para o usuário.

Neste documento, usamos um exemplo para fins ilustrativos: uma rede de varejo quer usar um mapa para disponibilizar aos usuários os tempos de espera das lojas. No entanto, essa mesma arquitetura pode ser usada para muitos outros casos de uso. Confira mais algumas ideias:

  • Disponibilidade de quartos de hotel: em um mapa que mostra os resultados da pesquisa de hotéis, a atualização da disponibilidade de quartos é um sinal importante que pode incentivar os usuários a fazer uma reserva à 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 terá 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 chegarem.

A solução de marcadores avançados dinâmicos

É possível criar um mapa usando marcadores avançados para visualizar dados dinâmicos. Como mencionado antes, o caso de uso é uma rede de lojas de varejo que usa o sistema de gerenciamento de filas de pagamento para estimar e visualizar os tempos de espera dos usuários. Esta é a arquitetura do aplicativo:

Um diagrama de arquitetura ilustra o usuário acessando o aplicativo da Web.
A infraestrutura do aplicativo da Web do Google (GMP e Firebase Cloud Functions).
O Firebase Cloud Functions acessa dados ativos do back-end do cliente.

Etapa 1: determinar 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 mostrar 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 de marcador está disponível na especificação PinElement. Você também pode usar HTML personalizado para opções de personalização mais avançadas.

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 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, estamos usando uma abordagem de extração, em que solicitamos os dados atualizados de tempo de espera usando solicitações HTTP (REST) regularmente. Nas seções a seguir, você vai conhecer arquiteturas alternativas que usam abordagens de push.

Para permitir que nosso aplicativo acesse os dados de tempo de espera do nosso servidor, nossa arquitetura usa 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 nossa função do Cloud usando uma solicitação HTTP.

A próxima etapa é garantir que os dados estejam atualizados para o usuário. Para isso, configuramos um timer usando a função setInterval do JavaScript com um tempo limite de 30 segundos. Cada vez que o timer é acionado, solicitamos dados atualizados de tempo de espera, conforme descrito acima. Assim que recebermos os novos dados, vamos atualizar a aparência dos marcadores de mapa. A próxima etapa detalha como fazer essas mudanças.

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 ID do mapa na solicitação de mapa JS.

No snippet de código mostrado abaixo, criamos os marcadores e definimos o conteúdo deles 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 última etapa é atualizar o texto do marcador e o estilo CSS de cada loja. O código abaixo lê os dados atualizados de tempo de espera e atribui estilo a cada marcador 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 para mostrar aos usuários os tempos de espera atualizados:

A imagem principal mostra um mapa do Google Maps JS centralizado em São Francisco. Vários locais mostram marcadores coloridos com o conteúdo "2 min" ou "4 min".
A coloração e o conteúdo são atualizados com o tempo.

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. A seguir, analisamos duas opções alternativas: o Firebase Cloud Messaging e os WebSockets. Qualquer que seja a abordagem escolhida, considere os fatores abaixo para que sua ferramenta de mapa continue funcionando bem:

  • Frequência de 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 de push. Usando essa abordagem, você envia atualizações para o aplicativo de mapa sempre que os dados de tempo de espera são atualizados no back-end. As mensagens de atualização vão acionar uma função de callback que tem como objetivo 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 em caso de problemas de conectividade.

WebSockets

Os WebSockets são outra abordagem baseada em push para manter os dados atualizados. Semelhante ao cenário anterior, você pode 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 ao Firebase Cloud Messaging, mas pode ser necessário mais trabalho para configurar a infraestrutura necessária.

Conclusão

Os desenvolvedores podem combinar fontes de dados em tempo real com 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, proporcionando uma experiência dinâmica para os usuários.

Próximas ações

Leia mais:

Colaboradores

Principais autores:

Jim Leflar | Engenheiro de soluções da Plataforma Google Maps

John Branigan | Engenheiro sênior de clientes do Google Cloud Platform

Steve Barrett | Engenheiro de soluções da Plataforma Google Maps