Kode program di bawah ini berguna untuk mencari jarak berdasarkan dua buah titik koordinat GPS (latitude dan longitude) sehingga dihasilkan sebuah jarak dalam meter atau kilometer.
1.Program pertama dalam bahasa SQL di database MySQL, ini berguna jika anda ingin membuat program server yang akan memberi data dalam bentuk JSON atau XML ke perangkat mobile misalnya Android yang menampilkan jarak dua titik yang datanya tersimpan di server web atau digunakan oleh web yang menampilkan Google Map dan mengambil data dengan AJAX dalam bentuk XML atau JSON.
jarakxml.php
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("peta");
$center_lat = $_GET["lintang"];
$center_lng = $_GET["bujur"];
$radius = $_GET["radius"];
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);
$query = "SELECT nama, alamat, lintang, bujur, deskripsi, foto, ( 6371 * acos( cos( radians($center_lat) ) * cos( radians( lintang ) ) * cos( radians( bujur ) - radians($center_lng) ) + sin( radians($center_lat) ) * sin( radians( lintang ) ) ) ) AS jarak FROM objek_wisata HAVING jarak < $radius ORDER BY jarak";
$result = mysql_query($query);
if (!$result) {
die("Invalid query: " . mysql_error());
}
header("Content-type: text/xml");
while ($row = @mysql_fetch_assoc($result)){
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("nama", $row['nama']);
$newnode->setAttribute("alamat", $row['alamat']);
$newnode->setAttribute("deskripsi", $row['deskripsi']);
$newnode->setAttribute("foto", $row['foto']);
$newnode->setAttribute("lintang", $row['lintang']);
$newnode->setAttribute("bujur", $row['bujur']);
$newnode->setAttribute("distance", $row['jarak']);
}
echo $dom->saveXML();
?>
jarak_json.php
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("peta");
$center_lat = $_GET["lintang"];
$center_lng = $_GET["bujur"];
$radius = $_GET["radius"];
$query = "SELECT nama, alamat, lintang, bujur, deskripsi, foto, ( 6371 * acos( cos( radians($center_lat) ) * cos( radians( lintang ) ) * cos( radians( bujur ) - radians($center_lng) ) + sin( radians($center_lat) ) * sin( radians( lintang ) ) ) ) AS jarak FROM objek_wisata HAVING jarak < $radius ORDER BY jarak";
$result = mysql_query($query);
if (!$result) {
die("Invalid query: " . mysql_error());
}
$rows = array();
while ($r = mysql_fetch_assoc($result)) {
$rows[] = $r;
}
$data = "{kontak:".json_encode($rows)."}";
echo $data;
?>
2. Program Kedua dalam bahasa Java / Android. Sehingga perhitungan jarak tidak perlu dilakukan di server, bisa lebih cepat dilakukan di perangkat mobile Android dengan titik-titik lokasi nya sudah disimpan dalam bentuk array dan lokasi GPS dinamis menyesuaikan tempat Device Mobile Android berada :
//Misal titik yang ingin dicek jaraknya Ambarukmo Plaza Yogyakarta
Double lati = -7.783130530640776
Double longi = 110.40135302698059;
Location lokCek = new Location("Titik Lokasi");
lokCek.setLatitude(lati);
lokCek.setLongitude(longi);
//Misal titik GPS tempat kita berada di Tugu Jogja
Double lat = -7.782939
Double lng = 110.36705000000006;
Location newLoc = new Location("Titik GPS");
newLoc.setLatitude(lat);
newLoc.setLongitude(lng);
double distance = 6371 * Math.acos( Math.cos( Math.toRadians(newLoc.getLatitude()) ) * Math.cos( Math.toRadians( lokCek.getLatitude() ) ) * Math.cos( Math.toRadians( lokCek.getLongitude() ) - Math.toRadians(newLoc.getLongitude()) ) + Math.sin( Math.toRadians(newLoc.getLatitude()) ) * Math.sin( Math.toRadians( lokCek.getLatitude() ) ) ) ;
//Maka Jaraknya :
Toast.makeText(getApplicationContext(), "lat:" + String.valueOf(lokCek.getLatitude()) + "\n lng:" + String.valueOf(lokCek.getLongitude()) + "\n lat:" + String.valueOf(newLoc.getLatitude()) + "\n lng:" + String.valueOf(newLoc.getLongitude()) + "\n jarak:" + String.valueOf(distance) , Toast.LENGTH_LONG).show();
Maaf jika tidak ada source code projectnya, kode program tersebut akan penulis gunakan di project-project yang lain.
Semoga bermanfaat, selamat coding.
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com
atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :