Skip navigation


Biar saya tidak lupa. Sekarang saya menggunakan fitur geospatial dari MySQL yang menyediakan fitur geospatial indexing. Dengan fitur ini, saya bisa menyimpan data-data berupa lokasi pada bumi (dengan menggunakan latitude dan longitude) dan bisa melakukan kueri berdasarkan posisi sebuah lokasi.

Tapi meskipun ada banyak fitur-fitur kueri berdasarkan lokasi yang disediakan oleh MySQL, sayangnya tidak ada fungsi bawaan untuk mencari lokasi-lokasi dalam jarak tertentu. Dari referensi (lihat di bagian paling bawah tulis) saya mendapatkan kode di bawah ini. Kode ini merupakan implementasi fungsi haversine.

DELIMITER $$
 CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
   BEGIN
     RETURN 6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(ABS(X(a)) - ABS(X(b)))), 2) + COS(RADIANS(ABS(X(a)))) * COS(RADIANS(ABS(X(b)))) * POWER(SIN(RADIANS(Y(a) - Y(b))), 2)));
   END  $$
DELIMITER ;

*update* Saat menulis ini merasa agak aneh dengan fungsi di atas, karena fungsi di atas sama sekali tidak memerlukan geospatial indexing. Ternyata ada alternatif yang menggunakan geospatial indexing yakni seperti di bawah.

DELIMITER $$
 CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
  BEGIN
  RETURN GLength(
   LineStringFromWKB(
     LineString(
       a, b
     )
   )
 ) * 100;
  END  $$
DELIMITER ;

Dan data-data lokasi dalam jarak tertentu (dalam satuan kilometer) dari sebuah titik dapat didapatkan dengan kueri seperti di bawah. Voila!

SELECT id, name, latitude, longitude, distance(coordinate, POINT(-6.890469, 107.610244)) AS cdist
FROM Locations
HAVING cdist < 10
ORDER BY cdist LIMIT 10;

Referensi utama dari blog ini dapat dilihat di

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: