1001Ferramentas
📍Validadores

Validador de Coordenada Geográfica

Aceita coordenadas em vários formatos (decimal, DMS, com hemisférios) e valida se latitude e longitude estão dentro dos limites válidos.

Detecção de formato de coordenada: DD, DMS, DDM, UTM, MGRS, Plus Code e What3Words

Um par latitude/longitude são só dois números, mas a string usada para representá-lo muda radicalmente conforme a origem: uma URL do Google Maps, uma tag EXIF dentro de um JPEG, uma carta topográfica, um relatório militar e um app de delivery escolhem notações diferentes. Um validador de formato de coordenada faz algo mais estreito do que um validador GPS genérico: ele inspeciona a string bruta, classifica em qual das sete codificações canônicas ela se encaixa e parseia para uma forma interna normalizada. Os sete formatos suportados — DD, DMS, DDM, UTM, MGRS, Plus Code e What3Words — cobrem praticamente toda string de coordenada que aparece na natureza.

Esta ferramenta não trata de ranges ou datums (esse é o papel de validador-coordenadas-gps) — ela trata de parsear o envelope textual primeiro, para que qualquer lógica downstream receba um par normalizado independentemente da origem.

As sete codificações canônicas

  • DD (Decimal Degrees) — decimais com sinal, separados por vírgula ou espaço: -23.5505, -46.6333. Padrão das APIs.
  • DMS (Graus, Minutos, Segundos) — sexagesimal com letras cardinais: 23°33'01.8"S 46°37'59.9"W. Usado em tags EXIF GPS e cartas náuticas.
  • DDM (Graus e Minutos Decimais) — híbrido comum em GPS marítimo: 23°33.030'S 46°37.998'W.
  • UTM (Universal Transverse Mercator) — zona + easting/northing em metros: 23K 333024 7395060. 60 zonas de 6° de largura, ideal para topografia e CAD.
  • MGRS (Military Grid Reference System) — grade NATO construída sobre UTM: 23K KP3302473950. Comprimento fixo, amigável para rádio.
  • Plus Code (Open Location Code) — padrão aberto do Google: 8R3R+QF São Paulo. Funciona offline, sem API key.
  • What3Words — grade proprietária de 3 m × 3 m mapeada para trio de palavras: ///filled.count.soap. API licenciada.

Regex de validação por formato

Auto-detecção é uma cascata de testes de regex, do mais específico ao mais permissivo, para que o padrão mais frouxo de DD não absorva uma string DMS que por acaso comece com dígitos:

// DD: "-23.5505, -46.6333"
const dd  = /^-?\d{1,3}\.\d+,\s*-?\d{1,3}\.\d+$/

// DMS: 23°33'01.8"S 46°37'59.9"W
const dms = /^\d{1,3}°\d{1,2}'\d{1,2}(\.\d+)?"[NSEW]\s+\d{1,3}°\d{1,2}'\d{1,2}(\.\d+)?"[NSEW]$/

// UTM: 23K 333024 7395060
const utm = /^\d{1,2}[C-X]\s+\d{6}\s+\d{7}$/

// Plus Code: 8R3R+QF
const olc = /^[23456789CFGHJMPQRVWX]{4,8}\+[23456789CFGHJMPQRVWX]{2,}/

// What3Words: ///palavra.palavra.palavra
const w3w = /^\/{3}[a-z]+\.[a-z]+\.[a-z]+$/

A heurística do cardinal é o que torna a detecção de DMS robusta — se a string contém ° e uma letra N/S/E/W, nem tente o regex de DD. UTM é inequívoco porque a letra de zona vem após uma contagem fixa de dígitos. MGRS é mais difícil: um prefixo de grade de 5 caracteres precisa vir logo após a zona UTM, e então um par easting/northing de mesmo comprimento.

Conversão DD ↔ DMS e tags EXIF GPS

Conversão entre DD e DMS é puramente aritmética — o sinal vem da letra cardinal:

function dmsParaDd(grau, min, seg, hemi) {
  const dd = grau + min/60 + seg/3600
  return (hemi === 'S' || hemi === 'W') ? -dd : dd
}

Tags EXIF GPS dentro de fotos JPEG/HEIC guardam coordenadas como três valores RATIONAL (grau, min, seg) mais um byte separado GPSLatitudeRef / GPSLongitudeRef contendo o cardinal — é essencialmente DMS sem a pontuação. Qualquer leitor de metadados (exifr, ExifTool, Pillow) devolve DMS por padrão; se você precisa de DD para uma coluna de banco, aplique a fórmula acima. URLs de mapas são inconsistentes: Google usa ?q=lat,lng em DD, Apple Maps usa ?ll=lat,lng em DD, Bing usa ?cp=lat~lng com til. KML e GeoJSON são DD apenas.

UTM, MGRS e datums brasileiros

UTM divide o mundo em 60 zonas de 6° de longitude; o Brasil abrange as zonas 18 a 25, com São Paulo na zona 23K. Coordenadas UTM são metros lineares a partir do meridiano central da zona (easting) e do Equador (northing), o que torna cálculos de distância e área triviais — por isso todo projeto CAD, plano de mineração e desenho de engenharia no Brasil usa UTM, não lat/lng. MGRS adiciona um quadrante alfabetizado de 100 km × 100 km em cima, útil quando é preciso ler coordenadas pelo rádio. Datum importa em UTM: o mesmo easting/northing em WGS84 versus SAD69 pode deslocar o ponto em dezenas de metros, e o datum legalmente válido para cartografia brasileira é o SIRGAS 2000.

Bibliotecas e ferramental

Em Node, o pacote coordinate-parser auto-detecta DD, DMS e DDM e normaliza para DD; utm faz UTM ↔ DD; mgrs faz MGRS ↔ DD; open-location-code faz Plus Code; turf.js cobre distância em grande círculo, bounding boxes e interpolação geodésica uma vez que você tenha DD. Para trabalho pesado, PROJ (via proj4js) faz transformações arbitrárias de datum e projeção, incluindo SIRGAS ↔ WGS84.

FAQ

Qual formato guardar no banco? DD em duas colunas DOUBLE, ou um geography(Point) do PostGIS. Converta a partir de DMS/UTM/MGRS na fronteira de entrada. Manter a string original em coluna separada é um bom rastro de auditoria.

Como converto entre formatos automaticamente? A lib npm coordinate-parser auto-detecta DD/DMS/DDM e devolve DD. Para UTM e MGRS, use os pacotes dedicados acima; What3Words requer a API proprietária.

What3Words é proprietário? Sim. O algoritmo de grade 3 m × 3 m e o dicionário de palavras são licenciados — você precisa de chave de API para uso em produção. Plus Code (Open Location Code) é o equivalente em padrão aberto mantido pelo Google com licença permissiva.

Por que o EXIF guarda DMS em vez de DD? A spec EXIF é de 1995 e foi modelada na saída dos receptores GPS da época, que por sua vez espelhavam a notação de cartas aeronáuticas. DD virou a forma dominante para computador depois; a spec EXIF nunca foi atualizada por questão de compatibilidade.

Uma string pode misturar dois formatos? Não — uma string de coordenada bem formada pertence a exatamente uma das sete codificações. Se a detecção retornar múltiplos matches, a entrada é ambígua e deve ser rejeitada para revisão humana.

Ferramentas Relacionadas