Se a linguagem de programação que você está usando suportar o operador% (mod) em números de ponto flutuante (como Python e Ruby), eu recomendo usar isso. Caso contrário, algumas outras linguagens (como C e C ++) permitem que você use fmod ().
(Qualquer que seja o operador de mod que você usa, verifique com antecedência que ele fará operações de mod em números de ponto flutuante e que sempre fornecerá respostas não negativas. Caso contrário, você terá uma surpresa desagradável mais tarde, quando muitos de seus os pontos lat / lon não estão corretos.)
Use-o assim:
# Put the longitude in the range of [0,360):
longitude %= 360
# Put the longitude in the range of [-180,180):
if longitude >= 180:
longitude -= 360
Se você preferir fazer tudo em uma linha:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Essas abordagens não possuem loops, portanto normalizam os valores da longitude sem a necessidade de adicionar ou subtrair repetidamente, não importa quantas vezes sua observação tenha circulado pela Terra.
Editar:
Hmmm ... Acabei de perceber que o Javascript não parece lidar %
com valores negativos como eu pensava.
Nesse caso, tente este one-liner:
longitude = (longitude + 36180) % 360 - 180
O 36180
que estamos adicionando é 36.000 + 180. O 36.000 é mover um valor negativo para o domínio positivo, e o 180 é movê-lo para que, quando modificado 360
, ele esteja no intervalo de [0,360) . A - 180
peça volta para o intervalo de [-180.180).
Aqui está outra linha única, que não depende de 36.000 serem grandes o suficiente:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
A longitude % 360 + 360
peça garantirá que o valor permaneça no domínio positivo quando mais tarde for modificado por 360
. A + 180
parte a desloca para que, quando mais tarde ela for subtraída 180 (com - 180
), ela esteja no intervalo desejado de [-180.180).