如果您打开 Google map 应用程序,屏幕右上角有一个按钮,您可以按下该按钮将 map 置于您当前位置的中心。然后按钮的图标会发生变化。如果您再次按下相同的按钮, map 会根据您的指南针方向自动旋转。换句话说, map 变得以 self 为中心(而不是以 self 为中心,AKA 总是向上)。
Google 最近推出了适用于 Android 的 map API V2,我当然比旧版本更喜欢它。默认情况下,android maps V2 将包含“center on location”按钮。但是,多次按下它不会启用自动旋转;它只是尝试将 map 再次以您的位置为中心。
有谁知道我可以像谷歌地图应用一样使用 map API v2 自动旋转 map 吗?我必须自己实现这个功能,还是在 API 中,我只是没有看到它?感谢所有帮助。
最佳答案
好的,这就是我认为应该在一年后完成的方式。如果您发现任何问题,请纠正我。
以下大部分代码都处理坐标系之间的差异。我正在使用旋转矢量传感器。来自文档:Y 在设备当前位置与地面相切并指向磁北。
另一方面,在谷歌地图中的方位似乎指向真北。 this page shows how the conversion is done
1) 从您当前的 GPS 位置获取当前磁偏角
@Override
public void onLocationChanged(Location location) {
GeomagneticField field = new GeomagneticField(
(float)location.getLatitude(),
(float)location.getLongitude(),
(float)location.getAltitude(),
System.currentTimeMillis()
);
// getDeclination returns degrees
mDeclination = field.getDeclination();
}
2) 根据偏角和磁北计算方位
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(
mRotationMatrix , event.values);
float[] orientation = new float[3];
SensorManager.getOrientation(mRotationMatrix, orientation);
float bearing = Math.toDegrees(orientation[0]) + mDeclination;
updateCamera(bearing);
}
}
3) 更新 map
private void updateCamera(float bearing) {
CameraPosition oldPos = mMap.getCameraPosition();
CameraPosition pos = CameraPosition.builder(oldPos).bearing(bearing).build();
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(pos));
}
关于android map 自动旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320015/