Saya mencoba menerapkan rumus ini: http://andrew.hedges.name/experiments/haversine/ Aplet ini berfungsi baik untuk dua poin yang saya uji:
Namun kode saya tidak berfungsi.
from math import sin, cos, sqrt, atan2
R = 6373.0
lat1 = 52.2296756
lon1 = 21.0122287
lat2 = 52.406374
lon2 = 16.9251681
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
distance = R * c
print "Result", distance
print "Should be", 278.546
Jarak yang dikembalikan adalah 5447.05546147 . Mengapa?
radians(abs(52.123))
harus melakukan trik ...Pembaruan: 04/2018: Perhatikan bahwa jarak Vincenty sudah ditinggalkan sejak GeoPy versi 1.13 - Anda harus menggunakan geopy.distance.distance () sebagai gantinya!
Jawaban di atas didasarkan pada rumus Haversine , yang mengasumsikan bumi adalah bola, yang menghasilkan kesalahan hingga sekitar 0,5% (menurut
help(geopy.distance)
). Jarak Vincenty menggunakan model ellipsoidal yang lebih akurat seperti WGS-84 , dan diimplementasikan dalam geopy . Sebagai contoh,akan mencetak jarak
279.352901604
kilometer menggunakan default ellipsoid WGS-84. (Anda juga dapat memilih.miles
atau salah satu dari beberapa unit jarak lain).sumber
print geopy.distance.VincentyDistance(coords_1, coords_2).km 279.352901604
geopy.distance.distance(…)
kode yang merupakan alias dari rumus jarak terbaik saat ini (= paling akurat). (Vincenty saat ini.)geopy.distance.geodesic
(atau defaultgeopy.distance.distance
) sebagai gantinya, yang lebih akurat dan selalu konvergen.Untuk orang-orang (seperti saya) datang ke sini melalui mesin pencari dan hanya mencari solusi yang bekerja di luar kotak, saya sarankan menginstal
mpu
. Instal viapip install mpu --user
dan gunakan seperti ini untuk mendapatkan jarak haversine :Paket alternatif adalah
gpxpy
.Jika Anda tidak menginginkan dependensi, Anda dapat menggunakan:
Paket alternatif lainnya adalah
[haversine][1]
Mereka mengklaim memiliki optimasi kinerja untuk jarak antara semua titik dalam dua vektor
sumber
Saya tiba di solusi yang jauh lebih sederhana dan kuat yang menggunakan
geodesic
darigeopy
paket karena Anda akan sangat mungkin menggunakannya dalam proyek Anda sehingga tidak perlu instalasi paket tambahan.Ini solusinya:
geopy
sumber
sumber
Ada beberapa cara untuk menghitung jarak berdasarkan koordinat yaitu lintang dan bujur
Pasang dan impor
Tentukan koordinat
Menggunakan haversine
Menggunakan haversine dengan sklearn
Menggunakan OSRM
Menggunakan geopy
Keluaran
sumber