Saat ini saya menggunakan fungsi di bawah ini dan tidak berfungsi dengan baik. Menurut Google Maps, jarak antara koordinat ini (dari 59.3293371,13.4877472
ke 59.3225525,13.4619422
) adalah 2.2
kilometer sementara fungsi mengembalikan 1.6
kilometer. Bagaimana saya bisa membuat fungsi ini mengembalikan jarak yang benar?
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
jsFiddle: http://jsfiddle.net/edgren/gAHJB/
javascript
coordinates
distance
Airikr
sumber
sumber
Jawaban:
Apa yang Anda gunakan disebut rumus haversine , yang menghitung jarak antara dua titik pada bola saat gagak terbang . Tautan Google Maps yang Anda berikan menunjukkan jarak sejauh 2,2 km karena itu bukan garis lurus.
Wolphram Alpha adalah sumber yang bagus untuk melakukan perhitungan geografis, dan juga menunjukkan jarak 1,652 km antara dua titik ini .
Jika Anda mencari jarak garis lurus (sebagai file gagak), fungsi Anda berfungsi dengan benar. Jika yang Anda inginkan adalah jarak mengemudi (atau jarak bersepeda atau jarak transportasi umum atau jarak berjalan kaki), Anda harus menggunakan API pemetaan ( Google atau Bing yang paling populer) untuk mendapatkan rute yang sesuai, yang akan mencakup jarak tersebut.
Kebetulan, Google Maps API menyediakan metode paket untuk jarak bulat, di
google.maps.geometry.spherical
namespace -nya (caricomputeDistanceBetween
). Ini mungkin lebih baik daripada menggulirkan sendiri (sebagai permulaan, ia menggunakan nilai yang lebih tepat untuk jari-jari Bumi).Untuk pemilih di antara kita, ketika saya mengatakan "jarak garis lurus", saya mengacu pada "garis lurus pada bola", yang sebenarnya merupakan garis lengkung (yaitu jarak lingkaran besar), tentu saja.
sumber
Saya telah menulis persamaan yang sama sebelum - mengujinya dan juga mendapat 1,6 km.
Peta google Anda menunjukkan jarak MENGEMUDI.
Fungsi Anda menghitung ketika gagak terbang (jarak garis lurus).
sumber
Solusi Derek bekerja dengan baik untuk saya, dan saya baru saja mengubahnya menjadi PHP, semoga membantu seseorang di luar sana!
sumber
Coba ini. Itu ada di VB.net dan Anda perlu mengubahnya ke Javascript. Fungsi ini menerima parameter dalam menit desimal.
Edit Fungsi yang dikonversi dalam javascript
sumber
const earthsMajorAccess = 6378137.0;
menghilangkan perlunya komentar yang membantu (karena nama variabel menyiratkan apa itu)Hitung Jarak antara Dua Poin dalam javascript
Untuk lebih jelasnya lihat ini: Tautan Referensi
sumber
Menggunakan rumus Haversine, sumber kode :
Kode sampel dilisensikan di bawah LGPLv3.
sumber
Saya telah menulis fungsi untuk menemukan jarak antara dua koordinat. Ini akan mengembalikan jarak dalam meter.
sumber
Great-circle distance - Dari panjang akor
Inilah solusi elegan menerapkan pola desain strategi; Saya harap ini cukup mudah dibaca.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
convert-degrees-to-radian.js:
Ini mengikuti jarak Great-circle - Dari panjang chord, didokumentasikan di sini .
sumber
Kunjungi alamat ini. https://www.movable-type.co.uk/scripts/latlong.html Anda dapat menggunakan kode ini:
sumber