QBQibla
Kelas statis untuk menghitung sudut arah kiblat berdasarkan koordinat pengguna.
calculateAngle​
Menghitung sudut arah kiblat dari posisi pengguna menuju Ka'bah di Makkah.
double calculateAngle(double latitude, double longitude)
Parameters​
| Name | Type | Description |
|---|---|---|
latitude | double | Lintang lokasi pengguna (dalam derajat) |
longitude | double | Bujur lokasi pengguna (dalam derajat) |
Returns​
Nilai double berupa sudut 0–360 derajat, diukur searah jarum jam dari arah Utara.
| Nilai | Arah |
|---|---|
0 / 360 | Utara |
90 | Timur |
180 | Selatan |
270 | Barat |
Example​
// Koordinat Bandung
double angle = QBQibla.calculateAngle(-6.9033625, 107.6019579);
// Koordinat Jakarta
double angleJakarta = QBQibla.calculateAngle(-6.2, 106.8);
Integrasi dengan Kompas Android​
QiblaActivity.java
public class QiblaActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor rotationSensor;
private double qiblaAngle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Hitung sudut kiblat dari koordinat user
qiblaAngle = QBQibla.calculateAngle(-6.9033625, 107.6019579);
// Setup sensor kompas
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
}
@Override
public void onSensorChanged(SensorEvent event) {
float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
float[] orientation = new float[3];
SensorManager.getOrientation(rotationMatrix, orientation);
float azimuth = (float) Math.toDegrees(orientation[0]);
float qiblaRotation = (float) (azimuth - qiblaAngle);
// Putar indikator kiblat di UI
compassView.setRotation(qiblaRotation);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, rotationSensor, SensorManager.SENSOR_DELAY_UI);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
}
Akurasi Lokasi
Untuk hasil yang paling akurat, gunakan koordinat dari GPS perangkat (FusedLocationProviderClient) daripada koordinat statis.