在我的webapp中,从数据库查询中获取
JSON数据响应,其中包括1到n个位置的纬度/经度坐标.我想计算从data [i]位置到当前位置的方位.
//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; },