android - 更改 MapView 方向

标签 android android-mapview osmdroid direction

我想更改 OSMdroid MapView 方向以面向用户前进的方向(使用 Location.bearingTo 在每个 onLocationChanged 上的先前和当前用户位置之间计算, 并转换为正常度数而不是正北度数的 -180/180° 以东)。

这个方向是正确的,我正在朝这个方向旋转一个箭头图像,它一定会指向正确的方向。
但是,当我想使用 setMapOrientation 方法(已记录 here )将 MapView 定向到这些 userDirection 时,这并没有像我希望的那样工作。当我将 map 朝向用户的方向时,箭头图像应该始终指向北方,对吧?因为这是我想要实现的目标:让箭头看起来总是指向前方(就像一个 GPS 跟踪器:你在 GPS 上的位置总是由一个向前的图标表示,我的箭头指向各种方向,因为 map 方向错误)。

我猜 osmdroid.MapView orientation 需要另一种度数值,但我已经尝试转换回真北以东的度数,但没有成功。或者我的逻辑完全错误,但它工作正常。

如何设置 MapView 的方向,使其始终面向用户的当前方向,以便箭头始终指向前方(而不是向后、向右或向左,... )?

最佳答案

我认为您指的是使用罗盘真北的 map 的“真北”方向。为此,您需要设备 Compass 或 Sensor Listener 来获取方向,在获取标题后,您需要为 MapView 设置它。这是非常有帮助的代码段。

private void compassHeadingUp() {

        if(enableCompassHeadUp){
            mSensorManager.registerListener(mySensorEventListener,
                    SensorManager.SENSOR_ORIENTATION,
                    SensorManager.SENSOR_DELAY_FASTEST);
        } else {
            mSensorManager.unregisterListener(mySensorEventListener);
            mDirection = 0;
        }
}

public SensorListener mySensorEventListener = new SensorListener(){

    @Override
    public void onAccuracyChanged(int arg0, int arg1) {

    }

    @Override
    public void onSensorChanged(int sensor, float[] values) {
        synchronized (this) {
            float mHeading = values[0];             
            if(Math.abs(mDirection-mHeading) > Constance.ROTATION_SENSITIVITY){
                mMapView.setMapOrientation(-mHeading);
                mDirection = mHeading;
            }
            Matrix matrix = new Matrix();
            mCompassImageView.setScaleType(ScaleType.MATRIX);
            matrix.postRotate((float) -mHeading, mCompassImageView.getDrawable().getBounds().width()/2, mCompassImageView.getDrawable().getBounds().height()/2);
//Set your Arrow image view to the matrix
mCompassImageView.setImageMatrix(matrix);
            }
        }
    };

关于android - 更改 MapView 方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30344510/

相关文章:

Android map 示例

android - 在android mapview中绘制填充形状

android - 创建室内导航 map

Android 动态壁纸 onOffsetsChanged

java - 如何在 Eclipse 中仅更改 java 修饰 rune 本颜色?

android - 绘制带孔的路径(android)

带有滑动菜单的Android MapView遮挡菜单

android - 从 Android 应用程序以编程方式下载/缓存 osmdroid map

java - MBTiles 文件有大小限制吗?

java - 无法实例化类;没有空构造函数