有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java旋转标记(箭头)根据mapbox maps 安卓上的用户导航

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

我正在使用最新的Mapbox SDK

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

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

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

enter image description here


共 (2) 个答案

  1. # 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;
        }
    

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

    enter image description here

  2. # 2 楼答案

    1-首先需要输入-需要从location对象获取getBearing()

    2-你需要正确的输出-你可以通过两种方式实现-

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

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

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

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

    enter image description here

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