lon,lat, não lat,lon: por que seus pontos do KML caíram no mar
Resposta curta: <coordinates> em um KML é lon,lat — longitude primeiro, latitude depois, altitude em terceiro se houver — em WGS 84, sempre, e o formato não tem onde dizer o contrário. Escreva um par brasileiro na ordem trocada e o ponto não cai num lugar aproximado; ele sai do continente. "Meus pontos do KML caíram no mar" é a frase que as pessoas pesquisam; este post é o diagnóstico de dez segundos, e o motivo de nenhuma ferramenta fazer isso por você.
Testado em 1º de outubro de 2026 no kmz-viewer e no geojson-viewer, nos três idiomas da interface, com o GeoJSON exportado lido em disco como oráculo de onde cada ponto foi parar, em vez de uma captura de tela do mapa. Toda string citada abaixo é a da própria ferramenta.
O que o visualizador mostra quando o par está invertido
Nada. Essa é a constatação, e é o problema inteiro.
Solte São Paulo escrito corretamente — -46.63880000,-23.54890000 — em qualquer um dos dois visualizadores e o painel de camadas mostra 1 ponto. Troque os dois números para -23.54890000,-46.63880000 e ele continua mostrando 1 ponto: nenhuma faixa de erro, nenhuma cor de aviso, nada. O arquivo carrega, a linha da camada aparece, a contagem está certa — de forma idêntica nos dois visualizadores e nos três idiomas.
A exportação é onde isso fica visível. Exportar e depois Exportar GeoJSON escrevem [-46.6388,-23.548900000000017,0] para o arquivo correto e [-23.5489,-46.63880000000002,0] para o invertido. Longitude 23.5489 W com latitude 46.6388 S está fora do Brasil em todos os limites da extensão nacional, e mais ao sul do que qualquer ponto do país. Dois detalhes antes de comparar pares a olho: uma terceira ordenada 0 é acrescentada, tenha o seu <coordinates> carregado uma ou não, e a latitude volta com cerca de 1e-14 de ruído de ponto flutuante enquanto a longitude volta exata, e é por isso que a longitude é o número em que confiar. E um arquivo meio errado não recebe nenhuma ajuda extra: um KML de dois placemarks com o primeiro par certo e o segundo invertido mostra 2 pontos, sem nada que diga que um dos dois está fora do mundo.
O geojson-viewer também aceita um .kml, então você não precisa trocar de aba: a área de soltar diz Arraste um arquivo GeoJSON, KML ou KMZ aqui, e os mesmos bytes são lidos da mesma maneira, seja escolhendo o arquivo, seja arrastando-o para a página, com exportações idênticas byte a byte. O nome do arquivo importa muito mais do que a forma como ele chega. Renomeie esses mesmos bytes de KML para .geojson e o visualizador os recusa com Erro ao processar o arquivo. Verifique se o arquivo é um GeoJSON válido., porque o leitor despacha pela extensão e então entrega um KML a um leitor de JSON. Renomeie para .txt e você recebe Tipo de arquivo não suportado. Use GeoJSON (.geojson ou .json), KML ou KMZ. — inclusive no caminho de arrastar, onde o filtro do seletor de arquivos não pode ter entrado em cena.
O diagnóstico de dez segundos
Olhe as magnitudes e ignore os sinais. A extensão medida de um conjunto de dados nacional coloca as longitudes brasileiras entre 28.84764 e 73.99045 em valor absoluto, e as latitudes brasileiras em nenhum ponto acima de 33.75. Uma latitude brasileira é, portanto, pequena e negativa, e uma longitude brasileira grande e negativa, então -46.6388 na primeira casa ao lado de -23.5489 na segunda é um par na ordem certa. Invertido, o arquivo abre com -23.54890000 — pequeno demais para ser qualquer longitude brasileira, sentado onde a longitude deveria estar. Esse é o indício, e ele não precisa de ferramenta nenhuma.
Por que nada consegue detectar isso em geral
Porque -46.63 é uma latitude perfeitamente válida. Está dentro do -90 … 90 do WGS 84, a projeção direta a aceita, o ponto é desenhado, o contador o conta, a exportação o escreve de volta. Não existe valor inválido em lugar nenhum do arquivo para um validador encontrar.
E a regra da magnitude não é uma lei, é uma coincidência sobre o formato do Brasil — uma que falha em dois lugares mensuráveis. As duas faixas acima se sobrepõem na base do intervalo de longitude: para qualquer magnitude entre 28.84764 e 33.75 o número é ao mesmo tempo uma latitude brasileira plausível e uma longitude brasileira plausível, e essa faixa é o sul do Rio Grande do Sul contra a costa atlântica do extremo leste — um canto povoado do país, não um canto patológico. Perto da origem a regra não tem com o que trabalhar. Acra é -0.18700000,5.60370000; invertida para 5.60370000,-0.18700000, é desenhada a 5.6037 E, 0.187 S, e os dois números são válidos em qualquer uma das casas. O visualizador mostra 1 ponto e não exibe faixa alguma, exatamente como antes. Pontos que caem em zero ou perto dele são uma família à parte — um ponto em zero, ou em algum lugar do Golfo da Guiné trata deles, e é ali que o Golfo da Guiné entra, não numa inversão brasileira, que não consegue alcançá-lo.
A ferramenta também não vai até a metade do caminho nos casos impossíveis. Uma latitude de -123.40000000 — fora do -90 … 90, portanto nem latitude é — carrega sem faixa alguma, conta como 1 ponto e é exportada como [-46.6388,null,0]: um null de JSON onde um número é obrigatório. Nada no visualizador se interpõe entre uma coordenada ruim e um mapa desenhado, e é por isso que o par exportado é o diagnóstico e o mapa desenhado não é.
Como corrigir
Para um punhado de placemarks, um editor de texto é o reparo inteiro: abra o KML, troque os dois números dentro de cada <coordinates>, salve, solte o arquivo de novo e leia o primeiro par de uma exportação nova. Nada é reprojetado, porque não há nada para reprojetar: um KML não tem onde declarar um sistema de coordenadas, então um arquivo no lugar errado tem os números errados dentro dele, não o CRS errado. Essa regra, e as transcrições de linha de comando por trás dela, estão sob o título "Coordenadas: sempre lon,lat, sempre WGS 84" no guia de KML e KMZ, que também cobre os dois erros que parecem idênticos vistos do mapa: metros projetados escritos como graus, e graus-minutos-segundos colados crus. Se os números saíram de um conjunto de dados UTM, a zona e o hemisfério são uma armadilha própria — veja UTM para latitude e longitude.
Arquivos de teste que você pode usar
Nada é hospedado. Cole um placemark entre <?xml version="1.0" encoding="UTF-8"?>, <kml xmlns="http://www.opengis.net/kml/2.2"><Document> e </Document></kml> e salve como um .kml em UTF-8. Toda coordenada aqui é decimal de propósito.
- Correto, o controle:
<Placemark><name>Sao Paulo</name><Point><coordinates>-46.63880000,-23.54890000</coordinates></Point></Placemark> - Invertido, o objeto do teste — os mesmos dois números ao contrário:
<Placemark><name>Sao Paulo swapped</name><Point><coordinates>-23.54890000,-46.63880000</coordinates></Point></Placemark> - Invertido perto da origem, onde o indício para de funcionar:
<Placemark><name>Accra swapped</name><Point><coordinates>5.60370000,-0.18700000</coordinates></Point></Placemark> - Uma latitude fora do intervalo válido:
<Placemark><name>out of range</name><Point><coordinates>-46.63880000,-123.40000000</coordinates></Point></Placemark>
Coloque os dois primeiros placemarks em um só arquivo para obter o caso meio errado, que mostra 2 pontos.
Para times
Um par invertido é quase sempre uma passagem de bastão: uma pessoa escreveu o par em uma ordem, outra leu na outra, e o arquivo não carrega nenhuma pista de qual era a intenção. O Geodocs mantém os dados de campo em um único mapa compartilhado, onde a ordem das coordenadas é resolvida uma vez pelo formulário, em vez de uma vez por arquivo.