0

我正在尝试使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);
        }

    }
4

1 回答 1

0

为什么你自己计算你的“方位角”?MyLocationOverlay 持有方法 getOrientation() 为您提供方位角。我绝对会onSensorChanged保持不变,让MyLocationOverlay计算为你。通常要正确绘制指南针,您只需致电enableCompass()

于 2012-06-07T08:24:54.280 回答