> 백엔드 개발 > C++ > 내 GeoCoordinate 거리 계산이 부정확한 이유는 무엇이며, .NET의 `GeoCoordinate.GetDistanceTo()`를 사용하여 어떻게 개선할 수 있습니까?

내 GeoCoordinate 거리 계산이 부정확한 이유는 무엇이며, .NET의 `GeoCoordinate.GetDistanceTo()`를 사용하여 어떻게 개선할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2025-01-04 14:05:38
원래의
234명이 탐색했습니다.

Why is my GeoCoordinate distance calculation inaccurate, and how can I improve it using .NET's `GeoCoordinate.GetDistanceTo()`?

GeoCoordinate 거리 계산을 위한 최적의 접근 방식 결정

두 GeoCoordinate 간의 정확한 거리 계산을 확인하려는 노력으로 개발자가 자신의 결과와 그 결과 사이에 불일치가 발생했습니다. 외부 애플리케이션에서 제공됩니다. 현재 C# 구현은 3.3마일의 평균 거리를 반환하지만 다른 플랫폼에서는 3.5마일에 가까운 거리를 보고합니다. 이러한 상당한 차이로 인해 잠재적인 오류나 대체 거리 계산 방법에 대한 조사가 촉발되었습니다.

개발자의 현재 구현은 다음 공식을 중심으로 이루어집니다.

public static double Calculate(double sLatitude, double sLongitude, double eLatitude, double eLongitude)
{
    var radiansOverDegrees = (Math.PI / 180.0);

    var sLatitudeRadians = sLatitude * radiansOverDegrees;
    var sLongitudeRadians = sLongitude * radiansOverDegrees;
    var eLatitudeRadians = eLatitude * radiansOverDegrees;
    var eLongitudeRadians = eLongitude * radiansOverDegrees;

    var dLongitude = eLongitudeRadians - sLongitudeRadians;
    var dLatitude = eLatitudeRadians - sLatitudeRadians;

    var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
                 Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) *
                 Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);

    // Using 3956 as the number of miles around the earth
    var result2 = 3956.0 * 2.0 *
                  Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1));

    return result2;
}
로그인 후 복사

개발자는 불일치가 다음과 같을 수 있다는 가설을 세웠습니다. 단위 변환(킬로미터로 계산한 다음 마일로 변환)의 변화로 인해 발생합니다. 그러나 추가 조사를 통해 최적의 솔루션은 .NET Framework 4 이상에 도입된 GeoCoordinate 클래스를 활용하는 것으로 확인되었습니다. 이 클래스는 GeoCoordinate 간의 거리 계산을 단순화하는 GetDistanceTo라는 내장 메서드를 제공합니다.

다음 코드는 GetDistanceTo를 활용하는 방법을 보여줍니다.

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);
로그인 후 복사

이 메서드는 거리를 미터 단위로 반환합니다. 거리를 마일 단위로 얻으려면 결과를 1609.344로 나눌 수 있습니다. System.Device 네임스페이스를 참조하는 것은 GeoCoordinate 클래스를 활용하기 위한 전제 조건입니다.

이 접근 방식을 채택하면 개발자는 GeoCoordinate 간의 거리를 계산하는 검증되고 신뢰할 수 있는 방법에 액세스하여 오류나 부정확성의 가능성을 제거할 수 있습니다.

위 내용은 내 GeoCoordinate 거리 계산이 부정확한 이유는 무엇이며, .NET의 `GeoCoordinate.GetDistanceTo()`를 사용하여 어떻게 개선할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿