Quando lidamos com coordenadas geográficas, como as que encontramos em sistemas de GPS, mapas digitais ou aplicações de geolocalização, é comum encontrar dois formatos distintos de representação:
- Coordenadas decimais (graus decimais): exemplo
-26.237489
- Coordenadas sexagesimais (graus, minutos e segundos): exemplo
26°14'14.96"S
Este post explica com todos os detalhes como converter do formato decimal para o formato sexagesimal, usando exemplos reais de coordenadas geográficas e fornecendo também um código em PHP para automatizar o processo.
Entendendo os formatos
1. Graus Decimais (DD)
É o formato mais utilizado por sistemas modernos, como APIs de mapas, bancos de dados e planilhas. Ele representa os graus como um número de ponto flutuante contínuo, podendo ser positivo ou negativo:
- Latitude: varia entre -90 (Sul) e +90 (Norte)
- Longitude: varia entre -180 (Oeste) e +180 (Leste)
Exemplos:
- Latitude:
-26.237489
(26 graus ao sul do equador) - Longitude:
-49.527113
(49 graus a oeste do meridiano de Greenwich)
2. Graus, Minutos e Segundos (DMS)
Esse é o formato tradicional utilizado por navegadores antigos, cartas náuticas e em situações que exigem leitura precisa por humanos. Ele separa a coordenada em três partes:
- Graus inteiros (
°
) - Minutos (1 grau = 60 minutos) (
'
) - Segundos (1 minuto = 60 segundos) (
"
)
Exemplo:
- Latitude:
26°14'14.96"S
- Longitude:
49°31'37.61"W
Como converter decimal para sexagesimal (DMS)
Passo a passo manual
Vamos usar o valor -26.237489
como exemplo (uma latitude no hemisfério sul):
- Obtenha os graus inteiros:
Pegue a parte inteira do número:graus = 26
(o sinal é tratado à parte) - Calcule os minutos:
Subtraia a parte inteira e multiplique o restante por 60:minutos_float = (0.237489) × 60 = 14.24934
minutos = 14
(parte inteira) - Calcule os segundos:
Subtraia a parte inteira dos minutos e multiplique o restante por 60:segundos = (0.24934) × 60 = 14.9604
Arredondamos para duas casas decimais:14.96
- Determine a direção (hemisfério):
- Para latitude: sinal negativo = Sul (S), positivo = Norte (N)
- Para longitude: sinal negativo = Oeste (W), positivo = Leste (E)
Resultado:
-26.237489
→26°14'14.96"S
Exemplo prático completo
Vamos converter um par de coordenadas decimais para sexagesimal:
- Latitude:
-26.237489
- Longitude:
-49.527113
Resultado:
Tipo | Formato Decimal | Formato Sexagesimal |
---|---|---|
Latitude | -26.237489 | 26°14'14.96"S |
Longitude | -49.527113 | 49°31'37.61"W |
Código PHP para converter decimal para sexagesimal
Se você estiver trabalhando com sistemas web ou precisa automatizar a conversão, este código PHP pode te ajudar:
function decimalToDMS($decimal, $isLatitude = true) {
$direction = $decimal < 0
? ($isLatitude ? 'S' : 'W')
: ($isLatitude ? 'N' : 'E');
$decimal = abs($decimal);
$degrees = floor($decimal);
$minutesFloat = ($decimal - $degrees) * 60;
$minutes = floor($minutesFloat);
$seconds = round(($minutesFloat - $minutes) * 60, 2);
return sprintf("%d°%02d'%05.2f\"%s", $degrees, $minutes, $seconds, $direction);
}
// Exemplo de uso:
echo decimalToDMS(-26.237489, true); // 26°14'14.96"S
echo "\n";
echo decimalToDMS(-49.527113, false); // 49°31'37.61"W
Observações importantes
- Arredondamento: os segundos devem ser arredondados com cuidado. Um pequeno erro pode gerar uma diferença de vários metros no solo.
- Precisão: 1 segundo de latitude ou longitude equivale a aproximadamente 30 metros na superfície da Terra. Arredondar demais pode causar imprecisão em trilhas, mapas ou marcações de terrenos.
- Conversão reversa (DMS → Decimal): também é possível, somando os minutos divididos por 60 e os segundos divididos por 3600 ao valor dos graus. Essa fórmula pode ser explicada em outro post.