gpt4 book ai didi

android - 如何在 osmdroid 中将指南针调整到 map

转载 作者:行者123 更新时间:2023-12-05 06:29:24 40 4
gpt4 key购买 nike

如何将指南针的方向与 map 的方向对齐?

我将指南针添加到我的 MapView 并启用 map 旋转,如下所示:

 MapView mapView = findViewById(R.id.mapView);

// Enable & add compass
CompassOverlay compassOverlay = new CompassOverlay(this, mapView);
compassOverlay.enableCompass();
mapView.getOverlays().add(compassOverlay);

// Enable map rotation with gestures
mapView.getOverlays().add(new RotationGestureOverlay(mapView));

现在本地图没有旋转时,向上是北,向右是东等等,指南针工作正常。但是当我用手势旋转 map 时,指南针并没有相应地移动。因此,当设备面朝北方且 map 处于默认旋转状态时,指南针会根据 map 显示北方,这是正确的。但是当我顺时针旋转 90° 时,指南针仍然指向上方,而不是顺时针旋转 90°。

我尝试使用 compassOverlay.setPointerMode(true); 但这只会改变指南针的外观。

最佳答案

在深入研究并考虑 Peter 的回答时,我找到了一个简单的解决方案 (Kotlin):

  1. 创建一个新的 CompassOverlay 实例并覆盖 draw() 方法
val mapNorthCompassOverlay = object: CompassOverlay(context, mapView) {
override fun draw(c: Canvas?, pProjection: Projection?) {
drawCompass(c, -mapView.mapOrientation, pProjection?.screenRect)
}
}
  1. 将叠加层添加到 mapView 的实例叠加层列表中:
mapView.overlays.add(mapNorthCompassOverlay)

就是这样。

说明:drawCompass()是一个 protected 方法,但是我们可以覆盖使用前一个方法获取手机磁力计数据的公共(public)draw()来获取承载方向。由于 drawCompass() 会反转方位数据以在您的 map 上打印,而这不是我们预期的行为,因此在这种情况下,我们将 -mapView.mapOrientation 作为参数传递,如下所示它包含我们 map 北部的信息。此外,此 CompassOverlay 不需要您使用 enableCompass(),这是开始监听传感器方向变化的方法,因此您无需创建伪造 OrientationProvider 以避免您的手机浪费资源。

关于android - 如何在 osmdroid 中将指南针调整到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53519645/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com