android - 在 Android 谷歌地图中改变方位会使目标位置漂移

标签 android google-maps geolocation

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

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));

空白行在哪里,但似乎没有什么区别。

我还尝试记住目标位置并在用户手动移动 map 时对其进行更新,然后在 map 的任何更新时将其设置为此类,但这会导致 map 变得“粘性”,用户无法手动滚动它;无论如何,这似乎是一个黑客行为。

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

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

任何想法在不影响其他任何东西的情况下在 map 上进行方位变化(旋转)的最佳方法是什么?

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

最佳答案

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

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

关于android - 在 Android 谷歌地图中改变方位会使目标位置漂移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132843/

相关文章:

android - 手机上的谷歌地图可以有插件吗?

javascript - 如何绘制和椭圆并将其显示在 Google map 上

qt - 设置 Qt Location 以从本地 osm 服务器查询

java - 我想在android中创建一个服务但我的服务没有运行?

android - adb pull pc 指定文件夹中的文件

android - 在 ViewPager fragment 中使用 Google map V2 时崩溃?

api - 地理编码服务

javascript - 如果用户拒绝在 Firefox 中共享地理位置,则永远不会调用函数失败

android - 当我在布局末尾对齐选项卡布局时,布局顶部留下了一个空格

android - 以编程方式更改 R.string 的值?