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

时间:2014-06-10 04:24:36

标签: 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);
    }
}

我尝试添加:

    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

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

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

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

1 个答案:

答案 0 :(得分:0)

我通过将目标LatLng存储在属性中解决了该问题。更改标题后,我没有使用 CameraPosition 检索目标,而是使用了存储的目标。这样地图就不会再漂移了。

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