我想更改 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/