Jeśli używany język programowania obsługuje operator% (mod) na liczbach zmiennoprzecinkowych (takich jak Python i Ruby), zalecam użycie tego. W przeciwnym razie niektóre inne języki (np. C i C ++) pozwalają na użycie fmod ().
(Niezależnie od tego, którego operatora modowego używasz, upewnij się z wyprzedzeniem, że wykona on operacje modowe na liczbach zmiennoprzecinkowych i że zawsze da ci odpowiedzi nieujemne. W przeciwnym razie otrzymasz paskudną niespodziankę, gdy wielu punkty lat / lon są nieprawidłowe.)
Użyj tego w ten sposób:
# 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
Jeśli wolisz to wszystko zrobić w jednym wierszu:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Te podejścia nie mają pętli, więc znormalizują wartości długości geograficznej bez konieczności wielokrotnego dodawania lub odejmowania, bez względu na to, ile razy Twoja obserwacja krążyła wokół Ziemi.
Edytować:
Hmmm ... Właśnie zauważyłem, że JavaScript nie radzi sobie %
z wartościami ujemnymi, tak jak myślałem.
W takim przypadku wypróbuj ten jedno-liniowy:
longitude = (longitude + 36180) % 360 - 180
36180
Dodajemy to 36000 + 180. 36.000 jest przeniesienie wartości ujemnej do dodatniej domenie, a 180 jest przesunięcie go tak, że gdy jest modded przez 360
, to będzie w przedziale [0360) . Na - 180
część przesuwa go z powrotem do zakresu [-180,180).
Oto kolejna linijka, która nie polega na wystarczającej wielkości 36 000:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
longitude % 360 + 360
Część zapewni pobyty w wartości dodatniej domenie kiedy to później przez modded 360
. W + 180
części przesunięcia go na tak, że gdy później dostaje 180 odejmowana od niej (z - 180
), to będzie w pożądanym przedziale [-180,180).