Если используемый вами язык программирования поддерживает оператор% (mod) для чисел с плавающей запятой (например, Python и Ruby), я бы порекомендовал использовать его. В противном случае, некоторые другие языки (например, C и C ++) позволяют использовать fmod ().
(Какой бы мод оператор вы ни использовали, заранее убедитесь, что он будет выполнять операции с модами над числами с плавающей запятой и всегда будет давать вам неотрицательные ответы. В противном случае вы получите неприятный сюрприз позже, когда многие из ваших точки широты / долготы не верны.)
Используйте это так:
# 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
Если вы предпочитаете делать все это в одной строке:
# Put the longitude in the range of [-180,180):
longitude = (longitude + 180) % 360 - 180
Эти подходы не имеют петель, поэтому они нормализуют значения долготы без необходимости многократно складывать или вычитать, независимо от того, сколько раз ваше наблюдение облетело Землю.
Редактировать:
Хммм ... Я только что заметил, что Javascript, похоже, не справляется %
с отрицательными значениями, как я думал, что это будет.
В этом случае попробуйте эту строку:
longitude = (longitude + 36180) % 360 - 180
36180
Мы добавляем в 36000 + 180. 36000, чтобы переместить отрицательное значение в положительной области, и 180, чтобы сдвинуть его над тем , что , когда он модом на 360
, он будет находиться в диапазоне [0360) , В - 180
сдвиги часть его обратно в диапазоне [-180,180).
Вот еще один вкладыш, который не полагается на 36000, будучи достаточно большим:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
Эта longitude % 360 + 360
часть гарантирует, что значение останется в положительном домене, когда оно будет позже изменено 360
. В + 180
сдвигах части ее над тем , что , когда он позже получает 180 вычитает из него (с - 180
), он будет находиться в требуемом диапазоне [-180,180).