Dalam usaha untuk memastikan pengiraan jarak yang tepat antara dua GeoCoordinates, seorang pembangun telah menghadapi percanggahan antara keputusan mereka sendiri dan keputusan tersebut. disediakan oleh aplikasi luaran. Walaupun pelaksanaan C# semasa mereka mengembalikan jarak purata 3.3 batu, platform lain melaporkan jarak yang lebih dekat kepada 3.5 batu. Jurang ketara ini telah mendorong penyiasatan terhadap kemungkinan ralat atau kaedah pengiraan jarak alternatif.
Pelaksanaan semasa pembangun berkisar pada formula berikut:
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; }
Pemaju telah membuat hipotesis bahawa percanggahan itu mungkin dikaitkan dengan variasi dalam penukaran unit (mengira dalam kilometer dan kemudian menukar kepada batu). Walau bagaimanapun, setelah pemeriksaan lanjut, telah ditentukan bahawa penyelesaian optimum terletak pada penggunaan kelas GeoCoordinate yang diperkenalkan dalam Rangka Kerja .NET 4 dan lebih tinggi. Kelas ini menyediakan kaedah terbina dalam dipanggil GetDistanceTo, yang memudahkan pengiraan jarak antara GeoCoordinates.
Kod berikut menunjukkan cara memanfaatkan GetDistanceTo:
var sCoord = new GeoCoordinate(sLatitude, sLongitude); var eCoord = new GeoCoordinate(eLatitude, eLongitude); return sCoord.GetDistanceTo(eCoord);
Kaedah ini mengembalikan jarak dalam meter. Untuk mendapatkan jarak dalam batu, anda boleh membahagikan hasilnya dengan 1609.344. Merujuk ruang nama System.Device adalah prasyarat untuk menggunakan kelas GeoCoordinate.
Dengan menggunakan pendekatan ini, pembangun boleh mengakses kaedah yang terbukti dan boleh dipercayai untuk mengira jarak antara GeoCoordinates, menghapuskan potensi ralat atau ketidaktepatan.
Atas ialah kandungan terperinci Mengapakah pengiraan jarak GeoCoordinate saya tidak tepat dan bagaimana saya boleh memperbaikinya menggunakan .NET's `GeoCoordinate.GetDistanceTo()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!