欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何使用JavaScript在百度地图API下计算两点之间的位置角度(基于经纬度坐标)

最编程 2024-07-23 10:29:42
...

先贴代码,稍后再来整理

//获得角度的函数
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:***
    }
}