2011-06-12 6 views
3

나는 다른 점의 경도로부터 점의 경도를 계산하려고한다. 그것들은 같은 위도를 가지고 있고 그 사이의 거리는 알려져 있습니다. 나는 코사인 공식의 sperical 법칙을 사용하려고합니다. 두 지점의 위도 (LAT1 == LAT2) 같으면코사인 법칙의 법칙

# 'lat' short for 'latitude', 'lng' short for 'longitude'. 
# EARTH_RADIUS = 6371000.0, unit is meter. 
# 
distance = Math.acos(Math.sin(lat1)*Math.sin(lat2) + 
      Math.cos(lat1)*Math.cos(lat2) * 
      Math.cos(lng2-lng1)) * EARTH_RADIUS 

난 거리 lng1 lng2로부터 계산할 수있다. 그래서 나는이 공식이 어떤 상황을 제외하고, 아주 잘 작동 코사인의 sperical 법 공식

# lat1 == lat2 == lat 
# 'distance' and 'lng' are known 
lng2 = Math.acos((Math.cos(distance/EARTH_RADIUS) - Math.sin(lat)*Math.sin(lat))/(Math.cos(lat)*Math.cos(lat))) + lng 

에서 공식을 추론.

lat_degrees = -89.8345981836319 
lng_degrees = 96.42309331893921 
lat = lat1 = lat2 = (lat_degrees * Math::PI)/180 # -1.567909520510494 
lng = (lng_degrees * Math::PI)/180 # 1.682900453373236 
distance = 67544.06725769254 

마찬가지로이 오차를

Math::DomainError: Numerical argument is out of domain - "acos" 

을 apper 때문에 -2.5100189069914602 동일 Math.acos (값)의 값이 어느 미만 -1. 나는 그것에 대해 전혀 모른다. 파생 형식이 잘못 되었습니까?

+0

입니까? –

+0

작은 자바 스크립트를 읽을 수 있다면 https://groups.google.com/forum/#!topic/google-maps-api/PMxcDEnwNak –

+1

@WTP를 확인하십시오. 프로그래밍 언어는 루비입니다. –

답변

4

수식에 문제가 없습니다. 나는 계산을하지는 않았지만 요점은 당신이 남쪽 극 근처에 (기본적으로) 있고, 기본적으로 그렇게 큰 거리를 놓는 두 점이 없다는 것입니다.

0

단지가 전에 비교 추가 :이게 뭐죠 프로그래밍 언어

if lat1 == lat2 and lng1 == lng2 
    return 0 
end