2012-06-07 51 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