【问题标题】:Rotate marker(arrow) as per user navigation on mapbox maps android根据mapbox地图android上的用户导航旋转标记(箭头)
【发布时间】:2021-05-08 20:29:51
【问题描述】:

我正在开发一个必须根据用户导航旋转箭头的应用程序。

我正在使用最新的 Mapbox SDK。

我尝试过使用障碍(使用 lat & long 计算)但未能成功。

我不知道如何实现它。

它(箭头标记)应该在预定义的多边形路径上导航。

【问题讨论】:

    标签: java android mapbox-android mapbox-marker


    【解决方案1】:

    我使用以下方法成功计算方位并根据用户导航旋转箭头:

    float bearingBetweenLocations(LatLng latLng1, LatLng latLng2) {
            double PI = 3.14159;
            double lat1 = latLng1.getLatitude() * PI / 180;
            double long1 = latLng1.getLongitude() * PI / 180;
            double lat2 = latLng2.getLatitude() * PI / 180;
            double long2 = latLng2.getLongitude() * PI / 180;
            double dLon = (long2 - long1);
            double y = Math.sin(dLon) * Math.cos(lat2);
            double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
                    * Math.cos(lat2) * Math.cos(dLon);
            double brng = Math.atan2(y, x);
            brng = Math.toDegrees(brng);
            brng = (brng + 360) % 360;
    
            return (float) brng;
        }
    

    注意:箭头的头部应指向上方,如下图所示。 如果不是,则必须按照箭头方向设置方位 +/-。

    【讨论】:

      【解决方案2】:

      1- 首先您需要输入 - 您需要从位置对象中获取 getBearing()

      2- 你需要正确的输出 - 你可以通过 2 种方式做到这一点 -

      一个。如果您使用 png 图标,您可以每 10 度创建一个箭头(36 个箭头),如果当前方位与旧方位不同,则使用正确的图标更新标记。

      b.更好的选择,但我不知道这是否有效:mapbox 的标记有 options.rotation 选项。但在 android 中,Mapbx 移至Mapbox annotation plugin,另见here

      SymbolManager 有一个函数 setIconRotationAlignment。所以如果你可以使用这个类,我相信你可以通过方位设置图标的旋转。

      您还可以在this demo 中看到选项之一是“将图标旋转设置为 45”

      3- 还有一件事 - 您可能还需要输入 getBearingAccuracyDegrees 以了解您何时没有足够好的方位精度,并向用户提供指示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多