2011-03-29 14 views
10

Belirli bir konuma doğru yönlendirmek için yön bulma sensörünü kullanan bir ok uygulamaya çalışıyorum. Google Rehber, bulduğu her yer için bu oku bir Liste Görünümünde uygular.Yönlendiriciyi belirli bir konuma doğru işaret edecek şekilde kullanma

Azimutu yakalamayı başardım, ama bir yer verildiğinde, ihtiyacım olan açıyı hesaplamak için nasıl devam edeceğimi bilmiyorum. Dahası, dönüşümleri gerçek kuzey ve manyetik kuzeyden yapmam gerekiyor. Böyle bir uygulamaya bir örnek var mı?

Şimdiden teşekkürler.

cevap

22

Bunu çözdüm.

float azimuth = // get azimuth from the orientation sensor (it's quite simple) 
Location currentLoc = // get location from GPS or network 
// convert radians to degrees 
azimuth = Math.toDegrees(azimuth); 
GeomagneticField geoField = new GeomagneticField(
      (float) currentLoc.getLatitude(), 
      (float) currentLoc.getLongitude(), 
      (float) currentLoc.getAltitude(), 
      System.currentTimeMillis()); 
azimuth += geoField.getDeclination(); // converts magnetic north to true north 
float bearing = currentLoc.bearingTo(target); // (it's already in degrees) 
float direction = azimuth - bearing; 

Yönü işaret edecek bir ok veya başka bir şey çizecekseniz, canvas.rotate (yön) seçeneğini kullanın. Negatif bir argümandan geçiyoruz çünkü tuval rotasyonları saat yönünün tersine.

+3

Azimut değerini dereceye dönüştürmeyi basitleştirebilirsiniz: "azimuth = azimuth * 180/(float) Math.PI; – srgtuszy

+4

Bu, Math.toDegrees (azimuth) – Ge3ng

+1

currentLoc.bearingTo (hedef) işlevini kullanmaktan daha kolaydır; hedef parametre nedir ???? – mhdjazmati