百度地图自定义折线覆盖物,控制旋转方向

使用百度地图,路线规划是,自定义路线绘制+方向标识。

主要说明:

  1. 调用百度地图web服务API路线规划(为了拿到路线规划的途径点)
  2. 使用Polyline进行路线绘制。
  3. Icon 进行自定义图标;控制图标中心偏移量{anchor:<Size>}
  4. Marker进行覆盖物叠加:
    new BMap.Marker(<Point>,{
    	icon:<Icon>,
    	rotation:<Number>
    });
    
计算角度

主要的问题在于如何计算,根据起至终点坐标(经度、纬度)值差,构建三角形,计算邻边角角度。

初始图标的指向是西向东
在这里插入图片描述

经纬度:南纬->北纬递增;西经->东经 递增

在这里插入图片描述

  1. 角度计算

    	// 确定方向,用于旋转图标角度
    	let angle = function (start,end) {
    		// 通过 a、b 确定角度所处的象限
    	    let a = start.lng - end.lng,
    	        b = start.lat - end.lat;
    	    // 
    	    let a_c = Math.abs(a),
    	        b_c = Math.abs(b);
    	    // 获取得三角形的斜边 Math.hypot();
    	    let c = Math.hypot(a_c,b_c);
    	    // 计算弧度
    	    let radina = Math.acos(a_c/c);
    	    // 计算角度
    	    let angleVal = Math.floor(radina*180/Math.PI);
    	    // 处理最终需要旋转的角度
    	    if(a > 0){
    	        // 第二、三象限
    	        if(b>0){
    	            // 三
    	            angleVal = 90 + 90 - angleVal;
    	        }else {
    	            angleVal = -180 + angleVal;
    	        }
    	    }else{
    	        // 一、四象限
    	            if(b>0){
    	            // 四
    	            angleVal = angleVal;
    	        }else{
    	            // 一
    	            angleVal = - angleVal;
    	        }
    	    }
    	    return angleVal;
    	};
    
  2. 自定义图标、添加覆盖物

    // 挑选坐标点作为导向指标
    let icon = new BMap.Icon(contextPath+"/img/guide.png",new BMap.Size(30,30),{
        anchor:new BMap.Size(15,15)
    });
    // 添加覆盖物
    let marker = new BMap.Marker(points[mid],{icon:icon,rotation:angle(startP,endP)});
    map.addOverlay(marker);
    
  3. 实现效果:
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heroboyluck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值