Java 根据mapbox maps android上的用户导航旋转标记(箭头)

Java 根据mapbox maps android上的用户导航旋转标记(箭头),java,android,mapbox-android,mapbox-marker,Java,Android,Mapbox Android,Mapbox Marker,我正在开发一个应用程序,其中我必须根据用户导航旋转箭头 我正在使用最新的Mapbox SDK 我尝试过使用屏障(使用lat和long进行计算),但没有成功 我不知道如何才能做到这一点 它(箭头标记)应在预定义的多边形路径上导航 1-首先需要输入-需要从location对象获取数据 2-您需要正确的输出-您可以通过两种方式完成- a。如果使用png图标,则可以为每10度(36个箭头)创建一个箭头,并在当前方向角与旧方向角不同的情况下使用正确的图标更新标记 b。更好的选择,但我不知道这是否有效:ma

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

我正在使用最新的Mapbox SDK

我尝试过使用屏障(使用lat和long进行计算),但没有成功

我不知道如何才能做到这一点

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


1-首先需要输入-需要从location对象获取数据

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

a。如果使用png图标,则可以为每10度(36个箭头)创建一个箭头,并在当前方向角与旧方向角不同的情况下使用正确的图标更新标记

b。更好的选择,但我不知道这是否有效:mapbox的标记有选项。但在安卓系统中,Mapbx移动到,另请参见

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

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


3-还有一件事-您可能还想获得的输入,以了解何时轴承精度不够高,并向用户提供指示。

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

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;
    }
注意:箭头应指向向上方向,如下图所示。 如果不是,则必须按照箭头方向设置方位+/-