【问题标题】:Changing bearing in Android Google Maps makes target location drift在 Android 谷歌地图中改变方位会使目标位置漂移
【发布时间】:2014-07-30 17:38:27
【问题描述】:

我正在构建一个 Android 应用程序,其中北指向真北(而不是向上)。我使用传感器框架可以很好地更新方位值,但是当我将它们应用于地图时,每个应用程序上的目标位置都会漂移几米。

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

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

你知道什么是在地图上改变方位(旋转)而不影响其他任何东西的最佳方法吗?

或者,除了我正在做的事情之外,还有其他方法可以实现将其方向更改为始终指向北方的地图吗?

【问题讨论】:

  • 我也遇到过这个问题。你找到解决办法了吗?
  • 不,抱歉,我不记得解决了这个问题。如果您找到解决方案,请在此处发布。
  • 自从被问到这个问题已经有很长一段时间了(现在是 2016 年 3 月结束)。我看到了同样的漂移。有人找到解决方案吗?

标签: android google-maps geolocation


【解决方案1】:

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

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

【讨论】:

  • 你能用例子详细说明一下吗
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多