Rumus Haversine di MySQL

Rumus Haversine adalah persamaan pada navigasi, yang memberikan jarak lingkaran besar antara dua titik bumi berdasarkan garis bujur (longitude) dan garis lintang (latitude). Rumus Haversine diperkenalkan oleh matematikawan asal Inggris yang bernama Prof. James Inman pada tahun 1835. Perhitungan dari rumus ini juga cukup akurat  dimana rumus ini mengabaikan ketinggian bukit dan kedalaman lembah di permukaan bumi. Secara matematis dapat dituliskan didalam persamaan sebagai berikut :

Screenshot-12812-132-PM

dimana r adalah konstanta radius bumi yaitu 6.371 km

buat database dengan struktur seperti ini

Untitled

isikan aja, semisal seperti ini;

Untitled

nah, query haversine seperti berikut

SELECT id, nama, ( 6371 * ACOS( SIN( RADIANS( lat ) ) * SIN( RADIANS( - 7.783282 ) ) + COS( RADIANS( lng - 110.3944402 ) ) * COS( RADIANS( lat ) ) * COS( RADIANS( - 7.783282 ) ) ) ) AS jarak
FROM haversine
HAVING jarak <6371
ORDER BY jarak ASC
LIMIT 0 , 10

jika di implementasikan ke PHP dengan format JSON encode, maka  codenya

<?php

	$conn = mysql_connect("localhost","root","");
	mysql_select_db("haversine");

	$lat   = $_GET['lat'];
	$lng   = $_GET['lng'];

	$sql = "SELECT id,nama, 
	( 6371 * ACOS( SIN( RADIANS( lat ) ) * SIN( RADIANS( $lat ) ) + COS( RADIANS( lng - $lng ) ) * COS( RADIANS( lat ) ) * COS( RADIANS( $lat ) ) ) ) AS jarak
	FROM haversine
	HAVING jarak <6371
	ORDER BY jarak ASC limit 0,10" ;
	$hasil = mysql_query($sql);
	if ($hasil > 0) 
	{
	$response = array();
	$response["dist"] = array();
	while ($data = mysql_fetch_array($hasil))
	{

		$h['id']    = $data['id'] ;
		$h['nama']  = $data['nama'];
		$h['jarak'] = round($data['jarak'],3);

		array_push($response["dist"], $h);
	}
	$response["success"] = "1";
	echo json_encode($response);
	}
else 
{
    $response["success"] = "0";
    $response["message"] = "Tidak ada data";
	echo json_encode($response);
}
?>

cara eksekusinya adalah dengan url seperti ini

d

jika mau di implementasikan ke aplikasi LBS Android, maka buatlah class, dan letakan class tersebut ketika onLocationChaged().

Leave a Reply

Your email address will not be published. Required fields are marked *


+ 9 = 10

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>