根据mapbox地图android上的用户导航旋转标记箭头

问题描述

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

我使用的是最新的 MapBox SDK。

我尝试过使用障碍(使用纬度和经度计算),但没有成功。

我不知道如何实现它。

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

enter image description here

解决方法

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

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

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

enter image description here

,

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

2-您需要正确的输出-您可以通过两种方式做到-

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

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

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

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

enter image description here

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...