javascript – 计算两个GPS坐标之间的罗盘方位问题

前端之家收集整理的这篇文章主要介绍了javascript – 计算两个GPS坐标之间的罗盘方位问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的webapp中,从数据库查询获取 JSON数据响应,其中包括1到n个位置的纬度/经度坐标.我想计算从data [i]位置到当前位置的方位.

我一直在调整代码here,但返回的轴承不正确.

//starting lat/long along with converting lat to rads
var endLat = toRad(location.lat());        
var endLong = location.lng();

//loop over response,calculate new headings for links and add link to array
for(var i=0; i<data.length; i++){

  //this link's lat/long coordinates,convert lat to rads
  var startLat = toRad(data[i].lat);
  var startLong = data[i].lon;

  //get the delta values between start and end coordinates in rads
  var dLong = toRad(endLong - startLong);

  //calculate 
  var y = Math.sin(dLong)*Math.cos(endLong);
  var x = Math.cos(startLat)*Math.sin(endLat)-Math.sin(startLat)*Math.cos(endLat)*Math.cos(dLong);
  var bearing = Math.atan(y,x);
  bearing = (toDeg(bearing) + 360) % 360;

  panoLinks.push({'heading': bearing,'description': data[i].description,'pano': data[i].description});
}

//radian/degree conversions
function toRad(convert){
  return convert * Math.PI/180;
}

function toDeg(convert){
  return convert * 180/Math.PI;
}

使用上面的函数和值

startLat= 43.6822,converts to 0.7623982145146669 radians
startLong= -70.450769

endLat= 43.682211,converts to 0.7623984065008848 radians
endLong= -70.45070

dLong = startLong - endLong,converts to 0.0000011170107216805305 radians

导致罗盘度

bearing= 0.000014910023935499339

这肯定是关闭的.我哪里出错了?

解决方法

尝试一下,我不能为我的生活记住我得到它的地方……
/**
     * Calculate the bearing between two positions as a value from 0-360
     *
     * @param lat1 - The latitude of the first position
     * @param lng1 - The longitude of the first position
     * @param lat2 - The latitude of the second position
     * @param lng2 - The longitude of the second position
     *
     * @return int - The bearing between 0 and 360
     */
    bearing : function (lat1,lng1,lat2,lng2) {
        var dLon = (lng2-lng1);
        var y = Math.sin(dLon) * Math.cos(lat2);
        var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
        var brng = this._toDeg(Math.atan2(y,x));
        return 360 - ((brng + 360) % 360);
    },/**
     * Since not all browsers implement this we have our own utility that will
     * convert from degrees into radians
     *
     * @param deg - The degrees to be converted into radians
     * @return radians
     */
    _toRad : function(deg) {
         return deg * Math.PI / 180;
    },/**
     * Since not all browsers implement this we have our own utility that will
     * convert from radians into degrees
     *
     * @param rad - The radians to be converted into degrees
     * @return degrees
     */
    _toDeg : function(rad) {
        return rad * 180 / Math.PI;
    },

猜你在找的JavaScript相关文章