Si le langage de programmation que vous utilisez prend en charge l'opérateur% (mod) sur les nombres à virgule flottante (comme Python et Ruby), je recommanderais de l'utiliser. Sinon, certains autres langages (comme C et C ++) vous permettent d'utiliser fmod ().
(Quel que soit l'opérateur de mod que vous utilisez, assurez-vous à l'avance qu'il effectuera des opérations de mod sur des nombres à virgule flottante et qu'il vous donnera toujours des réponses non négatives. Sinon, vous aurez une mauvaise surprise plus tard lorsque beaucoup de vos les points lat / lon ne sont pas corrects.)
Utilisez-le comme ceci:
# 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
Si vous préférez tout faire en une seule ligne:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Ces approches n'ont pas de boucles, donc elles normaliseront les valeurs de longitude sans avoir à ajouter ou à soustraire à plusieurs reprises, quel que soit le nombre de fois que votre observation a fait le tour de la Terre.
Éditer:
Hmmm ... Je viens de remarquer que Javascript ne semble pas gérer %
les valeurs négatives comme je le pensais.
Dans ce cas, essayez ce one-liner:
longitude = (longitude + 36180) % 360 - 180
Le 36180
nous est l' ajout 36000 + 180. Le 36000 est de déplacer une valeur négative dans le domaine positif, et le 180 est de décaler de telle sorte que lorsqu'il est modded par 360
, ce sera dans la gamme de [0360) . La - 180
pièce la ramène à la plage de [-180,180).
Voici un autre one-liner, qui ne dépend pas de 36 000 étant assez gros:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
La longitude % 360 + 360
partie garantira que la valeur reste dans le domaine positif lorsqu'elle sera modifiée par la suite 360
. La + 180
partie la décale de sorte que lorsqu'elle sera ensuite soustraite de 180 (avec - 180
), elle sera dans la plage souhaitée de [-180,180).