android map (google map ,百度 ,高德 )在路线 上画箭头

 android  map  (google map ,百度 ,高德 )在路线 上画箭头!

其实分为2步骤: 算角度,画箭头marker ,marker 画在路线两个点的中点

public void drawArrow(List<LatLng> list) {
    LogUtils.show(TAG, "开始画箭头");
    if (list == null || list.size() <= 1) {
        LogUtils.show(TAG, "开始画箭头------失败");
        return;
    }
    LogUtils.show(TAG, "开始画箭头------失满足条件");
    for (int i = 1; i < list.size(); i++) {
        double lat1 = list.get(i - 1).latitude;
        double lng1 = list.get(i - 1).longitude;
        double lat2 = list.get(i).latitude;
        double lng2 = list.get(i).longitude;
        double lat = (lat1 + lat2) / 2;
        double lng = (lng1 + lng2) / 2;
        LatLng modLat = new LatLng(lat, lng);
        double brng = computeAzimuth(new LatLng(lat1, lng1), new LatLng(lat2, lng2));
        MarkerOptions marker = new MarkerOptions().position(modLat);
        marker.anchor(0.5f, 0.5f);
        marker.icon(BitmapDescriptorFactory.fromResource(R.mipmap.line_arrow));
        marker.rotation((float) brng);
        marker.flat(true);
        mMap.addMarker(marker);
        LogUtils.show(TAG, "开始画箭头------箭头-- " + i + "角度为  " + brng);
    }

}


// 计算方位角,正北向为0度,以顺时针方向递增
private double computeAzimuth(LatLng la1, LatLng la2) {
    double lat1 = la1.latitude, lon1 = la1.longitude, lat2 = la2.latitude,
            lon2 = la2.longitude;
    double result = 0.0;

    int ilat1 = (int) (0.50 + lat1 * 360000.0);
    int ilat2 = (int) (0.50 + lat2 * 360000.0);
    int ilon1 = (int) (0.50 + lon1 * 360000.0);
    int ilon2 = (int) (0.50 + lon2 * 360000.0);

    lat1 = Math.toRadians(lat1);
    lon1 = Math.toRadians(lon1);
    lat2 = Math.toRadians(lat2);
    lon2 = Math.toRadians(lon2);

    if ((ilat1 == ilat2) && (ilon1 == ilon2)) {
        return result;
    } else if (ilon1 == ilon2) {
        if (ilat1 > ilat2)
            result = 180.0;
    } else {
        double c = Math
                .acos(Math.sin(lat2) * Math.sin(lat1) + Math.cos(lat2)
                        * Math.cos(lat1) * Math.cos((lon2 - lon1)));
        double A = Math.asin(Math.cos(lat2) * Math.sin((lon2 - lon1))
                / Math.sin(c));
        result = Math.toDegrees(A);
        if ((ilat2 > ilat1) && (ilon2 > ilon1)) {
        } else if ((ilat2 < ilat1) && (ilon2 < ilon1)) {
            result = 180.0 - result;
        } else if ((ilat2 < ilat1) && (ilon2 > ilon1)) {
            result = 180.0 - result;
        } else if ((ilat2 > ilat1) && (ilon2 < ilon1)) {
            result += 360.0;
        }
    }
    return result;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于2D到2.5D坐标转换,可以使用Free Map插件来实现。以下是在百度地图和高德地图中获取坐标点、围栏、路线和地理围栏的步骤: 在百度地图中获取坐标点: 1. 打开百度地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,右键单击地图上的点,选择“添加标注”。 3. 在弹出的窗口中,可以看到该位置的经纬度坐标。 在高德地图中获取坐标点: 1. 打开高德地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,右键单击地图上的点,选择“标记”。 3. 在弹出的窗口中,可以看到该位置的经纬度坐标。 在百度地图中获取围栏和路线: 1. 打开百度地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,点击左上角的“测距”按钮。 3. 在地图上单击鼠标左键,依次绘制围栏或路线。 4. 绘制完成后,可以看到围栏或路线的长度和面积,也可以导出为KML或GPX格式的文件。 在高德地图中获取围栏和路线: 1. 打开高德地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,点击左上角的“测距”按钮。 3. 在地图上单击鼠标左键,依次绘制围栏或路线。 4. 绘制完成后,可以看到围栏或路线的长度和面积,也可以导出为KML或GPX格式的文件。 在百度地图中获取地理围栏: 1. 打开百度地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,点击左上角的“围栏”按钮。 3. 在弹出的窗口中,选择“地理围栏”选项。 4. 在地图上单击鼠标左键,依次绘制地理围栏。 5. 绘制完成后,可以看到地理围栏的范围和参数设置。 在高德地图中获取地理围栏: 1. 打开高德地图官网,在搜索框中输入要查找的位置。 2. 找到位置后,点击左上角的“围栏”按钮。 3. 在弹出的窗口中,选择“地理围栏”选项。 4. 在地图上单击鼠标左键,依次绘制地理围栏。 5. 绘制完成后,可以看到地理围栏的范围和参数设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值