Jumat, 18 Januari 2013

Kode Program untuk Mencari Jarak Dua Titik GPS Latitude Lingitude pada Java Android dan Query SQL Database MySQL

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.