Lewati ke konten utama

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​

NameTypeDescription
latitudedoubleLintang lokasi pengguna (dalam derajat)
longitudedoubleBujur lokasi pengguna (dalam derajat)

Returns​

Nilai double berupa sudut 0–360 derajat, diukur searah jarum jam dari arah Utara.

NilaiArah
0 / 360Utara
90Timur
180Selatan
270Barat

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.