Rumah > pembangunan bahagian belakang > C++ > Mengapakah pengiraan jarak GeoCoordinate saya tidak tepat dan bagaimana saya boleh memperbaikinya menggunakan .NET's `GeoCoordinate.GetDistanceTo()`?

Mengapakah pengiraan jarak GeoCoordinate saya tidak tepat dan bagaimana saya boleh memperbaikinya menggunakan .NET's `GeoCoordinate.GetDistanceTo()`?

Mary-Kate Olsen
Lepaskan: 2025-01-04 14:05:38
asal
234 orang telah melayarinya

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

Menentukan Pendekatan Optimum untuk Pengiraan Jarak GeoCoordinate

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;
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan