Si el lenguaje de programación que está utilizando admite el operador% (mod) en números de coma flotante (como Python y Ruby), recomendaría usarlo. De lo contrario, algunos otros lenguajes (como C y C ++) le permiten usar fmod ().
(Cualquiera que sea el operador de mod que utilice, asegúrese con anticipación de que realizará operaciones de mod en números de punto flotante, y que siempre le dará respuestas no negativas. De lo contrario, recibirá una desagradable sorpresa más tarde cuando muchos de sus los puntos lat / lon no son correctos)
Úselo así:
# 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 prefiere hacerlo todo en una línea:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Estos enfoques no tienen bucles, por lo que normalizarán los valores de longitud sin necesidad de sumar o restar repetidamente, sin importar cuántas veces su observación haya dado vueltas alrededor de la tierra.
Editar:
Hmmm ... acabo de notar que Javascript no parece manejarse %
con valores negativos como pensé que lo haría.
En ese caso, intente con esta frase:
longitude = (longitude + 36180) % 360 - 180
Lo 36180
que estamos agregando es 36,000 + 180. El 36,000 es mover un valor negativo al dominio positivo, y el 180 es desplazarlo para que cuando sea modificado por 360
, esté en el rango de [0,360) . La - 180
parte la desplaza nuevamente al rango de [-180,180).
Aquí hay otro one-liner, uno que no depende de que 36,000 sean lo suficientemente grandes:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
La longitude % 360 + 360
parte asegurará que el valor permanezca en el dominio positivo cuando luego sea modificado por 360
. La + 180
parte lo desplaza de modo que cuando luego se reste 180 (con - 180
), esté en el rango deseado de [-180,180).