Si el lenguaje de programación que usa es compatible con el % (mod) operador de números de punto flotante (como Python y Ruby), me gustaría recomendar el uso que. De lo contrario, algunos otros lenguajes (como C y C++) permitir el uso de fmod().
(Lo que el operador mod que use, asegúrese antes de tiempo que va a hacer el mod de las operaciones sobre los números de punto flotante, y que siempre te dan la no-respuestas negativas. De lo contrario obtendrá una desagradable sorpresa más tarde, cuando muchos de sus lat/lon puntos no son correctos).
El uso de esta forma:
# 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 usted prefiere hacer todo en una sola línea:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Estos enfoques no tienen bucles, por lo que van a normalizar la longitud de valores, sin necesidad de añadir repetidamente o restar, no importa cuántas veces la observación se ha centrado alrededor de la tierra.
Editar:
Hmmm... me di cuenta de que Javascript no parece manejar %
con valores negativos como pensé que lo haría.
En ese caso, pruebe este one-liner:
longitude = (longitude + 36180) % 360 - 180
El 36180
estamos añadiendo es de 36.000 + 180. Los 36.000 es para mover un valor negativo hacia el positivo de dominio, y el 180 es cambiar de manera que cuando se modded por 360
, que va a estar en el rango de [0,360). El - 180
parte turnos de nuevo a la gama de [-180,180).
He aquí otro one-liner, que no dependen de 36,000 ser lo suficientemente grande:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
El longitude % 360 + 360
parte se asegurará de que el valor se queda en el positivo de dominio cuando más tarde modded por 360
. El + 180
parte turnos de manera que cuando más tarde obtiene 180 resta (con - 180
), que va a estar en el rango deseado de [-180,180).