Android 更改地图视图方向
我想更改OSMdroid MapView方向,使其面向用户要去的方向(使用Android 更改地图视图方向,android,android-mapview,osmdroid,direction,Android,Android Mapview,Osmdroid,Direction,我想更改OSMdroid MapView方向,使其面向用户要去的方向(使用位置计算。在每个onLocation上的上一个用户位置和当前用户位置之间的方位改变了,并转换为正常角度,而不是正北度以东的-180/180°) 这个方向是正确的,我正朝这个方向旋转一个箭头图像,它毫无疑问指向正确的方向。 但是,当我想使用setMapOrientation方法(文档化)将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
,从何处检索?