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 36180nous 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 - 180piè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 + 360partie garantira que la valeur reste dans le domaine positif lorsqu'elle sera modifiée par la suite 360. La + 180partie 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).