Javafx Qibla Finder/Locator

Beberapa waktu yang lalu, di desa sebelah, ada yang menceritakan tentang sajadah yang dapat “menyala” semakin terang jika di arahkan ke arah kiblat.  saya menduga pada sajadah tersebut terdapat engine gps + qibla finder algorithm untuk mengatur (mungkin nilai resistor) sehingga tingkat intensitas cahaya pada sajadah bisa teratur.

kali ini, saya juga ingin menunjukkan (as a proof-of-concept), tentang cara menghitung arah kiblat dari lokasi tertentu. ada beberapa artikel (paper) yang mungkin dapat anda gunakan sebagai rujukan algoritma penentuan arah wiblat ini. seperti

Determintation of Qibla Direction using Modern Approach 

Determining the Sacred Direction of Islam

Qibla locator algorithm googling results :P

jika anda membaca salah satu paper tersebut, salah satu cara penghitungan yang digunakan adalah dengan menggunakan metode spherical trigonometry dan teknik inilah yang saya gunakan (implementasikan).

without further ado, ini dia screenshotnya (untuk kota jakarta : latitude: 6°8´S   longitude: 106°45´E ):

qibla-finder

 

nah, kelihatan kan, kalau arah qiblat dari jakarta (indonesia) itu tidak tepat ke arah barat, tapi agak serong beberapa drajat.

perhitungan arah qiblat yang saya pergunakan adalah rumus ini (menggunakan teknik spherical geometry yang tadi):

 formula

nah, simple kan, sekarang giliran anda membuatnya :)

sneak peek source code utamanya (cuma satu fungsi, baca baik2 source codenya, baru ngerti, kalo gak dibaca tapi langsung di coba, kemungkinan gak jalan :P )

    public function getQibla(lat:Number,latmin:Number, lon:Number,lonmin:Number, EW:String, NS:String){
        // ka'bah position
        var lk = 39.823333;
        var pk = 21.423333;

        var l=Math.floor(lon) +lonmin/60 ;
        if (EW == 'Western') {l*=-1;}
        var p=Math.floor(lat) +latmin/60 ;
        if (NS == 'Southern') {p*=-1;}
        q = Math.atan2(Math.sin(r(lk -l)),((Math.cos(r(p))*Math.tan(r(pk))) 
             -Math.sin(r(p))*Math.cos(r(lk - l))));
        println("q: {q}");
        if(q<0)
        {
            qibla = Math.ceil(deg(q));
            min = Math.round((deg(q) mod qibla)*60);
            rotangle =360+deg(q) + 45;
        }
        if(q>0)
        {
            qibla = Math.floor(deg(q));
            min = Math.round((deg(q) mod qibla)*60);
            rotangle =deg(q) + 45; // add 45, because compass background rotated 45
        }

        println("rotangle: {rotangle}");
    }

ok, as you noticed, source code kali ini nggak clean, ini menandakan betapa sedang terburu-burunya malasnya si programmer :) . selamat mencoba.

dan jangan lupa, Semangkaaa! :P

5 thoughts on “Javafx Qibla Finder/Locator

  1. Sesuatu yang sedikit membingungkan. Untuk mengetahui koordinat, apakah digunakan Google Earth atau ada metode yang lain seperti melihat posisi di Globe?

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