Якщо мова програмування, яку ви використовуєте, підтримує оператор% (mod) на числах з плаваючою комою (наприклад, Python та Ruby), я рекомендую використовувати його. В іншому випадку деякі інші мови (наприклад, C і C ++) дозволяють використовувати fmod ().
(Незалежно від того, яким оператором ви користуєтеся, переконайтеся, що він буде робити операції з модами над номерами з плаваючою комою, і що він завжди дасть вам негативні відповіді. Інакше ви отримаєте неприємний сюрприз пізніше, коли багато хто з ваших Lat / lon бали невірні.)
Використовуйте його так:
# 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).
Ось ще одна вкладиш, яка не розраховує на те, що 36 000 є достатньо великими:
longitude = (longitude % 360 + 360 + 180) % 360 - 180
longitude % 360 + 360
Частина гарантуватиме перебування значення в позитивній області , коли вона пізніше мод на 360
. У + 180
зрушеннях частини її над тим , що , коли він пізніше отримує 180 віднімає з нього (з - 180
), він буде перебувати в необхідному діапазоні [-180,180).