使MyLocationOverlay指南针指向特定位置

时间:2012-06-07 08:11:48

标签: android location compass-geolocation 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);
        }

    }

1 个答案:

答案 0 :(得分:0)

为什么要自己计算“方位/方位角”? MyLocationOverlay持有Method getOrientation()来为您提供方位角。我肯定会保持onSensorChanged不受影响,让MyLocationOverlay为你计算。通常,为了正确绘制您的指南针,您只需拨打enableCompass()

即可