Masalah
Saya ingin tahu bagaimana mendapatkan jarak dan arah antara 2 titik GPS . Saya telah meneliti formula haversine. Seseorang memberi tahu saya bahwa saya juga dapat menemukan arah menggunakan data yang sama.
Edit
Semuanya berfungsi dengan baik tetapi bantalannya belum berfungsi dengan baik. Output bearing negatif tetapi harus antara 0 - 360 derajat. Data yang ditetapkan harus membuat bantalan horizontal 96.02166666666666
dan:
Start point: 53.32055555555556 , -1.7297222222222221
Bearing: 96.02166666666666
Distance: 2 km
Destination point: 53.31861111111111, -1.6997222222222223
Final bearing: 96.04555555555555
Ini kode baru saya:
from math import *
Aaltitude = 2000
Oppsite = 20000
lat1 = 53.32055555555556
lat2 = 53.31861111111111
lon1 = -1.7297222222222221
lon2 = -1.6997222222222223
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
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))
Base = 6371 * c
Bearing =atan2(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1), sin(lon2-lon1)*cos(lat2))
Bearing = degrees(Bearing)
print ""
print ""
print "--------------------"
print "Horizontal Distance:"
print Base
print "--------------------"
print "Bearing:"
print Bearing
print "--------------------"
Base2 = Base * 1000
distance = Base * 2 + Oppsite * 2 / 2
Caltitude = Oppsite - Aaltitude
a = Oppsite/Base
b = atan(a)
c = degrees(b)
distance = distance / 1000
print "The degree of vertical angle is:"
print c
print "--------------------"
print "The distance between the Balloon GPS and the Antenna GPS is:"
print distance
print "--------------------"
atan2(sqrt(a), sqrt(1-a))
sama denganasin(sqrt(a))
Jawaban:
Ini versi Python:
sumber
import math
maka Anda harus menentukanmath.pi
,math.sin
dll. Denganfrom math import *
Anda mendapatkan akses langsung ke semua konten modul. Lihat "ruang nama" dalam tutorial python (seperti docs.python.org/tutorial/modules.html )Sebagian besar jawaban ini "membulatkan" jari-jari bumi. Jika Anda memeriksanya dengan kalkulator jarak lain (seperti geopy), fungsi ini akan dimatikan.
Ini bekerja dengan baik:
sumber
Ada juga implementasi vektor , yang memungkinkan untuk menggunakan 4 larik numpy alih-alih nilai skalar untuk koordinat:
sumber
Perhitungan bantalan salah, Anda perlu menukar input ke atan2.
Ini akan memberi Anda arah yang benar.
sumber
haversine formula
pertama kali saya mendengar ini, terima kasih.Anda dapat mencoba yang berikut ini:
sumber
Berikut ini adalah implementasi vektor numpy dari Haversine Formula yang diberikan oleh @Michael Dunn, memberikan peningkatan 10-50 kali lipat dibandingkan vektor besar.
sumber
Anda dapat menyelesaikan soal baring negatif dengan menambahkan 360 °. Sayangnya, hal ini mungkin menghasilkan bantalan yang lebih besar dari 360 ° untuk bantalan positif. Ini adalah kandidat yang baik untuk operator modulo, jadi secara keseluruhan Anda harus menambahkan baris
di akhir metode Anda.
sumber
Y di atan2, secara default, adalah parameter pertama. Berikut dokumentasinya . Anda perlu mengganti input Anda untuk mendapatkan sudut bantalan yang benar.
sumber
Lihat tautan ini: /gis/84885/whats-the-difference-between-vincenty-and-great-circle-distance-calculations
ini sebenarnya memberikan dua cara untuk mendapatkan jarak. Mereka adalah Haversine dan Vincentys. Dari penelitian saya, saya mengetahui bahwa Vincentys relatif akurat. Juga gunakan pernyataan import untuk membuat implementasinya.
sumber
Berikut adalah dua fungsi untuk menghitung jarak dan arah, yang didasarkan pada kode di pesan sebelumnya dan https://gist.github.com/jeromer/2005586 (menambahkan tipe tupel untuk titik geografis dalam format lat, lon untuk kedua fungsi untuk kejelasan ). Saya menguji kedua fungsi tersebut dan tampaknya berfungsi dengan benar.
sumber