我正在构建一个Android应用程序,其中north指向真北(而不是向上)。我使用传感器框架使轴承值更新得非常好,但是当我将它们应用到地图上时,目标位置会在每个应用程序上漂移几米。
private void rotateCameraTo(float bearing) {
CameraPosition current = map.getCameraPosition();
LatLng lastTarget = current.target;
CameraPosition position = new CameraPosition(current.target, current.zoom, current.tilt, bearing);
map.moveCamera(CameraUpdateFactory.newCameraPosition(position));
double distance = distanceTo(map.getCameraPosition().target, lastTarget);
if (distance > 0) {
Log.d(TAG, "Target moved: " + distance);
}
}
我尝试添加:
CameraPosition anotherPosition = new CameraPosition(lastTarget, current.zoom, current.tilt, bearing);
map.moveCamera(CameraUpdateFactory.newCameraPosition(anotherPosition));
空白行,但似乎没有区别。
我还尝试记住目标位置,并在用户手动移动地图时更新目标位置,然后在地图的任何更新时将其设置为此目的,但这会导致地图变得“粘”。用户无法手动滚动的地方;在任何情况下,它似乎是一个黑客。
我在日志中大致得到这个作为输出(distanceTo以米为单位返回Haversine公式结果):
06-10 05:13:24.905 D/MapsFragment﹕ Target moved: 10.573359329046834
06-10 05:13:24.925 D/MapsFragment﹕ Target moved: 10.573379953568864
06-10 05:13:24.925 D/MapsFragment﹕ Target moved: 10.580972456831576
这似乎是一些浮点丢失的精度问题,但由于它似乎发生在谷歌地图代码中,我不知道如何解决它。
在地图上进行轴承更换(旋转)的最佳方法是什么,而不影响其他任何事情?
或者,是否有其他方法可以实现一个地图,该地图会改变其方向,除了我正在做的事情之外总是指向北方?
答案 0 :(得分:0)
我通过将目标LatLng存储在属性中解决了该问题。更改标题后,我没有使用 CameraPosition 检索目标,而是使用了存储的目标。这样地图就不会再漂移了。
由于我还在通过标题旋转地图时跟踪位置,因此当通知新位置时,必须更新此存储的目标。