Veja seus dados em tempo real com a estilização baseada em dados

Este documento descreve por que e como implementar o estilo orientado a dados dinâmico dos limites do Google usando a API Maps JavaScript, que é útil para vários casos de uso em diversos setores e segmentos.

Contagem de táxis em Nova York por código postal
Contagem animada de táxis em Nova York por limite de código postal (simulada, em intervalos de tempo):
Número de táxis em Nova York por código postal (cronofotografia) Legenda do mapa

O estilo baseado em dados é um recurso da Plataforma Google Maps que permite usar polígonos de limites administrativos do Google, aplicar estilo a esses polígonos para exibição nos mapas e combinar seus próprios dados para criar mapas personalizados e avançados que podem ser usados para análise visual e melhor compreensão dos seus dados. Neste documento, vamos discutir alguns casos de uso que explicam por que e como você pode visualizar seus dados com o estilo baseado em dados em um mapa quase em tempo real integrando feeds de dados dinâmicos.

Com o estilo baseado em dados, você cria mapas que mostram a distribuição geográfica dos dados, personaliza dinamicamente o estilo do polígono e interage com seus dados usando eventos de clique. Esses recursos podem ser usados para criar mapas informativos e envolventes para diversos casos de uso e setores.

Confira alguns exemplos de casos de uso que podem ser aplicados a um mapa que mostra atualizações de dados dinâmicos no estilo orientado a dados:

  • Serviço de transporte por aplicativo:as atualizações em tempo real podem ser usadas para identificar áreas com alta demanda. Nesse caso, alguns provedores podem ter preços dinâmicos.
  • Transporte:as atualizações em tempo real podem ser usadas para identificar áreas de congestionamento, o que ajuda a determinar as melhores rotas alternativas.
  • Eleições:na noite da eleição, os dados de pesquisa em tempo real podem ser usados para visualizar os resultados à medida que acontecem.
  • Segurança dos trabalhadores:as atualizações em tempo real podem ser usadas para acompanhar eventos à medida que eles acontecem, identificar áreas de alto risco e fornecer informações situacionais aos socorristas no local.
  • Clima:as atualizações em tempo real podem ser usadas para rastrear o movimento de tempestades, identificar perigos atuais e fornecer avisos e alertas.
  • Ambiente:as atualizações em tempo real podem ser usadas para rastrear o movimento de cinzas vulcânicas e outros poluentes, identificar áreas de degradação ambiental e monitorar o impacto da atividade humana.

Em todas essas situações, os clientes podem aproveitar ainda mais os dados combinando os feeds de dados em tempo real com os limites do Google para visualizar os dados de forma rápida e fácil em um mapa, o que oferece a eles o superpoder de insights quase instantâneos para tomar decisões mais informadas.

Abordagem arquitetônica para a solução

Agora vamos criar um mapa usando o estilo com base em dados para visualizar dados dinâmicos. Como ilustrado anteriormente, o caso de uso é uma contagem de táxis de Nova York visualizada por código postal. Isso pode ajudar os usuários a entenderem como será fácil chamar um táxi.

Arquitetura
Confira um diagrama de arquitetura de aplicativos da abordagem:
arquitetura do aplicativo

A solução dinâmica de estilo baseada em dados

Agora, vamos conferir as etapas necessárias para implementar um mapa coroplético dinâmico com estilo orientado a dados para seu conjunto de dados.

Com essa solução, você pode visualizar um conjunto de dados hipotético de densidade de táxis em tempo real em Nova York por código postal. Embora esses dados não sejam reais, eles têm aplicações práticas e mostram o poder e as possibilidades de visualização de dados dinâmicos no mapa com o estilo orientado a dados.

Etapa 1: escolher os dados a serem visualizados e agrupados a um ID de lugar de limite

A primeira etapa é identificar os dados que você quer mostrar e garantir que eles possam ser associados aos limites do Google. É possível fazer essa correspondência no lado do cliente chamando o método de callback findPlaceFromQuery para cada postalCode. Os CEPs nos EUA têm nomes distintos, mas outros níveis administrativos não. Selecione o ID de lugar correto para sua consulta nos casos em que houver resultados ambíguos.


const request = {
    query: postalCode,
    fields: ['place_id'],
};
 
function findPlaceId() {
   placesService.findPlaceFromQuery(request, function (results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
         console.log(results[0]);
      }
   });
}

Se os dados tiverem valores de latitude e longitude, você também poderá usar a API Geocoding com filtragem de componentes para resolver esses valores de lat/lon em valores de ID de lugar para a camada de elementos que você quer estilizar. Neste exemplo, você vai estilizar a camada de elementos POSTAL_CODE.

Etapa 2: conectar-se a dados em tempo real

Há várias maneiras de se conectar a fontes de dados, e a melhor implementação vai depender das suas necessidades específicas e da infraestrutura técnica. Neste caso, vamos supor que seus dados estejam em uma tabela do BigQuery com duas colunas: "zip_code" e "taxi_count", e que você vai consultar esses dados usando uma Função do Firebase Cloud.

async function queryNycTaxis() {
   // Queries the NYC Taxis dataset.

   // Create a client
   const bigqueryClient = new BigQuery();
  
   // The SQL query to run
   const sqlQuery = 'SELECT zip_code, taxi_count
      FROM \'YOUR_DATASET_ID.TABLE\' LIMIT 100';
      
   const options = {
      query: sqlQuery,
      // Location must match that of the dataset(s)
      // referenced in the query.
      location: 'US',
   };
  
   // Run the query
   const [rows] = await bigqueryClient.query(options);
  
   rows.forEach(row => {
      const postalCode = row['zip_code'];
      const taxiCount = row['taxi_count'];
   });
}

Em seguida, mantenha os dados atualizados. Uma maneira de fazer isso é chamar a consulta acima usando um web worker e definir um timer para atualizar os dados usando a função setInterval. É possível definir o intervalo como um valor adequado, como atualizar o mapa a cada 15 segundos. Sempre que o intervalo de tempo passar, o worker da Web vai solicitar valores atualizados de taxiCount por postalCode.

Agora que podemos consultar e atualizar os dados, vamos garantir que a aparência dos polígonos do mapa reflita essas mudanças.

Etapa 3: estilizar o mapa com o estilo baseado em dados

Agora que você tem os valores de dados dinâmicos necessários para criar e aplicar um estilo visual aos limites do código postal na sua instância do Maps JavaScript como um objeto JSON, é hora de dar um estilo a ele como um mapa de choropletha.

Neste exemplo, você vai estilizar o mapa com base no número de táxis em cada código postal, aos usuários uma ideia da densidade e disponibilidade de táxis na área. O estilo varia de acordo com os valores da contagem de táxis. As áreas com menos táxis terão um estilo roxo aplicado, e o gradiente de cores vai passar pelo vermelho, laranja e terminar no amarelo de táxi de Nova York nas áreas de maior densidade. Para esse esquema de cores, você vai aplicar esses valores de cor a fillColor e strokeColor. Ao definir o fillOpacity como 0,5, os usuários podem ver o mapa subjacente, e definir o strokeOpacity como 1,0 permite que eles diferenciem os limites de polígonos da mesma cor:


const featureLayer = map.getFeatureLayer(
   google.maps.FeatureType.POSTAL_CODE
);
featureLayer.style = (featureStyleFunctionOptions) => {
   const placeFeature = featureStyleFunctionOptions.feature;
   // taxiCount per (postal_code) PlaceID 
   const taxiCount = zips[placeFeature.placeId];
   let fillColor;
   let strokeColor;
// Apply colors to features based on taxiCount values
if (taxiCount < 8) {
   fillColor = "#571845";  
   strokeColor = "#571845"; 
} else if (taxiCount < 13) {
   fillColor = "#900c3e";
   strokeColor = "#900c3e";
} else if (taxiCount < 21) {
   fillColor = "#c60039"; 
   strokeColor = "#c60039"; 
} else if (taxiCount < 34) {
   fillColor = "#fe5733";
   strokeColor = "#fe5733";
// keep else if or the whole map gets this style with else
} else if (taxiCount >= 34) { 
   fillColor = "#fec30f";
   strokeColor = "#fec30f";
}  
return {
   fillColor,
   strokeColor,
   fillOpacity: 0.5,
   strokeOpacity: 1.0,
};
 

Conclusão

O estilo baseado em dados para limites do Google permite usar seus dados para estilizar o mapa em várias implementações em diferentes setores e segmentos. A conexão com dados em tempo real permite comunicar o que está acontecendo, onde está acontecendo e como está acontecendo. Esse recurso tem o potencial de aumentar o valor dos seus dados em tempo real e ajudar os usuários a entender melhor o que está acontecendo.

Próximas ações

Colaboradores

Autor principal:

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