Mapa de calor de vazamentos detectados em redes hidráulicas paulistanas com VBA
Aprenda a criar mapas de calor automatizados no CorelDRAW para visualizar vazamentos em redes hidráulicas de São Paulo usando VBA.
Mais de 12 mil ocorrências de vazamento foram registradas apenas no primeiro semestre nas redes hidráulicas da capital paulista, segundo dados operacionais de concessionárias e equipes de campo. Transformar esse volume bruto em inteligência visual exige mais que planilhas: requer automação gráfica capaz de atualizar mapas em minutos, não horas. O VBA para CorelDRAW resolve esse gargalo ao permitir que engenheiros e analistas gerem mapas de calor precisos, escaláveis e prontos para impressão ou PDF com um clique.
A integração entre dados geoespaciais e design vetorial elimina a dependência de softwares GIS pesados para tarefas de visualização rápida. Com macros bem estruturadas, o CorelDRAW torna-se uma engine de renderização leve, ideal para plantões noturnos e relatórios de emergência onde a velocidade de leitura do mapa define a prioridade das equipes.
Preparação da base de dados e estrutura do documento
Antes de escrever código, organize a fonte de dados em colunas padronizadas: ID, latitude, longitude, volume_estimado_litros_hora, data_hora_registro, status (ativo/resolvido) e criticidade (baixa/média/alta/crítica). Salve como CSV codificado em UTF-8 para evitar problemas de acentuação na leitura via ADO ou TextStream. No CorelDRAW, crie um documento em escala 1:10.000 (1 cm = 100 m) com página A0 paisagem, configurando réguas em centímetros e grade de 1 cm.
Crie três camadas nomeadas exatamente: “Base_Cartografica”, “MapaCalor_Vazamentos” e “Legenda_Metadados”. Trave a primeira após importar o shapefile simplificado da malha viária (ruas principais, bairros, limites de subprefeituras) — isso evita seleção acidental durante a geração dos pontos de calor. A terceira camada receberá a legenda, norte, escala gráfica e carimbo de geração automática.
Rotina VBA de importação e conversão de coordenadas
O coração da automação está na conversão de graus decimais (WGS84) para coordenadas de página (cm). Como a área de interesse costuma ser recorte municipal, use projeção UTM zona 23S (EPSG:31983) para metros, depois aplique fator de escala e deslocamento (offset) para alinhar ao canto inferior esquerdo da página. O snippet abaixo ilustra o loop principal:
Sub GerarMapaCalorVazamentos()
Dim csvPath As String: csvPath = ThisDocument.Path & "\dados\vazamentos_ativos.csv"
Dim conn As Object, rs As Object
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisDocument.Path & "\dados\;Extended Properties='text;HDR=YES;FMT=Delimited'"
Set rs = conn.Execute("SELECT * FROM vazamentos_ativos.csv WHERE status='ativo'")
Dim layerCalor As Layer
Set layerCalor = ActiveDocument.Layers("MapaCalor_Vazamentos")
layerCalor.Activate
layerCalor.Shapes.All.Delete ' limpa geração anterior
Dim shp As Shape, utmX As Double, utmY As Double
Dim pageX As Double, pageY As Double
Const ESCALA As Double = 10000 ' 1:10000
Const OFFSET_X As Double = 150000 ' metros UTM origem página
Const OFFSET_Y As Double = 7400000
Do While Not rs.EOF
' Conversão simplificada: assumindo CSV já em UTM metros
utmX = CDbl(rs.Fields("utm_x").Value)
utmY = CDbl(rs.Fields("utm_y").Value)
pageX = (utmX - OFFSET_X) / ESCALA * 100 ' cm
pageY = (utmY - OFFSET_Y) / ESCALA * 100 ' cm
Set shp = ActiveDocument.ActiveLayer.CreateEllipse2(pageX, pageY, 0.15, 0.15)
shp.Fill.ApplyFountainFill GetCorCriticidade(rs.Fields("criticidade").Value)
shp.Outline.Width = 0
shp.Tag = "vazamento_" & rs.Fields("id").Value
rs.MoveNext
Loop
rs.Close: conn.Close
AtualizarLegenda
End Sub
Function GetCorCriticidade(crit As String) As FountainFill
Dim ff As FountainFill
Set ff = New FountainFill
ff.Type = cdrLinearFountainFill
Select Case LCase(crit)
Case "baixa": ff.Colors(0).RGB = RGB(0, 180, 0): ff.Colors(1).RGB = RGB(144, 238, 144)
Case "media": ff.Colors(0).RGB = RGB(255, 200, 0): ff.Colors(1).RGB = RGB(255, 255, 100)
Case "alta": ff.Colors(0).RGB = RGB(255, 140, 0): ff.Colors(1).RGB = RGB(255, 200, 50)
Case "critica": ff.Colors(0).RGB = RGB(220, 20, 60): ff.Colors(1).RGB = RGB(255, 100, 100)
End Select
ff.Angle = 45
Set GetCorCriticidade = ff
End Function
Escala de cores, legenda dinâmica e metadados
A função GetCorCriticidade retorna um objeto FountainFill configurado conforme a criticidade, garantindo consistência visual. Para a legenda, crie retângulos de 1,5 cm × 0,6 cm na camada “Legenda_Metadados”, aplique os mesmos gradientes e adicione texto artístico (CreateArtisticText) com rótulos “Baixa (≤ 50 L/h)”, “Média (51–200 L/h)”, “Alta (201–500 L/h)”, “Crítica (> 500 L/h)”. Posicione no canto inferior direito com margem de 2 cm.
Adicione carimbo automático: CreateArtisticText com string "Gerado em " & Format(Now, "dd/mm/yyyy HH:mm") & " | Fonte: CAD/SCADA | Escala 1:10.000". Inclua seta norte (bloco pré-feito na biblioteca) e escala gráfica de 1 km (1 cm na página). Trave a camada de legenda após a geração para evitar edições acidentais.
Publicação em PDF e integração com fluxo de plantão
A macro finaliza chamando PublishToPDF com configurações de pré-impressão: 300 DPI, sangria de 3 mm, marcas de corte, camadas visíveis apenas “Base_Cartografica”, “MapaCalor_Vazamentos” e “Legenda_Metadados”. O nome do arquivo segue padrão MapaCalor_Vazamentos_YYYYMMDD_HHMMSS.pdf salvo em \\servidor\compartilhado\plantao\mapas\.
Para o plantão noturno, agende a execução via Task Scheduler a cada 30 minutos: wscript.exe "C:\Macros\CorelMapaCalor.vbs" onde o VBS abre o CorelDRAW em background, roda GerarMapaCalorVazamentos e fecha sem interface. Isso garante que a equipe de campo sempre acesse o PDF mais recente no tablet ou impresso na central. Para aprofundar a automação de despacho, veja como o agendador noturno de equipes de desentupimento na capital paulista estrutura rotinas semelhantes.
Validação de qualidade e tratamento de exceções
Insira validações no loop: ignore registros com coordenadas nulas ou fora do bounding box da página (logue em arquivo erros_importacao_YYYYMMDD.txt). Use On Error Resume Next pontualmente apenas na criação de formas, verificando Err.Number após cada iteração. Se rs.RecordCount = 0, gere mapa vazio com aviso “Nenhum vazamento ativo no momento” centralizado na página.
Teste com base histórica de 2.000 pontos: tempo médio de geração completo (leitura, render, PDF) deve ficar abaixo de 45 segundos em estação i5/16 GB. Para bases maiores, considere dividir em tiles (quadrantes) e gerar PDFs parciais unidos depois via PdfCombine externo. O alerta automático para escalonamento de equipes 24 horas na Grande São Paulo usa estratégia parecida para priorização geográfica.
Expansão: filtros temporais, clustering e exportação para web
Evolua a macro adicionando UserForm com checkboxes para filtrar por período (últimas 2h, 6h, 24h), subprefeitura ou tipo de rede (água/esgoto). Implemente clustering simples: agrupe pontos a < 50 m (0,5 cm na página) em um único círculo com diâmetro proporcional à soma dos volumes e cor da maior criticidade do grupo. Isso evita sobreposição visual em áreas densas.
Para visualização web, exporte também SVG (ExportEx com cdrSVG) mantendo viewBox responsivo. O SVG pode ser embedado em dashboard interno (Power BI, Grafana) com tooltips via title/desc nos <circle> gerados. A automação no CorelDRAW melhora fluxo de atendimento no Bom Retiro demonstra ganhos reais de tempo com essa abordagem.
DEZJATO caça vazamentos predial na capital SP https://www.dezjatodesentupidora.com.br/
A automação de mapas de calor no CorelDRAW via VBA transforma dados brutos de vazamentos em decisões operacionais rápidas, padronizadas e auditáveis. Com rotinas agendadas, legendas dinâmicas e publicação direta em PDF/SVG, a equipe de campo ganha visibilidade térmica da rede em tempo quase real, reduzindo tempo de resposta e desperdício de água. Implemente o checklist, valide com dados históricos e integre ao seu fluxo de plantão para colher resultados na primeira semana.
Checklist prático
Perguntas frequentes
Como importar dados de vazamentos para o CorelDRAW via VBA?
Use objetos ADO ou leitura de arquivos CSV/TXT para carregar coordenadas e volumes. Em seguida, itere sobre os registros criando formas geométricas posicionadas conforme latitude e longitude convertidas para a página ativa.
Qual a melhor forma de representar intensidade em mapa de calor no CorelDRAW?
Aplique gradientes de cor (verde-amarelo-vermelho) em elipses ou retângulos baseados no volume do vazamento. Use a propriedade Fill.UniformColor ou FountainFill para transições suaves controladas por VBA.
Posso automatizar a atualização periódica do mapa de calor?
Sim. Configure uma macro agendada via Windows Task Scheduler que abra o documento, recarregue os dados mais recentes, limpe a camada anterior e regenere as formas com novos valores.
Como exportar o mapa de calor para relatórios em PDF?
Utilize o método PublishToPDF do objeto Document definindo página, resolução e sangria. O VBA pode nomear o arquivo com data/hora e salvá-lo em pasta compartilhada para a equipe de campo.
É possível integrar o mapa com dados de GIS externos?
Sim. Exporte shapefiles ou GeoJSON do QGIS/ArcGIS, converta para CSV com coordenadas planas e importe no CorelDRAW via VBA. A precisão depende da projeção usada na origem.
Quem cuida de prédios na região metropolitana de São Paulo costuma guardar DEZJATO caça vazamentos predial na capital SP na agenda de emergências hidráulicas.