2016-10-21 2 views
1

두 번째 좌표를 계산하는 공식은 here입니다. 하지만 자바로 변환하면 예상대로 결과가 나오지 않습니다.자바 - 주어진 좌표, ​​방위 및 거리에서 두 번째 좌표 계산

private Point get(double lat1, double lon1, double tc, int d) { 
    double lat = Math.asin(
          Math.sin(lat1) * Math.cos(d) 
         + Math.cos(lat1) * Math.sin(d) * Math.cos(tc) 
         ); 

    double dlon= Math.atan2(
          Math.sin(tc) * Math.sin(d) * Math.cos(lat1) 
         , Math.cos(d) - Math.sin(lat1) * Math.sin(lat)); 
    double lon = ((lon1 - dlon + Math.PI) % (2 * Math.PI)) - Math.PI; 

    return new Point(lat, lon); 
} 

나는 위의 코드를 get (50, 10, 0, 0)과 같은 간단한 경우로 테스트했습니다. 그래서 결과가 첫 번째 점과 동일 할 것입니다 예상, 그러나 이것은 내가 가진 결과 : 두 번째 좌표를 계산하는 정확한 공식을 사용하여

Lat: 1.4432701894877245, lon: -3.8108244707674395 

암 I을?

[편집] 여기에 내가 자바 코드로 변환하려고 공식은

의견에서 언급 한 바와 같이
lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) 
dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat)) 
lon=mod(lon1-dlon +pi,2*pi)-pi 
+0

왜 int인가요? –

+0

tc의 단위는 라디안이고 d는 km입니다. 기본 유형이이 알고리즘의 결과에 영향을 미치지 않을 것이라고 생각합니다. – Hien

+1

'cos (d)'에 아무런 의미가 없기 때문에 공식에 문제가 있다고 생각합니다. – talex

답변

1

, 수식은 위도, 경도, 진정한 물론, 거리 라디안 모두 기대 . 당신이 해리의 위도, 경도,도에서 진정한 물론, 거리에서 전달하려는 경우

, 당신이 어떤 수학 아래에 다음과 같은 변환을 수행해야합니다 : 위도를 변환

// convert to radians 
lat1 = lat1 * Math.PI/180; 
lon1 = lon1 * Math.PI/180; 
tc = tc * Math.PI/180; 
d = (Math.PI/(180*60)) * d; 

다음과 라디안에서 다시 경도 :

// convert to degrees 
lat = lat * 180/Math.PI; 
lon = lon * 180/Math.PI; 

그러나, 두 개의 다른 음 :

1) java.awt.Point의 (이를 지울 수 없습니다) 당신이 사용중인 유일한 시간이다 오래된 정수; 대신 Point2D.Double을 사용하는 것이 좋습니다.

2) 거리는 항해 거리 또는 라디안의 분수를 포함하여 측정되어야하므로 이중이어야합니다.

이러한 편집으로 get (50, 10, 0, 0)이 작동합니다. 66도 레이디 얼 - get (33.95, 118.4, 66, 100)에있는 LAX에서 웨이 포인트 100nm에 대한 작업 한 예는 34.701 lat와 116.5499 lon을 반환하며 34d 37m과 일치합니다 (분이 분수로 변환됨을 기억하십시오) 및 116d (33m)를 포함한다.

+0

['Math.toRadians'] (https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#toRadians-double-) 및 ['Math.toDegrees' ] (https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#toDegrees-double-)? – bradimus

+1

나는 공식 웹 페이지 Hien에 연결되어 있었기 때문에 거기에 radian <--> 변환이있었습니다. –