Gelocation Dalam Perhitungan Jadwal Sholat




Oleh Bayu Yanuargi

Seperti kita ketahui Geolocation adalah sebuah metode penentuan posisi seseorang berdasarkan koordinat bumi. Saat ini aplikasi game yang sangat terkenal dan mengunakan prinsip geolocation adalah Pokeman Go, dimana seorang user dapat diketahui posisinya dengan menggunakan geolocation dan dapat mencari Pokemon disekitarnya. Geolocation pada smartphone sendiri sebenarnya bekerja berdasarkan AGPS yaitu sinkronisasi posisi berdasarkan koneksi Internet (IP-Address) dan GPS yang dimiliki oleh Smartphone. Selain untuk berbagai penggunaan, methode geolocation ini akan sangat berguna bagi kaum muslim dalam penentuan Jadwal Sholat dan Arah Kiblat. 



Apakah hubungan antara Geolocation dan Jadwal Sholat adalah karena Jadwal Sholat sangat dipengaruhi oleh peredaran Matahai dan Bulan yaitu mulai dari terbit hingga tenggelam. Sehingga setiap posisi di bumi akan memiliki waktu sholat yang berbeda-beda. 
Close Adding Code WordPress Blogger Have a different site? Click here for instructions Expert Tips Know where to place ads for maximum revenue. Learn More Best practices for using multiple ads on your site. Learn More Copyright © Chitika, Inc. 2016
Seperti contohnya Jakarta dan Medan, walaupun memiliki zona waktu yang sama yaitu WIB, tetap waktu sholat akan berbeda karena Medan jauh kebarat sehingga matahari terbenam lebih lama. Untuk menentukan dimanakah posisi kita pada saat peredaran matahari dan bulan maka kita bisa memanfaatkan geolocation untuk menghitung Jam - jam sholat.



Selain untuk menentukan koordinat geografis, dalam penentuan waktu sholat, didasarkan juga pada timezone. Timezone ini akan sangat berpengaruh pada perhitungan tepat pada jam, seperti contoh Jakarta dan Singapore walaupun Singapore berada di bagian barat tetapi karena timezone, waktu di Singapore lebih cepat satu jam dari Jakarta, jadi tiap lokasi akan memiliki perhitungan yang berbeda, berikut contoh JavaScript dalam penentuan Timezone.

<script type="text/javascript">     function myMonth() {         var d = new Date(); var date = d.getDate(); var n = d.getMonth()+1; var y = d.getFullYear(); document.getElementById("config_bln").value = n; document.getElementById("config_tgl").value = date; document.getElementById("config_thn").value = y;     } function getTimeZone() {>       var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);       return (offset < 0 ? "" : "-") + ("" + Math.floor(o / 60)).slice(-2);     }  document.getElementById('config_timezone').value = getTimeZone();  
</script>


Sedangakan untuk perhitungan waktu sholat dengan menggunakan Javascript seperti berikut :

<amarullz ""><http="">(function(){
  window.waktuSholat=function(){
    /* Koordinate Default*/
    this.latitude   = -7.3397985;
    this.longitude  = 112.7926759;
 
    /* Ikhtiyat/Kehati-hatian sebanyak 2 Menit */
    this.Ikhtiyat   = 2;
 
    /**
     * Set Latitude &amp; Longitude
     * @sintax
     *   void Object.setLatLng(float Latitude, float Longitude);
     */
    this.setLatLng=function(lat,lng){
      this.latitude=lat;
      this.longitude=lng;
    };
 
    /**
     * Fungsi untuk meng-convert nilai Float untuk jam
     * menjadi array [Jam,Menit,Detik] atau string jam "12:1:9"
     * @sintax
     *   string/array Object.calc_toTime(float flTime, bool ReturnArray);
     */
    this.calc_toTime=function(num,retarray){
      var jam = Math.floor(num);
      var vmn = (num-jam)*60;
      var mnt = Math.floor(vmn);
      var dtk = Math.round((vmn-mnt)*60);
      var ret = [jam,mnt,dtk];
      if (retarray) return ret;
      return ret.join(':');
    };
    /* Fungsi Untuk Convert calc_toTime menjadi
       Friendly Time format dengan leading 0 pada jam,menit
       dan detik. Output format: 12:01:09
    */
    this.timeToString=function(num){
      var arr = this.calc_toTime(num,true);
      arr[0]+=''; arr[1]+=''; arr[2]+='';
      if (arr[0].length==1) arr[0]='0'+arr[0];
      if (arr[1].length==1) arr[1]='0'+arr[1];
      if (arr[2].length==1) arr[2]='0'+arr[2];
      return arr.join(':');
    };

    /**
     * Fungsi untuk mendapatkan Nilai Integer dari Julian Date
     * @sintax
     *   [JD] Object.jd(int Tahun, int Bulan, int Tanggal, int TimeZone);
     */
    this.jd=function(thn,bln,tgl,tz){
      if (bln&lt;=2){
        bln+=12;
        thn--;
      }
      var UT = 12-tz;
      // Nilai 1 Tahun = 365.25 Hari ( 366 = 1x kabisat, 365 = 3x )
      // Nilai 1 Bulan = 30.6001 Hari
      // Alghoritma dapat dibaca di: http://www.gmat.unsw.edu.au/snap/gps/gps_survey/chap2/214.htm
      var jd = Math.floor(365.25 * thn) + Math.floor(30.6001 * (bln+1)) + tgl + (UT/24) + 1720981.5;
      return jd;
    };
 
    /**
     * Julian Date untuk 1 Januari 2000 (UTC)
     * diperlukan untuk perhitungan jumlah hari dan
     * abad untuk hari yang dimaksud.
     */
    this.JD2000     = this.jd(2000,1,1,0);
 
    /**
     * Fungsi untuk menghitung jumlah hari dari satu
     * JD ke JD yang lainnya
     * @sintax
     *   [n] Object.jd_jumlahHari([JD] From,[JD] To);
     */
    this.jd_jumlahHari=function(jd_from,jd_to){
      return jd_to-jd_from;
    };

    /**
     * Fungsi untuk menghitung jumlah abad untuk
     * jumlah hari yang dimaksud.
     * @sintax
     *   [T] Object.jd_jumlahAbad([JD] jumlahHari);
     */
    this.jd_jumlahAbad=function(jumlahHari){
      /* Jumlah Hari dalam 1 Abad = 36525 Hari */
      return jumlahHari/36525;
    };
 
    /**
     * Fungsi untuk menghitung bujur ekliptik rata-rata matahari
     * @sintax
     *   [g] Object.elip_ratarata([T] jumlahAbad);
     */
    this.elip_ratarata=function(T){
      var g_awal= 280.46 + (36000.77129 * T);
      var g     = g_awal;
      if (g_awal&gt;360){
        var cg = 360 * Math.floor(g_awal/360);
        g -= cg;
      }
      return g;
    };
 
    var M={
      deg2rad:function(d){
        return (d / 180) * Math.PI;
      },
      rad2deg:function(d){
        return d * 57.29577951308232;
      },
      sin:function(d){
        return Math.sin(M.deg2rad(d));
      },
      cos:function(d){
        return Math.cos(M.deg2rad(d));
      },
      tan:function(d){
        return Math.tan(M.deg2rad(d));
      },
      acos:function(r){
        return M.rad2deg(Math.acos(r));
      },
      asin:function(r){
        return M.rad2deg(Math.asin(r));
      },
      atan:function(r){
        return M.rad2deg(Math.atan(r));
      },
    };
 
    /**
     * Fungsi untuk menghitung bujur ekliptik matahari
     * @sintax
     *   [L0] Object.elip_bujur([T] jumlahAbad);
     */
    this.elip_bujur=function(T){
      var b_awal = 357.528+(35999.05096*T);
      var c_b    = 360 * Math.floor(b_awal/360);
      var b      = b_awal - c_b;
      var lo     = this.elip_ratarata(T) + (1.915 * M.sin(b)) + (0.02 * M.sin(2*b));
      return lo;    
    };
 
    /**
     * Fungsi untuk menghitung kemiringan ekliptik matahari
     * @sintax
     *   [E] Object.elip_kemiringan([n] jumlahHari);
     */
    this.elip_kemiringan=function(n){
      return 23.439-0.0000004*n;
    };
 
    /**
     * Fungsi untuk menghitung Aksensio rekta matahari
     * @sintax
     *   [Ra0] Object.cari_ra0([L0] elipBujur, [E] Kemiringan);
     */
    this.cari_ra0=function(L0, E){
      var _L0    = L0;
      var _E     = E;
      var cos_L0 = M.cos(_L0);
   
      var Ra01   = M.atan((M.sin(_L0) * M.cos(_E)) / cos_L0);
      var Ra02   = Ra01;
      if (cos_L0&gt;=0)
        Ra02+=360;
      else
        Ra02+=180;
      var CRa = 360 * Math.floor(Ra02/360);
      var Ra0 = Ra02-CRa;
      return Ra0;
    };
 
    /**
     * Fungsi untuk menghitung deklinasi matahari
     * @sintax
     *   [d0] Object.cari_deklinasi([L0] elipBujur, [E] Kemiringan);
     */
    this.cari_deklinasi=function(L0,E){
      var d0 = M.asin(M.sin(L0) * M.sin(E));
      return d0;
    };
 
    /**
     * Fungsi untuk menghitung Meridian Pas
     * @sintax
     *   [MP] Object.cari_meridianpas([Ra0] Aksensio, [g] elip_ratarata);
     */
    this.cari_meridianpas=function(Ra0,g){
      var MP = (12-((g-Ra0)/15));
      if (MP<0 else="" if="" mp="">24)
        MP-=24;
      return MP;
    };
 
    /**
     * Fungsi untuk menghitung Koreksi Waktu Daerah
     * @sintax
     *   [KWD] Object.calc_kwd(int TimeZone,float Longitude);
     */
    this.calc_kwd=function(tz,longitude){
      var KWD = tz - (longitude/15);
      return KWD;
    };
 
    /**
     * Fungsi Untuk menghitung Waktu pada kondisi-kondisi tertentu
     *  [WAKTU] Object.calcWaktu([d0],float,[KWD],[MP],int DerajatMatahari);
     */
    this.calcWaktu=function(d0,latitude,KWD,MP,Z){
      var t = 0;
      if (Z!=0){
        var _Z   = Math.abs(Z);
        var cosZ = (M.cos(_Z) - M.sin(d0) * M.sin(latitude)) / (M.cos(d0) * M.cos(latitude));
        t = M.acos(cosZ) / 15;
        if (Z<0 1="" 2000="" abad="" aksensio="" ashar="" atan="" ath.abs="" berdasarkan="" bila="" bln="" bujur="" d0-this.latitude="" d0="" daerah="" dan="" dari="" date="" deklinasi="" di="" dimaksud="" div="" e="" ekliptik="" for="" fungsi="" g="this.elip_ratarata(T);" gmt="7;" hari="" hitung="" if="" in="" isya="" jan="" jd="this.jd(thn,bln,tgl,gmt);" julian="" jumlah="" kemiringan="" koordinat="" koreksi="" kwd="this.calc_kwd(gmt,this.longitude);" latitude="" list="" lo="this.elip_bujur(T);" maghrib="" matahari="" mendapatkan="" meridian="" mp="this.cari_meridianpas(Ra0,g);" n="this.jd_jumlahHari(this.JD2000,JD);" pas="" posisi="" posmatahari="" ra0="this.cari_ra0(Lo," rata-rata="" rekta="" return="" sampai="" sebagai="" set="" shalat="" sholat="" shubuh="" suatu="" t="this.jd_jumlahAbad(n);" tan="" tergantung="" tgl="" this.calcwaktu="" this.get="function(thn,bln,tgl,gmt){" this.ikhtiyat="" this.latitude="" this.timetostring="" thn="" tidak="" timezone.="" untuk="" var="" waktu="" waktusholat="" wib="" yang="" yg="" zuhur="">
<br />
</0></0></http:></amarullz><br />

Salah satu aplikasi android yang menerapkan sistem perhitungan di atas adalah aplikasi "Sholat Dimana". Aplikasi tersebut menggunakan lokasi user untuk memperhitungkan waktu sholat sehingga lebih mendekati pada waktu yang sesuai dengan perhitungan di atas.


Bilat dilihat pada gambar di atas, perhitungan waktu sholat memperhitungkan latitude dan longitude dari user yang lokasinya ada di peta. Penggunaan view peta sangat membantu user untuk melakukan koreksi terhadap waktu sholatnya, jika posisi yang ditunjukkan oleh peta cukup jauh (lebih dari 111 km / 1 derajat) maka bisa jadi jadwal sholat yang ditampilkan juga mengalami kesalahan.

Tetapi aplikasi tersebut sangat menyarankan bagi pengguna untuk melakukan koneksi ke internet agar perhitungan geolocation dapat dilakukan dengan akurat karena aplikasi tersebut menggunakan API Google Maps dalam penentuan koordinat posisi users.





Close Adding Code WordPress Blogger Have a different site? Click here for instructions Expert Tips Know where to place ads for maximum revenue. Learn More Best practices for using multiple ads on your site. Learn More Copyright © Chitika, Inc. 2016
Selain jadwal sholat, aplikasi ini akan menunjukkan POI masjid-masjid terdekat dengan menggunakan Place Picker API dari google maps, user juga dapat melakukan routing dari lokasi user menuju ke masjid yang dipilih menggunakan google maps Drive.

Aplikasi dapat diunduh di google playstore 


No comments:

Post a Comment