Juni 14, 2012

membuat qibla locator


Setiap titik dibumi dapat dinyatakan dalam longtitude dan latitude
rumus untuk menghitung adalah
cos(y) = cos(x)cos(y)+sin(x)sin(z)cos(B)
cos(z)= cos(x)cos(y)+sin(x)sin(y)cos(C)
sin(x)/sin(A)=sin(y)/sin(B)=sin(z)/sin(C)
dari tiga rumus diatas di gabungin jadi
tan(B) = sin(C)/sin(x)cot(y)-cos(a)cos(C)
C = Bx-By
x = 90 – Ly
y = 90 – Lx
dan
cos(90-x)=sin(x)
sin(90-x)=cos(x)
cot(90-x)=tan(x)
maka persamaan akan menjadi
tan(B)=sin(Bx-By)/cos(Ly)tan(Lx) sin(Ly)cos(Bx By)
sudut B = archtan(tan(B))

titik A = posisi kita
titik B = posisi ka'bah
titik C = kutub utara

Arah kiblat azimuth ditunjukan sudut B.
secara matematis penghitungan arah kiblat seperti ini
secara program seperti ini
MainActivity.java
package com.baunAndroid;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Config;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
private static final String TAG = "Compass";
private SensorManager mSensorManager;
private Sensor mSensor;
private SampleView mView;
private float[] mValues;
private double lonMosque;
private double latMosque;
private LocationManager lm;
private LocationListener loclistenD;
//for find north direction
private final SensorEventListener mListener = new SensorEventListener(){
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
};
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        mView = new SampleView(this);
        setContentView(mView);
        //calling gps
        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location loc= lm.getLastKnownLocation("gps");
        //ask the location manager to send us location updates.
        loclistenD = new DispLocListener();
        lm.requestLocationUpdates("gps",30000l,10.0f,loclistenD);
        loclistenD = new DispLocListener();
        lm.requestLocationUpdates("gps",30000l,10.0f,loclistenD);
    }
    //finding ka'bah location
    
    private double QiblaCount(double lngMasjid,double latMasjid){
    double lngKabah= 39.82616111;
    double latKabah= 21.42250833;
    double lKlM= (lngKabah - lngMasjid);
    double sinLKLM= Math.sin(lKlM*2.0*Math.PI/360);
    double cosLKLM= Math.cos(lKlM*2.0*Math.PI/360);
    double sinLM = Math.sin(latMasjid*2.0*Math.PI/360);
    double cosLM = Math.cos(latMasjid*2.0*Math.PI/360);
    double tanLK = Math.tan(latKabah*2*Math.PI/360);
    double denominator = (cosLM*tanLK)-sinLM*cosLKLM;
    double Qibla;
    double direction;
    Qibla = Math.atan2(sinLKLM, denominator)*180/Math.PI;
    direction = Qibla < 0 ? Qibla+360 : Qibla;
    return direction;
    }
    //resume location update when we are resume
    @Override
    protected void onResume(){
    super.onResume();
    mSensorManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
    }
    @Override
    super.onStop();
    }
    private class SampleView extends View {
    private Paint mPaint = new Paint();
    private Path mPath = new Path();
    private boolean mAnimate;
public SampleView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mPath.moveTo(0, -50);
mPath.lineTo(20, 60);
mPath.lineTo(0, 50);
mPath.lineTo(-20, 60);
mPath.close();
}
//Make arrow for pointing direction
@Override
protected void onDraw(Canvas canvas){
Paint paint = mPaint;
canvas.drawColor(Color.WHITE);
paint.setAntiAlias(true);
paint.setColor(Color.DKGRAY);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
int w = canvas.getWidth();
int h = canvas.getHeight();
int cx = w/2;
int cy = h/2;
float Qibla = (float) QiblaCount(lonMosque,latMosque);
// float Qibla = mValues[0] + Qibla;
canvas.translate(cx, cy);
if (mValues != null){
canvas.rotate(-(mValues[0]+ Qibla));
}
canvas.drawPath(mPath, mPaint);
}
@Override
protected void onAttachedToWindow(){
mAnimate = true;
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow(){
mAnimate = false;
super.onDetachedFromWindow();
}
    }
    private class DispLocListener implements LocationListener{
    @Override
    public void onLocationChanged(Location loc){
    //update TextViews
    latMosque = loc.getLatitude();
    lonMosque = loc.getLongitude();
    }

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
}
manifestnya 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.baunAndroid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
ketika di launch akan keluar
run dengan menekan ctrl+f11



2 komentar:

Qibla Direction mengatakan...

Mashallah Very Nice… Qibla Direction is a free app for the Android and iOS which lets Muslims know where to turn before they pray.

Deenwise Qibla Direction app works perfectly for your Android smartphone and wearable smartwatch. Deenwise Qiblah direction app supports all countries and continents. The app uses GPS to find your current location or an internet connection to update your location for smartphone as well as android wear. You just need to open the app and place your device on flat surface and away from ferrous metal and magnetic field.

Download for iOS: https://itunes.apple.com/us/app/qibla-directions/id898694299?mt=8

Download for Android: https://play.google.com/store/apps/details?id=com.zimnix.deenwise.qibladirection

Unknown mengatakan...

Jazakallah Khair, Best Islamic App

mencoba menggunakan zram di raspberry pi

saya beberapa hari yang lalu mencoba mengaktifkan zram untuk membuat cadangan jika ram udah hampir penuh untuk dipindah ke zram, sejauh ini...