Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改地图视图方向_Android_Android Mapview_Osmdroid_Direction - Fatal编程技术网

Android 更改地图视图方向

Android 更改地图视图方向,android,android-mapview,osmdroid,direction,Android,Android Mapview,Osmdroid,Direction,我想更改OSMdroid MapView方向,使其面向用户要去的方向(使用位置计算。在每个onLocation上的上一个用户位置和当前用户位置之间的方位改变了,并转换为正常角度,而不是正北度以东的-180/180°) 这个方向是正确的,我正朝这个方向旋转一个箭头图像,它毫无疑问指向正确的方向。 但是,当我想使用setMapOrientation方法(文档化)将MapView定向到这些用户方向时,这并不是我想要的效果。当我将地图朝向用户的方向时,箭头图像应该始终指向北方,对吗?因为这是我想要实现的

我想更改OSMdroid MapView方向,使其面向用户要去的方向(使用
位置计算。在每个
onLocation上的上一个用户位置和当前用户位置之间的方位改变了
,并转换为正常角度,而不是正北度以东的-180/180°)

这个方向是正确的,我正朝这个方向旋转一个箭头图像,它毫无疑问指向正确的方向。
但是,当我想使用
setMapOrientation
方法(文档化)将MapView定向到这些用户方向时,这并不是我想要的效果。当我将地图朝向用户的方向时,箭头图像应该始终指向北方,对吗?因为这是我想要实现的目标:使箭头看起来总是指向前方(就像GPS跟踪器:您在GPS上的位置总是由向前的图标表示,我的箭头指向所有方向,因为地图方向错误)

我猜,
osmdroid.MapView方向
需要另一种度数值,但我尝试将其转换回正北度数的东部,但没有成功。或者我的逻辑是完全错误的,它工作正常


如何设置地图视图的方向,使其始终朝向用户的当前方向,使箭头始终指向前方(而不是向后、向右或向左……)

我认为您所指的是使用指南针的地图“正北”方向。为此,您需要设备指南针或传感器侦听器来获取方向,在获取航向后,您需要为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);
            }
        }
    };

我已经解决了这个问题,通过像这样反转度数:

float bearing = location.getBearing();

float t = (360 - bearing);
if (t < 0) {
   t += 360;
}
if (t > 360) {
   t -= 360;
}

//help smooth everything out
t = (int) t;
t = t / 5;
t = (int) t;
t = t * 5;

mapOSM.setMapOrientation(t);
float-bearing=location.getBearing();
浮动t=(360-轴承);
if(t<0){
t+=360;
}
如果(t>360){
t-=360;
}
//帮助解决一切问题
t=(int)t;
t=t/5;
t=(int)t;
t=t*5;
设置映射方向(t);

感谢您的回复,我现在正在实现它,但我有一个问题:
enableCompassHeadUp
变量有什么用途?它检查什么?它只是一个布尔值,用于启用或禁用传感器,以便您可以选择打开/关闭变量
Constance.ROTATION\u SENSITIVITY
,从何处检索?