2012-06-07 101 views
0

我正在嘗試使MyLocationOverlay指南針指向特定位置。我想顯示從當前用戶位置到指定位置的方向。到目前爲止,我已經設法計算出一個方向並將其傳遞給MyLocationOverlay。但是指南針箭頭開始亂七八糟地指向不同的位置。有時它指向正確的方向,但通常顯示完全廢話。

有沒有辦法讓指南針像它應該那樣工作?

這是我在我的活動
將MyLocationOverlay指南針指向特定位置

@Override 
    public void onSensorChanged(SensorEvent event) { 
     if(location != null && carOverlay.size() > 0 
       && !map.getUserOverlay().isPointingToNorth()) { 

      float azimuth = event.values[0]; 
      azimuth = azimuth * 180/(float) Math.PI; 
      GeomagneticField geoField = new GeomagneticField(
        Double.valueOf(location.getLatitude()).floatValue(), 
        Double.valueOf(location.getLongitude()).floatValue(), 
        Double.valueOf(location.getAltitude()).floatValue(), 
        System.currentTimeMillis()); 
      azimuth += geoField.getDeclination(); 

      GeoPoint point = carOverlay.getItem(0).getPoint(); 
      Location target = new Location(provider); 
      float lat = (float) (point.getLatitudeE6()/1E6f); 
      float lon = (float) (point.getLongitudeE6()/1E6f); 
      target.setLatitude(lat); 
      target.setLongitude(lon); 

      float bearing = location.bearingTo(target); 
      float direction = azimuth - bearing; 

      map.getUserOverlay().putCompassDirection(direction); 
     } 
    } 

計算方向這是我的自定義覆蓋

@Override 
    protected void drawCompass(Canvas canvas, float bearing) { 
     if(pointToNorth) { 
      super.drawCompass(canvas, bearing); 
     } 
     else { 
      super.drawCompass(canvas, compassDirection); 
     } 

    } 
+0

「有時指向正確的方向,但通常顯示完全廢話。」即使是破損的時鐘也是一天兩次:) –

回答

0

爲什麼你計算出你的「軸承/方位」自己的覆蓋方法? MyLocationOverlay持有Method getOrientation()爲您提供方位角。我會毫不動搖地讓onSensorChanged離開,並讓MyLocationOverlay爲你計算。通常繪製您的指南針正確,您只需撥打enableCompass()

+0

我自己計算方向,因爲我希望指南針指向地圖上的特定覆蓋物項目。基本上,用戶可以切換按鈕以將指南針指向北或地圖上的某個位置。 – droid8421