Se il linguaggio di programmazione che stai utilizzando supporta l'operatore% (mod) su numeri in virgola mobile (come Python e Ruby), ti consiglio di usarlo. Altrimenti, alcuni altri linguaggi (come C e C ++) consentono di usare fmod ().
(Qualunque operatore mod utilizzi, assicurati in anticipo che eseguirà operazioni mod su numeri in virgola mobile e che ti darà sempre risposte non negative. Altrimenti riceverai una brutta sorpresa in seguito quando molti dei tuoi i punti lat / lon non sono corretti.)
Usalo in questo modo:
# 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 preferisci fare tutto in una riga:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Questi approcci non hanno anelli, quindi normalizzeranno i valori di longitudine senza la necessità di aggiungere o sottrarre ripetutamente, indipendentemente da quante volte la tua osservazione abbia girato attorno alla terra.
Modificare:
Hmmm ... Ho appena notato che Javascript non sembra gestire %
con valori negativi come pensavo.
In tal caso, prova questo one-liner:
longitude = (longitude + 36180) % 360 - 180
La 36180
stiamo aggiungendo è 36.000 + 180. Il 36.000 è quello di spostare un valore negativo nel dominio positivo, e la 180 è di spostare sopra in modo che quando è modded dai 360
, sarà nel range di [0360) . La - 180
parte lo sposta di nuovo nell'intervallo di [-180.180).
Ecco un altro one-liner, uno che non si basa sul fatto che 36.000 siano abbastanza grandi:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
La longitude % 360 + 360
parte assicurerà che il valore rimanga nel dominio positivo quando viene successivamente modificato da 360
. La + 180
parte lo sposta in modo tale che quando successivamente viene sottratto 180 (con - 180
), sarà nell'intervallo desiderato di [-180,180).