Mapas de calor no Delphi

Mapas de calor (HeatMaps) são uma excelente forma de visualizar a concentração de informações em determinadas regiões de um mapa.

Em vez de exibir apenas marcadores individuais, o mapa de calor utiliza cores e diferentes níveis de intensidade para destacar áreas com maior ou menor quantidade de ocorrências.

Com o TMS FNC Maps, podemos adicionar esse tipo de visualização às nossas aplicações Delphi de maneira simples, utilizando coordenadas geográficas e o método AddHeatMap.

Onde podemos utilizar HeatMaps?

Os mapas de calor podem ser aplicados em diversos tipos de sistemas. Alguns exemplos são:

  • Identificação das regiões com maior número de vendas;
  • Visualização da concentração de clientes;
  • Pontos com maior quantidade de entregas;
  • Regiões com maior ocorrência de chamados técnicos;
  • Áreas com maior incidência de acidentes;
  • Monitoramento de ocorrências policiais;
  • Concentração de acessos ou dispositivos;
  • Análise de movimentação de veículos;
  • Identificação de locais com maior procura por determinados serviços.

Em um sistema de gestão comercial, por exemplo, podemos utilizar o endereço dos clientes para gerar as coordenadas e apresentar no mapa as regiões com maior concentração de vendas.

Criando um HeatMap com TMS FNC Maps

Para criar o mapa de calor, primeiro precisamos montar um array do tipo TTMSFNCMapsCoordinateRecArray.

Cada posição desse array representa um ponto que será apresentado no mapa.

Veja um exemplo:

procedure TForm1.CriarMapaDeCalor;
var
  LCoordenadas: TTMSFNCMapsCoordinateRecArray;
  LHeatMap: TTMSFNCMapsHeatMap;
begin
  SetLength(LCoordenadas, 4);

  LCoordenadas[0].Latitude := -23.550520;
  LCoordenadas[0].Longitude := -46.633308;
  LCoordenadas[0].Weight := 1;

  LCoordenadas[1].Latitude := -23.551850;
  LCoordenadas[1].Longitude := -46.634700;
  LCoordenadas[1].Weight := 2;

  LCoordenadas[2].Latitude := -23.553100;
  LCoordenadas[2].Longitude := -46.632200;
  LCoordenadas[2].Weight := 3;

  LCoordenadas[3].Latitude := -23.549200;
  LCoordenadas[3].Longitude := -46.631500;
  LCoordenadas[3].Weight := 1;

  TMSFNCGoogleMaps1.BeginUpdate;
  try
    LHeatMap := TMSFNCGoogleMaps1.AddHeatMap(LCoordenadas);
    LHeatMap.Opacity := 1;
    LHeatMap.GradientStartColor := gcGreen;
    LHeatMap.GradientMidColor := gcYellow;
    LHeatMap.GradientEndColor := gcRed;
  finally
    TMSFNCGoogleMaps1.EndUpdate;
  end;
end;

O método AddHeatMap recebe o array de coordenadas e retorna um objeto do tipo TTMSFNCMapsHeatMap, que pode ser utilizado para personalizar a aparência do mapa de calor.

Entendendo o peso de cada coordenada

A propriedade Weight é opcional e define a intensidade de cada ponto. No exemplo anterior, utilizamos pesos diferentes:

LCoordenadas[0].Weight := 1;
LCoordenadas[1].Weight := 2;
LCoordenadas[2].Weight := 3;

A coordenada com peso 3 terá uma intensidade maior do que aquela configurada com peso 1. Esse recurso é muito útil quando os dados representam quantidades diferentes.

Também podemos utilizar como peso:

  • Quantidade de vendas;
  • Valor faturado;
  • Número de clientes;
  • Quantidade de entregas;
  • Número de chamados;
  • Quantidade de ocorrências;
  • Frequência de visitas.

Personalizando as cores

O TMS FNC Maps permite personalizar as três principais cores utilizadas no gradiente:

LHeatMap.GradientStartColor := gcGreen;
LHeatMap.GradientMidColor := gcYellow;
LHeatMap.GradientEndColor := gcRed;

Nesse exemplo, temos:

  • Verde para as regiões de menor intensidade;
  • Amarelo para a intensidade intermediária;
  • Vermelho para as regiões com maior intensidade.

Também podemos alterar a transparência por meio da propriedade Opacity:

LHeatMap.Opacity := 0.8;

Valores menores tornam o HeatMap mais transparente, permitindo visualizar melhor os detalhes do mapa exibido abaixo dele.

As propriedades de peso, opacidade e cores do gradiente permitem adaptar o mapa de calor às necessidades visuais e aos dados apresentados pela aplicação.

Adicionando dados dinamicamente

Na maioria dos projetos, as coordenadas utilizadas no mapa de calor serão carregadas de um banco de dados.

Podemos percorrer um DataSet e preencher o array dinamicamente:

procedure TForm1.CarregarHeatMapDoDataSet;
var
  LCoordenadas: TTMSFNCMapsCoordinateRecArray;
  LHeatMap: TTMSFNCMapsHeatMap;
  LIndice: Integer;
begin
  SetLength(LCoordenadas, QueryLocais.RecordCount);

  LIndice := 0;
  QueryLocais.First;
  while not QueryLocais.Eof do
  begin
    LCoordenadas[LIndice].Latitude := QueryLocais.FieldByName('latitude').AsFloat;
    LCoordenadas[LIndice].Longitude := QueryLocais.FieldByName('longitude').AsFloat;
    LCoordenadas[LIndice].Weight := QueryLocais.FieldByName('quantidade').AsFloat;
    Inc(LIndice);
    QueryLocais.Next;
  end;

  TMSFNCGoogleMaps1.BeginUpdate;
  try
    LHeatMap := TMSFNCGoogleMaps1.AddHeatMap(LCoordenadas);
    LHeatMap.Opacity := 0.8;
    LHeatMap.GradientStartColor := gcGreen;
    LHeatMap.GradientMidColor := gcYellow;
    LHeatMap.GradientEndColor := gcRed;
  finally
    TMSFNCGoogleMaps1.EndUpdate;
  end;
end;

Assim, o HeatMap pode refletir diretamente os dados reais da aplicação.

Melhorando o desempenho

Ao adicionar vários pontos ao mapa, é recomendado utilizar os métodos BeginUpdate e EndUpdate.

TMSFNCGoogleMaps1.BeginUpdate;
try
  // Inclusão e configuração dos elementos
finally
  TMSFNCGoogleMaps1.EndUpdate;
end;

Esses métodos agrupam as alterações realizadas no mapa, reduzindo a quantidade de chamadas individuais e melhorando o desempenho, principalmente quando trabalhamos com grandes volumes de coordenadas.

Serviços de mapas compatíveis

O recurso de HeatMaps está disponível nos seguintes componentes:

  • TTMSFNCGoogleMaps; (Google Maps)
  • TTMSFNCHERE; (HERE Maps)
  • TTMSFNCOpenLayers;(OpenLayers)
  • TTMSFNCLeaflet.(Leaflet)

Isso permite utilizar o recurso com diferentes serviços de mapas, escolhendo aquele que melhor atende às necessidades do projeto.

Uma das vantagens do TMS FNC Maps é justamente oferecer uma camada de abstração para trabalhar com diferentes serviços. Além disso, os componentes FNC podem ser utilizados em diferentes frameworks e plataformas, incluindo aplicações VCL, FireMonkey e TMS WEB Core. O produto apresenta compatibilidade com Windows, macOS, iOS, Android, Linux e os principais navegadores.

▶️Veja o exemplo em vídeo

No canal da Code4Delphi, temos um vídeo mostrando na prática como utilizar mapas de calor com Delphi e TMS FNC Maps.

No exemplo, demonstramos a criação do HeatMap, a inclusão das coordenadas e a personalização das cores utilizadas para representar a intensidade dos pontos. Assista ao vídeo: Mapa de calor com Delphi e TMS FNC Maps

Acesse também o repositório com o código fonte completo do exemplo: https://github.com/Code4Delphi/TMS-FNC-Maps/tree/master/Samples/FNCMapsHeatmaps

Conheça o TMS FNC Maps

O TMS FNC Maps é um conjunto de componentes para integrar mapas, geocodificação, rotas, localização, elevação, cálculo de pedágios e diversos outros recursos geográficos às aplicações Delphi.

Além dos HeatMaps, podemos trabalhar com:

  • Marcadores;
  • Polígonos;
  • Polylines;
  • Círculos;
  • Retângulos;
  • Rotas;
  • Arquivos GPX e GeoJSON;
  • Geocodificação de endereços;
  • Pesquisa de locais;
  • Mapas estáticos;
  • Diferentes provedores de mapas.

🔗 Links úteis

Saiba mais no site oficial: TMS FNC Maps

Documentação oficial sobre HeatMaps: Documentação do TTMSFNCMaps – HeatMaps

A TMS Software também publicou um conteúdo específico sobre a criação de HeatMaps: Creating Heatmaps in TMS FNC Maps for Delphi

🏷️ Cupom de desconto

Você pode adquirir os componentes da TMS Software utilizando o cupom exclusivo da Code4Delphi: 2026Code4Delphi30

O cupom oferece 30% de desconto nos componentes participantes. A quantidade de utilizações é limitada.

Conclusão

Os mapas de calor transformam grandes quantidades de coordenadas em uma visualização simples e fácil de interpretar.

Com poucas linhas de código, o TMS FNC Maps permite adicionar um HeatMap, definir pesos diferentes para cada localização e personalizar as cores e a transparência da visualização.