Jika bahasa pemrograman yang Anda gunakan mendukung operator% (mod) pada angka floating point (seperti Python dan Ruby), saya sarankan menggunakan itu. Jika tidak, beberapa bahasa lain (seperti C dan C ++) memungkinkan Anda untuk menggunakan fmod ().
(Operator mod mana pun yang Anda gunakan, pastikan sebelumnya bahwa ia akan melakukan operasi mod pada angka floating-point, dan itu akan selalu memberi Anda jawaban yang tidak negatif. Kalau tidak, Anda akan mendapatkan kejutan yang tidak menyenangkan nantinya ketika banyak dari Anda poin lat / lon tidak benar.)
Gunakan seperti ini:
# 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
Jika Anda lebih suka melakukan semuanya dalam satu baris:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Pendekatan-pendekatan ini tidak memiliki loop, sehingga mereka akan menormalkan nilai-nilai bujur tanpa perlu berulang kali menambah atau mengurangi, tidak peduli berapa kali pengamatan Anda telah berputar di sekitar bumi.
Edit:
Hmmm ... Saya baru saja memperhatikan bahwa Javascript sepertinya tidak menangani %
dengan nilai negatif seperti yang saya kira.
Jika demikian, coba satu-baris ini:
longitude = (longitude + 36180) % 360 - 180
Yang 36180
kami tambahkan adalah 36.000 + 180. 36.000 adalah untuk memindahkan nilai negatif ke domain positif, dan 180 adalah untuk menggesernya sehingga ketika dimodekan oleh 360
, itu akan berada di kisaran [0,360) . Bagian - 180
itu menggesernya kembali ke kisaran [-180.180).
Ini satu kalimat lagi, yang tidak bergantung pada 36.000 cukup besar:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
Bagian longitude % 360 + 360
akan memastikan nilai tetap di domain positif ketika nanti diubah oleh 360
. Bagian + 180
itu menggesernya sehingga ketika nanti dikurangi menjadi 180 (dengan - 180
), itu akan berada dalam kisaran yang diinginkan [-180.180).