문제

그래서 : 온라인으로 발견 된 공식에서 조정 된 다음 기능이 있습니다.이 공식은 두 개의 LAT/LON 좌표를 사용하여 마일 (구형 지구를 따라)에서 그들 사이의 거리를 찾습니다.

public static double distance (double lat1, double lon1, double lat2, double lon2) {
        double theta = toRadians(lon1-lon2);
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
        dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

        return dist;
    }

내가 말할 수있는 한,이 일은 잘 작동합니다.

내가 필요로하는 것은 지구의 형상의 정확한 모델을 사용하여 단일 LAT/LON 쌍 [A], 헤딩 및 거리를 취하고 새로운 LAT/LON 쌍 [B]를 출력하는 두 번째 기능입니다. 지점 [A]에서 시작하여 주어진 제목에서 주어진 거리를 여행하면 [B] 지점에서 감습니다.

이것은 내 기하학적 기술이 나를 완전히 떠난 사실입니다. :)

어떤 도움이든 대단히 감사하겠습니다!

고마워요, 댄

도움이 되었습니까?

해결책

나는 이러한 유형의 공식을 대부분 얻습니다 항공 공식.

그가주는 공식은 다음과 같습니다.

반경과 거리가 주어진 Lat/lon

포인트 {lat, lon}은 지점 1에서 TC 방사형의 거리 d 아웃입니다.

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF 

이 알고리즘은 Dlon <pi/2, 즉 지구 둘레의 1/4 미만이 경도에서 연장되는 거리로 제한됩니다. 더 먼 거리가 허용되면 완전히 일반이지만 더 복잡한 알고리즘이 필요합니다.

    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

그는 "TC"를 사용하여 진정한 코스 (북쪽에서 시계 방향으로 라디안에서)를 대고 있으며 그가주는 거리는 지구 표면을 따라 아크의 라디안에 있습니다. 이것은 공식의 첫 번째 섹션에서 해상 마일에서 앞뒤로 전환하는 공식과 함께 설명됩니다. 또한 해당 페이지의 "구현 노트"및 "작업 예제"를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top