Teori Haversine Formula
Teorema Haversine Formula adalah
sebuah persamaan yang penting dalam bidang navigasi, untuk mencari jarak busur
antara dua titik pada bola dari longitude dan latitude. Ini merupakan bentuk persamaan
khusus dari trigonometri bola, law of haversines, mencari hubungan sisi dan
sudut pada segitiga dalam bidang bola.
Spherical
law of cosines
Dimana a,b,c ialah jarak yang bersatuan radian/sudut karena
berada dalam bidang bola, yang bisa kita korelasikan dengan persamaan busur
dibawah ini :
Rumus Busur
Kemudian kita implementasikan persamaan harvesin dibawah ini :
Sehingga dari Formula diatas kita
dapat implementasi menjadi :
Teori Euclidean Distance
Euclidean distance adalah
perhitungan jarak dari 2 buah titik dalamEuclidean space. Euclidean space diperkenalkan
oleh Euclid, seorang
matematikawan dari Yunani sekitar tahun 300 B.C.E. untuk mempelajari hubungan
antara sudut dan jarak. Euclidean ini berkaitan dengan Teorema Phytagoras dan
biasanya diterapkan pada 1, 2 dan 3 dimensi. Tapi juga sederhana jika
diterapkan pada dimensi yang lebih tinggi.
Pada 1 dimensi
Semisal ingin menghitung jarak
Euclidean 1 dimensi. Titip pertama adalah 4, titik kedua adalah -10. Caranya
adalah kurankan -10 dengan 4. sehingga menghasilkan -14. Cari nilai absolut
dari nilai -14 dengan cara mempangkatkannya sehingga mendapat nilai 196.
Kemudian diakarkan sehingga mendapatkan nilai 14. Sehingga jarak euclidean dari
2 titik tersebut adalah 14.
Pada 2 dimensi
Koordinat jarak
Caranya hampir sama. Misalkan titik
pertama mempunyai kordinat (1,2). Titik kedua ada di kordinat (5,5). Caranya
adalah kurangkan setiap kordinat titik kedua dengan titik yang pertama. Yaitu,
(5-1,5-2) sehingga menjadi (4,3). Kemudian pangkatkan masing-masing sehingga
memperoleh (16,9). Kemudian tambahkan semuanya sehingga memperoleh nilai 16+9 =
25. Hasil ini kemudian diakarkan menjadi 5. Sehingga jarak euclideannya adalah
5.
Rumus Euclid
Sehingga dari Formula diatas kita dapat implementasi menjadi :
Rumus Jarak Euclide
Hasil perhitungan (Jarak)
diatas masih dalam satuan decimal degree(sesuai dengan format
longlat yang dipakai) sehingga untuk menyesuaikannya perlu dikalikan
dengan 111.319 km (1 derajat bumi = 111.319 km)
Penggunaan Teorema Euclid dan Teorema Harvesine
Pertama kita siapkan bahan uji sebagai berikut :
1. Titik Pertama : Gedung Sate
(Bandung)
Long
: 107.618633
Lat :
-6.901361
2. Titik Kedua: Mesjid Raya
Lembang (KBB)
Long
: 107.618279
Lat :
-6.811771
Jarak aktual yang diperoleh dari Gmap ialah 10.05 Km.
Dengan Teorema Euclid :
Rumus Jarak Euclide
=((SQRT((B6-B7)^2+(C6-C7)^2)*111.319))
Hasilnya diperoleh Jarak = 9.97 Km
Dengan Teorema Harvesine:
Rumus Jarak Harvesin
=(6371.1*((2*ASIN(SQRT((SIN((RADIANS(B7)-RADIANS(B6))/2)^2)+COS(RADIANS(B7))*COS(RADIANS(B6))*(SIN((RADIANS(C7)-RADIANS(C6))/2)^2))))))
Hasilnya diperoleh Jarak = 9.96 Km
JIka menggunakan excel:
Reff:
http://www.lp2maray.com Pusat kursus Android Map Mysql Game
http://www.movable-type.co.uk/scripts/latlong.html
http://andrew.hedges.name/experiments/haversine/
http://www.lp2maray.com Pusat kursus Android Map Mysql Game
http://www.movable-type.co.uk/scripts/latlong.html
http://andrew.hedges.name/experiments/haversine/
public static double getJarak(double lat1, double lon1, double lat2, double lon2) {
final
int
R =
6371
;
// Radious of the earth
Double latDistance = toRad(lat2-lat1);
Double lonDistance = toRad(lon2-lon1);
Double a = Math.sin(latDistance /
2
) * Math.sin(latDistance /
2
) +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
Math.sin(lonDistance /
2
) * Math.sin(lonDistance /
2
);
Double c =
2
* Math.atan2(Math.sqrt(a), Math.sqrt(
1
-a));
Double distance = R * c;
System.out.println(
"The distance between two lat and long is::"
+ distance);
}
private
static
Double toRad(Double value) {
return
value * Math.PI /
180
;
}
public static double getJarak(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
int meterConversion = 1609;
double myjr=dist * meterConversion;
return Math.floor(myjr/1000);
}
Tidak ada komentar:
Posting Komentar