CSV com Latitude e Longitude no Mapa: Abra no Navegador e Corrija os Sete Problemas Mais Comuns

Três colunas — um id, lat e lon — salvas como CSV e soltas no csv-viewer: esse é o tutorial inteiro para um arquivo limpo. Nada é enviado a um servidor; o arquivo é processado dentro da aba do seu navegador. Se o cabeçalho diz lat e lon, o seletor de colunas já vem preenchido e basta clicar em Abrir no mapa.

O resto é sobre arquivos que não são limpos — o Excel pt-BR ou es escreve -23,55 e ;, uma linha de título fica acima do cabeçalho, graus e minutos dividem uma única célula — e um visualizador que erra o palpite nem sempre avisa. Cada caso: o arquivo, o que o visualizador mostra (citado da nossa execução, inclusive quando não mostra nada), a correção no Excel, no LibreOffice Calc ou no Google Sheets, e a correção com ogr2ogr.

Testado novamente em 23 de setembro de 2026 contra a árvore em produção; GDAL 3.13.3 "Iowa City" para as transcrições de linha de comando. Onde a ferramenta mudou desde a primeira execução, o caso abaixo diz isso.

O que o visualizador procura

A primeira linha é o cabeçalho — sempre a linha 0 — e o delimitador é escolhido contando ,, ; e tabulações nas três primeiras linhas não vazias e somando; o maior total vence, e um empate vai para a vírgula. Células entre aspas são respeitadas, e uma quebra de linha dentro de uma célula também. Existe uma opção manual de delimitador: um menu Delimitador no topo do seletor, já preenchido com o que foi detectado, oferecendo Vírgula (,), Ponto e vírgula (;) e Tabulação — mude-o e o cabeçalho e a lista de colunas são lidos de novo a partir da sua escolha. Não há campo para colar texto, nem campo de URL; um arquivo por vez, sem limite de tamanho.

As colunas de coordenadas são encontradas pelo nome — sem diferenciar maiúsculas de minúsculas, correspondência exata — em três listas:

  • Latitude — lat, latitude, latitudine, latitud, y, y_coord, ycoord, ylat, lat_dd, latitude_dd.
  • Longitude — lon, lng, long, longitude, longitudine, longitud, x, x_coord, xcoord, xlon, lon_dd, longitude_dd.
  • Geometria WKT — wkt, geom, geometry, wkb, shape, the_geom, geo, geomwkt, wkt_geom.

Sem correspondência exata: qualquer coluna que contenha lat, e qualquer uma que contenha lon ou lng; ainda nada: as duas primeiras colunas. Essas são apenas pré-seleções. O seletor Selecione as colunas de coordenadas abre para todo arquivo, mesmo um perfeito, com a dica Selecione quais colunas contêm as coordenadas. A detecção automática pré-selecionou os campos mais prováveis., um menu Coluna de Latitude e um Coluna de Longitude, e Abrir no mapa. Uma coluna WKT abre o mesmo seletor na aba WKT / Geometria; não existe o caminho "mapeado instantaneamente".

Ao confirmar, o painel de camadas exibe 3 pontos para um arquivo de três linhas e, quando alguma linha não sobreviveu, um segundo contador: 1 linha sem coordenadas válidas — a forma plural da mensagem é 2 linhas sem coordenadas válidas. Uma linha é contada quando sua latitude ou longitude não é um número após o processamento ou está fora de ±90 e ±180. As colunas de coordenadas saem da tabela de atributos; todas as outras colunas permanecem.

A vírgula decimal: -23,55

Sintoma. Excel pt-BR ou es, "Salvar como CSV": -23,55 com ; entre as colunas. Google Sheets, LibreOffice Calc e uma pasta de trabalho solta diretamente no visualizador (o caso .xlsx abaixo) escrevem vírgulas entre as colunas e colocam entre aspas as células com vírgula decimal: 1,"-23,55","-46,63",São Paulo. Uma exportação com tabulação dá -23,55 com tabulações.

O que o visualizador mostra. Os três são lidos corretamente: 3 pontos, sem contador, primeiro ponto em São Paulo, com o GeoJSON exportado arredondando para -46.63, -23.55 (fixtures 1, 2, 1b). A regra é aplicada na célula, não no arquivo: o visualizador lê -23,55 como −23,55 seja qual for o delimitador — ;, tabulação, ou uma célula entre aspas em um arquivo de vírgula, que é exatamente o que o Google Sheets, o LibreOffice Calc e uma pasta de trabalho solta diretamente (o caso .xlsx abaixo) escrevem para uma planilha pt-BR ou es. A única coisa que ele não consegue resgatar é uma vírgula decimal sem aspas em um arquivo de vírgula, porque 1,-23,55,-46,63 já são cinco células antes de qualquer parser vê-las — e nenhuma planilha escreve isso. O limite é 1,234: ele é lido como 1,234 (um grau e pouco), nunca como 1234, porque um valor com separador de milhar não pode ser uma coordenada em graus. Atributos não são tocados — um preço de 12,50 continua sendo o texto 12,50.

Correção na planilha, para ferramentas que precisam de ponto. Excel: Opções → Avançado, desmarque "Usar separadores do sistema", separador decimal .. Calc: Opções → Configurações de idioma → Localidade → Inglês (EUA). Sheets: Arquivo → Configurações → Localidade → Estados Unidos. Depois exporte.

Correção na linha de comando. No GDAL 3.13.3, nomear as colunas já resolve: ogr2ogr -f GeoJSON out.geojson decimal-comma-semicolon.csv -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat grava "coordinates":[-46.63,-23.55], e os arquivos com tabulação e com vírgula entre aspas dão o mesmo par. O que -oo AUTODETECT_TYPE=YES faz com as outras colunas depende do delimitador: em um arquivo ;, lat vira Real -23.55; em um arquivo de vírgula entre aspas ou de tabulação, a mesma célula continua String -23,55. Para atributos, e para qualquer ferramenta que não seja o GDAL, a exportação com localidade correta é a correção honesta.

Uma linha de título acima do cabeçalho

Sintoma. Uma linha de título — Levantamento de campo, setembro 2026, equipe A — acima do cabeçalho real id;lat;lon;nome, linhas separadas por ; com vírgula decimal.

O que o visualizador mostra. O título tem duas vírgulas e nenhum ponto e vírgula, mas ele não vota mais sozinho: nas três primeiras linhas os pontos e vírgulas vencem as vírgulas por 6 a 4, então ; ganha e a linha de título — que não contém nenhum ponto e vírgula — vira um cabeçalho de exatamente uma coluna. Os dois menus passam então a mostrar essa linha de título inteira, Abrir no mapa fica desabilitado, e o arquivo nunca abre: um cabeçalho de uma coluna não deixa ao seletor uma segunda coluna para oferecer como longitude, então não há mapa, nem linha de contagem, nem contador (fixture 3). Um título sem nenhuma vírgula se comporta igual. Force o menu Delimitador para Vírgula (,) e a leitura antiga volta — Levantamento de campo pré-selecionado como latitude, setembro 2026 como longitude — e então o mapa fica vazio e o aviso diz Nenhuma coluna de coordenadas válida encontrada. Verifique se as colunas selecionadas contêm valores numéricos de latitude e longitude.. Os três pontos que antes eram desenhados em [55, 1], [79, 2] e [12, 3], no oceano Índico, ao norte das Seicheles, não são alcançáveis por nenhum caminho que medimos: um plote silenciosamente errado virou uma recusa visível. O que o visualizador ainda não faz é se explicar — um formulário que parece preenchido, um botão que não faz nada, e nenhuma mensagem.

Correção na planilha. Apague a linha de título para que o cabeçalho vire a linha 1 — vale para Excel, Calc e Sheets; uma linha de unidades logo abaixo do cabeçalho é contada apenas como uma linha sem coordenadas válidas — é a linha de título acima do cabeçalho que destrói tudo.

Correção na linha de comando. O driver CSV do GDAL não tem uma opção de "pular N linhas" (HEADERS só aceita YES, NO ou AUTO), então descarte a linha e depois indique o separador: tail -n +2 title-row.csv > title-row-noheader.csv, e então ogr2ogr -f GeoJSON title-row-fixed.geojson title-row-noheader.csv -oo SEPARATOR=SEMICOLON -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat -oo AUTODETECT_TYPE=YES grava "coordinates":[-46.63,-23.55], vírgulas decimais incluídas. Lido como está, o ogrinfo ainda comete o erro que o visualizador cometia, e imprime Levantamento de campo (String) = 1;-23.

Latitude e longitude trocadas

Sintoma. Colunas chamadas lat e lon, com os valores invertidos: 1,-46.63,-23.55,São Paulo — uma exportação lon,lat colada sob um cabeçalho lat,lon; GeoJSON, WKT e a maioria das APIs escrevem a longitude primeiro.

O que o visualizador mostra. Dois resultados possíveis. Se os dois valores estão dentro de ±90 — todo ponto brasileiro, já que o país vai de aproximadamente −74° a −29° de longitude — o mapa desenha no oceano errado e não diz nada: 3 pontos, sem aviso, sem contador, primeiro ponto [-23.55, -46.63], no Atlântico Sul, cerca de 3.290 km a sudeste de São Paulo (fixture 4). Se uma longitude está além de ±90 — os 139,69 de Tóquio na coluna lat — essa linha é descartada e contada: 2 pontos · 1 linha sem coordenadas válidas, enquanto as duas linhas brasileiras do mesmo arquivo continuam desenhando no Atlântico Sul (fixture 5). O contador avisa que algo deu errado; ele não consegue dizer que os pontos que sobreviveram também estão errados.

A correção é o seletor. Nada detecta uma inversão — latitude −46,63 é um ponto perfeitamente válido. Defina Coluna de Latitude como lon e Coluna de Longitude como lat, clique em Abrir no mapa, e o mesmo arquivo desenha em São Paulo, primeiro ponto [-46.63, -23.55] (medido na fixture 4). Ou troque os dois nomes de cabeçalho na planilha.

Se todos estão no mesmo lugar errado, não é uma inversão. Uma célula de coordenada vazia nunca chega ao mapa: é um descarte contado, como a célula de graus e minutos mais abaixo. Já uma célula que guarda um zero literal chega, e é desenhada em 0, 0, uma posição real no Golfo da Guiné — o ponto em (0, 0) separa uma falha da outra.

Graus, minutos e uma letra de hemisfério em uma única célula

Sintoma. 23°33'S na célula de latitude, 46°38'W na célula de longitude — uma exportação de GPS ou um caderno de campo digitado.

O que o visualizador mostra. Nada. O seletor pré-seleciona lat e lon como deveria, você clica em Abrir no mapa, e toda linha é rejeitada: nenhuma camada é criada, nenhuma linha de contagem aparece, e o visualizador mostra Nenhuma coluna de coordenadas válida encontrada. Verifique se as colunas selecionadas contêm valores numéricos de latitude e longitude. (fixture 6). A célula de coordenada agora é lida como um literal numérico inteiro, então uma célula que começa com dígitos e depois traz um símbolo de grau simplesmente não é um número — enquanto o parser antigo lia os dígitos iniciais, jogava fora os minutos e a letra do hemisfério que carregava o sinal de menos, e desenhava três pontos no centro da Arábia Saudita sem mensagem nenhuma. É essa a mudança que vale conhecer: o arquivo que antes abria errado agora se recusa a abrir. Coloque uma linha boa no mesmo arquivo e o contador aparece — 2 pontos · 1 linha sem coordenadas válidas — porque uma linha rejeitada só é contada quando sobra uma camada para carregar o contador; quando toda linha tem um símbolo de grau não há camada, e o aviso é o que você recebe.

Correção na planilha. Uma fórmula converte graus-minutos-hemisfério para graus decimais e nega tanto S quanto W. Com o texto em A1, no Calc ou no Sheets em configuração regional pt-BR ou es (; entre os argumentos; o Excel em inglês pede ,):

=IF(OR(RIGHT(A1;1)="S";RIGHT(A1;1)="W");-1;1)*(VALUE(LEFT(A1;FIND("°";A1)-1))+VALUE(MID(A1;FIND("°";A1)+1;FIND("'";A1)-FIND("°";A1)-1))/60)

A fórmula dá: 23°33'S → -23.55, 15°47'S → -15.78333, 46°38'W → -46.63333. Coloque o resultado em uma coluna chamada lat ou lon e o visualizador reconhece pelo nome.

Para alguns poucos pontos, o coordinate-converter aceita a célula como ela está escrita: 23°33'S 46°38'W era recusado por falta dos segundos e agora é aceito, dando -23.55000000 e -46.63333333 — o mesmo par de 23°33'00"S 46°38'00"W. Essa mudança liberou toda forma de dois grupos, minutos decimais inclusive: 23°33.5'S 46°38.2'W era recusado antes dela e agora é lido. As letras de hemisfério continuam obrigatórias dos dois lados — 23°32'56.10" 46°38'20.30" dá Formato GMS não reconhecido. — e um 23°33'S sozinho também é recusado; 23 32 56.1 S 46 38 20.3 W separado por espaços e letras de hemisfério em minúsculas funcionam. Confira o destino antes de confiar nos números: Projeção de destino (CRS) começa em SIRGAS 2000 / UTM 23S (EPSG:31983), e nesse destino a mesma string devolve 333283.881280 e 7394643.649020 — metros, não graus. Para graus, deixe a origem em WGS 84 (EPSG:4326) e ponha o destino em SIRGAS 2000 (EPSG:4674).

Na linha de comando, nada. O GDAL não tem parser de GMS: ogrinfo -oo AUTODETECT_TYPE=YES classifica a célula como String, e o ogr2ogr com -oo X_POSSIBLE_NAMES=lon -oo Y_POSSIBLE_NAMES=lat sai com código 0, imprime Warning 1: Invalid value type found in record 1 for field lat. This warning will no longer be emitted, e grava "geometry":null em cada linha — um arquivo "convertido" sem nenhum ponto dentro.

As formas que são aceitas, reunidas. Quais grafias de GMS convertem e quais são recusadas dá uma matriz maior do que esta seção precisa: graus, minutos e segundos para graus decimais percorre o conjunto inteiro, com a fórmula da planilha e o conversor lado a lado.

Coordenadas UTM (E/N) coladas como latitude e longitude

Sintoma. 333624,7394648 — metros em SIRGAS 2000 / UTM zona 23S, colunas easting e northing.

O que o visualizador mostra. Nenhum dos dois nomes é um alias e nenhum contém lat ou lon, então o seletor cai de volta para as duas primeiras colunas e pré-seleciona id e easting. Confirmar isso, ou escolher easting e northing manualmente, dá o mesmo resultado: toda linha falha na checagem de faixa, zero pontos sobrevivem, e o visualizador mostra Nenhuma coluna de coordenadas válida encontrada. Verifique se as colunas selecionadas contêm valores numéricos de latitude e longitude. (fixture 7). A mensagem é sobre os valores, não sobre os nomes; não há entrada de CRS.

Correção na linha de comando. Nomeie as colunas, declare o CRS de origem, peça WGS 84: ogr2ogr -f GeoJSON utm-fixed.geojson utm.csv -oo X_POSSIBLE_NAMES=easting -oo Y_POSSIBLE_NAMES=northing -s_srs EPSG:31983 -t_srs EPSG:4326 coloca o primeiro ponto em -46.6300, -23.5500 — São Paulo, com um resíduo de alguns milionésimos de grau sendo o arredondamento em metros da nossa fixture. 31983 é SIRGAS 2000 / UTM zona 23S; confira esse nome com gdalsrsinfo -o wkt1 EPSG:31983, porque 31982 e 31984 são as zonas vizinhas (cerca de 6° de diferença, sem erro), 3198 é um CRS líbio válido, e só 319830 falha. A cola de códigos EPSG do Brasil e da América Latina tem os códigos de zona. Por padrão, o GDAL grava um membro crs (CRS84) nesse GeoJSON; -lco RFC7946=YES remove esse membro e arredonda para sete casas decimais, que é o que um visualizador quer.

Na planilha, não dá. Converter UTM para geográficas é matemática de projeção; uma planilha com easting renomeada para lon é a versão silenciosa desse mesmo problema.

Latin-1 do Excel: São Paulo ou S�o Paulo

Sintoma. O Excel no Windows, em "CSV (delimitado por vírgulas)" — não "CSV UTF-8" — grava em Windows-1252: ã vira o byte único 0xE3, inválido como UTF-8. As coordenadas são ASCII e nunca se importaram; os atributos é que quebram.

O que o visualizador mostra. 3 pontos, o primeiro ponto correto, e São Paulo na tabela de atributos — não S�o Paulo (fixture 8). O arquivo é decodificado como UTF-8 estrito primeiro; quando isso falha em um byte como 0xE3, ele é decodificado como Windows-1252 em vez disso. Um arquivo realmente em UTF-8 não é afetado.

Correção na planilha. Excel: Salvar Como → "CSV UTF-8 (Delimitado por vírgulas)". Calc: Text CSV → Editar configurações do filtro → conjunto de caracteres "Unicode (UTF-8)". O Sheets sempre grava em UTF-8.

Correção na linha de comando. iconv -f WINDOWS-1252 -t UTF-8 latin1.csv > latin1-utf8.csv — o byte 0xE3 vira C3 A3. O GDAL no arquivo bruto mostra o mesmo estrago (ogrinfo imprime nome (String) = S�o Paulo), então rode o iconv antes do ogr2ogr também.

Soltando o .xlsx diretamente

Sintoma. Você solta a própria pasta de trabalho. O visualizador lê .xls e .xlsx, apenas a primeira planilha.

O que o visualizador mostra. Depende de como cada célula está armazenada, então montamos uma pasta de trabalho pt-BR com os dois tipos e medimos célula por célula (fixture 9). Uma célula numérica guardando -23.55 com formato de número 0.00 — o que o Excel pt-BR exibe como -23,55 — sai como -23.55; a configuração regional de exibição não fica no arquivo. Uma célula guardando o texto -15,79, mantido como texto pelo Excel, sai entre aspas, "-15,79" — a mesma forma de uma exportação do Sheets — e é lida como −15,79. Os dois caem onde deveriam: 3 pontos, sem contador, [-46.63, -23.55] e [-47.88, -15.79].

Correção. Mova a planilha com as coordenadas para a primeira posição, ou exporte-a como CSV UTF-8 e use as correções acima.

Arquivos de teste que você pode usar

Nenhum host público mantém CSVs de teste pequenos, então aqui estão os nossos — três linhas cada. Copie um item para um editor de texto, um trecho por linha, salve como .csv e solte no csv-viewer. O parêntese indica o caso acima, na ordem das seções.

  • Vírgula decimal, ponto e vírgula (fixture 1) — id;lat;lon;nome · 1;-23,55;-46,63;São Paulo · 2;-15,79;-47,88;Brasília · 3;-3,12;-60,02;Manaus (caso 1).
  • Vírgula decimal, entre aspas, separado por vírgula (fixture 1b) — id,lat,lon,nome · 1,"-23,55","-46,63",São Paulo · 2,"-15,79","-47,88",Brasília · 3,"-3,12","-60,02",Manaus (caso 1).
  • Vírgula decimal, separado por tabulação (fixture 2) — a fixture 1 com uma tabulação digitada no lugar do ; (caso 1).
  • Linha de título acima do cabeçalho (fixture 3) — Levantamento de campo, setembro 2026, equipe A · id;lat;lon;nome · 1;-23,55;-46,63;São Paulo · 2;-15,79;-47,88;Brasília · 3;-3,12;-60,02;Manaus (caso 2).
  • Trocada, dentro da faixa (fixture 4) — id,lat,lon,nome · 1,-46.63,-23.55,São Paulo · 2,-47.88,-15.79,Brasília · 3,-60.02,-3.12,Manaus (caso 3).
  • Trocada, uma linha fora da faixa (fixture 5) — id,lat,lon,nome · 1,-46.63,-23.55,São Paulo · 2,-47.88,-15.79,Brasília · 3,139.69,35.68,Tóquio (caso 3).
  • Graus e minutos (fixture 6) — id,lat,lon,nome · 1,23°33'S,46°38'W,São Paulo · 2,15°47'S,47°53'W,Brasília · 3,3°07'S,60°01'W,Manaus (caso 4).
  • UTM zona 23S (fixture 7) — id,easting,northing,nome · 1,333624,7394648,São Paulo · 2,191433,8252182,Brasília · 3,687688,7465276,Rio de Janeiro (caso 5; Rio, não Manaus, porque Manaus fica na zona 20S).
  • Latin-1 (fixture 8) — o controle recodificado com iconv -f UTF-8 -t WINDOWS-1252 all-valid.csv > latin1.csv (caso 6).
  • Uma pasta de trabalho no estilo pt-BR construída para imitar o Excel (fixture 9) — um .xlsx com o cabeçalho de controle, linha 2 com células numéricas formatadas 0.00, linha 3 com células de texto -15,79 e -47,88, linha 4 numérica — 3 pontos no Brasil (caso 7).
  • Controle (fixture 10) — id,lat,lon,nome · 1,-23.55,-46.63,São Paulo · 2,-15.79,-47.88,Brasília · 3,-3.12,-60.02,Manaus — 3 pontos no Brasil.

E um arquivo real. O Programa Queimadas do INPE publica todo foco de incêndio ativo detectado no Brasil em um CSV diário: o arquivo de 14 de setembro de 2026 é focos_diario_br_20260914.csv, 4.283.545 bytes, UTF-8, 16 colunas separadas por vírgula começando com id,lat,lon,data_hora_gmt,satelite,municipio,estado,…, 27.447 linhas. Ele responde 200 com Accept-Ranges: bytes e Access-Control-Allow-Origin: * — aberto, sem cadastro. Não há arquivo de licença ao lado dos CSVs; a nota de governança de dados do INPE em focos/documentos/ (irmão de focos/csv/) descreve os dados como disponíveis para qualquer usuário pela sua página de dados abertos, então o crédito é INPE / Programa Queimadas.

lat e lon são correspondências exatas de alias e os espaços à esquerda nas células são removidos: nossa execução desenhou 27.447 pontos, nenhuma linha ignorada, primeiro ponto [-45.2744, -5.2883] no Maranhão, 581 ms entre Abrir no mapa e a linha na camada.

Dois avisos, datados de 23 de setembro de 2026: o diretório diário mantém cerca de um mês de arquivos, então o nome do arquivo acima expira — pegue o mais recente; e os arquivos mensais ao lado dele têm cerca de 99 MiB, um download, não algo para simplesmente soltar.

Para times

Colocar os pontos em um mapa é a metade fácil. Alguém te mandou um CSV porque um time precisa fazer alguma coisa naqueles pontos: um status por linha, fotos e um formulário vindos do campo, uma revisão, um relatório até sexta-feira. O Geodocs importa o mesmo arquivo para um mapa de equipe, mantém as colunas como campos que o time preenche, conduz a revisão e gera o relatório com o mapa dentro. O visualizador é onde você confere o arquivo; o workspace é onde ele vira trabalho.

Artigos Relacionados

Navegação