您的位置:首页 > Web前端 > JavaScript

已知两点经纬度(百度地图),用js求解两点之间的角度

2016-08-31 00:00 1606 查看
摘要: 百度地图web端提供了两点之间的连线功能,却无法向移动点那样添加纹理,也就没法表示两点之间的方向.但是好在它为每一个Marker提供了角度参数.在已知两点经纬度的情况下,不能用简单的勾股定理来计算两点的角度,根据大家的方法,用js实现之

先贴代码,稍后再来整理

//获得角度的函数
function getAngle(n,next){
var ret
var w1 = n.point.latitude/180 * Math.PI
var j1 = n.point.longitude/180 * Math.PI

var w2 = next.point.latitude/180 * Math.PI
var j2 = next.point.longitude/180 * Math.PI

ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2);
ret = Math.sqrt(ret);

// var temp = Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
var temp = Math.sin((j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
console.log(temp)
ret = ret/temp;

ret = Math.atan(ret) / Math.PI * 180 ;
ret += 90;

// 这里用如此臃肿的if..else是为了判定追踪单个点的具体情况,从而调整ret的值
if(j1-j2 < 0){
// console.log('j1<j2')
if(w1-w2 < 0){
// console.log('w1<w2')
ret;
}else{
// console.log('w1>w2')
ret = -ret+180;
}
}else{
// console.log('j1>j2')
if(w1-w2 < 0){
// console.log('w1<w2')
ret = 180+ret;
}else{
// console.log('w1>w2')
ret = -ret;
}
}
return ret ;
}

// 使用
for(var i=item.point.length;i > 0;i--){
~function(i){//这里不需要用闭包,笔者手滑
var n =  item.mapLineDetail[i];
var next = item.mapLineDetail[i-1]
next.rotate = getAngle(next,n)
}(i);
};

item是一个对象,item.pointer是一个数组,每一项的数据结构如下
n = {
point:{
latitude:***,
longitude:***
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: