사용중인 프로그래밍 언어가 부동 소수점 숫자 (Python 및 Ruby와 같은)에서 % (mod) 연산자를 지원하는 경우 해당 언어를 사용하는 것이 좋습니다. 그렇지 않으면 C 및 C ++와 같은 일부 다른 언어에서는 fmod ()를 사용할 수 있습니다.
(mod 연산자를 사용하는 경우 부동 소수점 숫자에 대해 mod 연산을 수행하고 항상 음수가 아닌 응답을 제공하는지 미리 확인하십시오. 그렇지 않으면 나중에 많은 사람들이 놀랄 때 놀랄 것입니다 위도 / 경도 포인트가 올바르지 않습니다.)
다음과 같이 사용하십시오.
# 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
이 방법에는 루프가 없으므로 관측치가 지구 주위를 몇 번 돌았는지에 관계없이 반복적으로 더하거나 빼지 않고도 경도 값을 정규화합니다.
편집하다:
흠 ... 방금 자바 스크립트가 %
생각했던 것처럼 음수 값 을 처리하지 않는 것으로 나타났습니다 .
이 경우이 라이너 하나를 사용해보십시오.
longitude = (longitude + 36180) % 360 - 180
36180
우리는 추가하는 36,000 + 180 36,000 포지티브 도메인으로 음의 값으로 이동하는 것, 그리고 180 이상이므로 의해 modded하게 될 때를 이동하는 360
범위에서, 그것이 될 것이다 [0,360) . - 180
부분 시프트 그것은 [-180,180)의 범위로 다시.
여기에 또 하나의 라이너가 있는데, 36,000이 충분히 크지 않다는 것입니다.
longitude = (longitude % 360 + 360 + 180) % 360 - 180
longitude % 360 + 360
가 나중에에 의해 modded하게 된 때 부분은 긍정적 도메인의 가치 숙박을 보장합니다 360
. + 180
는 나중에 (와 감산 180 오면 일부 변화는 그 위에 그래서 - 180
)는 [-180,180)의 바람직한 범위 내에있을 것이다.