Wenn die von Ihnen verwendete Programmiersprache den Operator% (mod) für Gleitkommazahlen (wie Python und Ruby) unterstützt, würde ich die Verwendung empfehlen. Andernfalls können Sie in einigen anderen Sprachen (wie C und C ++) fmod () verwenden.
(Unabhängig davon, welchen Mod-Operator Sie verwenden, stellen Sie im Voraus sicher, dass Mod-Operationen für Gleitkommazahlen ausgeführt werden und dass Sie immer nicht negative Antworten erhalten. Andernfalls erhalten Sie später eine böse Überraschung, wenn viele von Ihnen Lat / Lon-Punkte sind nicht korrekt.)
Verwenden Sie es so:
# 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
Wenn Sie es vorziehen, alles in einer Zeile zu erledigen:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Diese Ansätze haben keine Schleifen, daher normalisieren sie Längengrade, ohne dass wiederholt addiert oder subtrahiert werden muss, unabhängig davon, wie oft Ihre Beobachtung um die Erde kreist.
Bearbeiten:
Hmmm ... Ich habe gerade bemerkt, dass Javascript nicht %
mit negativen Werten umzugehen scheint, wie ich es mir vorgestellt hatte.
Versuchen Sie in diesem Fall diesen Einzeiler:
longitude = (longitude + 36180) % 360 - 180
Das, was 36180
wir hinzufügen, ist 36.000 + 180. Die 36.000 sollen einen negativen Wert in den positiven Bereich verschieben, und das 180 soll ihn verschieben, so dass er, wenn er von modifiziert wird 360
, im Bereich von [0,360] liegt. . Das - 180
Teil verschiebt es zurück in den Bereich von [-180,180].
Hier ist ein weiterer Einzeiler, der nicht davon abhängt, dass 36.000 groß genug sind:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
Das longitude % 360 + 360
Teil stellt sicher, dass der Wert in der positiven Domäne bleibt, wenn er später von geändert wird 360
. Das + 180
Teil verschiebt es so, dass es, wenn es später um 180 subtrahiert wird (mit - 180
), im gewünschten Bereich von [-180,180] liegt.