두 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!