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 に答える