在Android版Google地图中更改方位会使目标位置偏移

Joh*_*n M 5 android google-maps geolocation

我正在构建一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试添加:

    CameraPosition anotherPosition = new CameraPosition(lastTarget, current.zoom, current.tilt, bearing);
    map.moveCamera(CameraUpdateFactory.newCameraPosition(anotherPosition));
Run Code Online (Sandbox Code Playgroud)

空白行在哪里,但似乎没有区别.

我还试图记住目标位置并在用户手动移动地图时更新目标位置,然后在地图的任何更新时将其设置为此类,但它导致地图变为"粘性",用户无法手动滚动地图; 在任何情况下,它似乎是一个黑客.

我在日志中大致得到这个作为输出(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
Run Code Online (Sandbox Code Playgroud)

这似乎是一些浮点丢失的精度问题,但由于它似乎发生在谷歌地图代码中,我不知道如何解决它.

任何想法什么是在地图上进行轴承更换(旋转)而不影响其他任何事情的最佳方法?

或者,是否有另一种方法来实现一个地图,改变其方向,除了我正在做的事情之外总是指向北方?

小智 0

我通过将目标 LatLng 存储在属性中解决了该问题。当航向改变时,不是从CameraPosition中检索目标我使用存储的目标,这样地图就不会再漂移了。

由于我还在按标题旋转地图时跟踪位置,因此当通知新位置时,必须更新此存储的目标。