Repetidoras no MMAR - Radioamador

Foi introduzido no MMAR - Radioamador a possibilidade de consultar repetidoras a partir da localização geográfica, bastando a gente digitar uma coordenada e o raio de busca. O único ponto de atenção é que apesar de muito funcional e rápido, algumas repetidoras devem estar com o cadastro errado, até porque tem coordenadas no meio do Atlântico Norte.

Para consultar basta clicar em Consultar Repetidora na aba Opções e inserir a coordenada geografica. Dica: você pode copiar diretamente do Google Maps e ao colar ele quebrará automaticamente entre latitude e longitude:

Consulta de repetidoras no MMAR - Radioamador

Plotando em um mapa as localizações

Ver a localização geográfica já é muito útil, mas é muito mais interessante visualizar os pontos em um mapa. Para isso é possível utilizar um script para renderizar no mapa a localização e o resultado você pode ver abaixo:

Abrir mapa de repetidoras em tela cheia

O script de geração deste mapa, baseado no arquivo CSV que pode ser recuperado na consulta do MMAR - Radioamador, é este e para executa-lo basta rodar o comando uv run plot.py no mesmo diretório onde estiver o CSV com o nome repetidoras.csv:

# /// script
# dependencies = [
#   "pandas",
#   "folium",
#   "datetime"
# ]
# ///

import pandas as pd
import folium
from folium.plugins import MarkerCluster, Search
from datetime import datetime
import branca

# 1. Carregar dados
df = pd.read_csv('repetidoras.csv', sep=';')

# 2. Criar mapa
mapa = folium.Map(
    location=[-15.7801, -47.9292], 
    zoom_start=4,
    tiles='CartoDB positron'
)

# 3. Adicionar a data de referência (Texto flutuante)
data_hoje = datetime.now().strftime("%d/%m/%Y")
texto_data = f"""
     <div style="position: fixed; 
     bottom: 50px; left: 50px; width: 200px; height: 30px; 
     background-color: white; border:2px solid grey; z-index:9999; font-size:14px;
     padding: 5px; text-align: center;">&nbsp; Gerado em: {data_hoje}
     </div>
     """
mapa.get_root().html.add_child(folium.Element(texto_data))

# 4. Estrutura de Clusters e Busca (Mantida da versão anterior)
marker_cluster = MarkerCluster(name="Repetidoras").add_to(mapa)
search_group = folium.FeatureGroup(name="Busca").add_to(mapa)

for _, linha in df.iterrows():
    info = f"<b>{linha['Indicativo']}</b><br>Freq: {linha['Frequência de Operação']}"
    
    # Marcador visual
    marker = folium.Marker(
        location=[linha['Latitude'], linha['Longitude']],
        popup=folium.Popup(info, max_width=300),
        icon=folium.Icon(color='blue', icon='tower', prefix='fa')
    ).add_to(marker_cluster)
    
    # Marcador invisível para busca
    search_marker = folium.CircleMarker(
        location=[linha['Latitude'], linha['Longitude']],
        radius=0, fill=False, stroke=False
    )
    search_marker.search_label = str(linha['Indicativo'])
    search_marker.add_to(search_group)

# 5. Adicionar a busca
Search(
    layer=search_group,
    search_label='search_label',
    placeholder="Buscar Indicativo...",
    collapsed=False,
    search_zoom=14
).add_to(mapa)

mapa.save('mapa_repetidoras.html')
print(f"Mapa gerado com sucesso! Data de referência: {data_hoje}")