只是还是那个原因,因为得到的坐标点数据是球面坐标,所以还是要先进行转为平面坐标才好计算,然后通过三角函数tan#$%^&*( 计算后得到两个点之间的角度值。此部分没有太多个性化的逻辑操作,直接参照百度大大的就行了。
/** *在每个点的真实步骤中设置小车转动的角度 *@param{BMap.Point} curPos 起点 *@param{BMap.Point} targetPos 终点 */ this.setRotation = function (curPos, targetPos, em) { var me = this; var deg = 0; curPos = map.pointToPixel(curPos); targetPos = map.pointToPixel(targetPos); if (targetPos.x != curPos.x) { var tan = (targetPos.y - curPos.y) / (targetPos.x - curPos.x), atan = Math.atan(tan); deg = atan * 360 / (2 * Math.PI); if (targetPos.x < curPos.x) { deg = -deg + 90 + 90; } else { deg = -deg; } em._newPointMark.setRotation(-deg); } else { var disy = targetPos.y - curPos.y; var bias = 0; if (disy > 0) bias = -1 else bias = 1 em._newPointMark.setRotation(-bias * 90); } return; }
参考计算方法就得了~~~
值此两个功能的最基础的及计算方法等就这么多,其他的业务逻辑需要的逻辑代码包裹着就是自己的需求实现代码了!
效果图