经过广泛的研究和有趣的Google学习地图api的学习,我正在构建一个数字天线地图应用程序。此时,项目计划的下一步是构建谷歌地图的内存映射复制,该地图根据用户地址的输入定位数字电视台。所以,我使用这个数学代码来表示谷歌地图中心的方位和数据库结果集中的纬度/经度点。
我的问题是:我如何完成数学计算以度数表示轴承?
此代码是返回以下数组结果集的数学运算符:
1.21
1.10
1.10
1.10
1.10
2.62
-0.29
-1.17
0.12
3.04
var y = Math.sin(longitude-center.lng()) * Math.cos(latitude);
var x = Math.cos(center.lat())*Math.sin(latitude) - Math.sin(center.lat())*Math.cos(latitude)*Math.cos(longitude-center.lng());
var bearing = (Math.atan2(y, x)).toFixed(2);
我的计算中似乎缺少一些东西。 db表将经度值保持为负数,以表示地球的西上象限。
任何完成我数学的建议都会节省一百万个nuerons,我已经烧掉了一万亿。
将度数考虑为弧度建议,我修改了javascript代码:
var radLat1 = center.lat() * Math.PI / 180;
var radLat2 = latitude * Math.PI / 180;
var radLng1 = center.lng() * Math.PI / 180;
var radLng2 = longitude * Math.PI / 180;
var y = Math.sin(radLng2- radLng1) * Math.cos(radLng2);
var x = Math.cos(radLat1)*Math.sin(radLat2) - Math.sin(radLat1)*Math.cos(radLat2)*Math.cos(radLng2-radLng1);
var bearing = (Math.atan2(y, x)).toFixed(2);
测试项目网站的网址:click here
页面底部的div是从2个数组返回的结果集,第一个保持距离,第二个保持轴承测量。
答案 0 :(得分:6)
Google地图以度为单位返回坐标。当然,trig函数需要弧度。所以你首先要转换为弧度:
function deg_to_rad(degrees) {
return degrees * Math.PI / 180;
}
您的数学看起来正在尝试the Haversine formula。我找到了一个javascript实现here供您检查代码。
您可以针对the FCC's DTV engineering maps检查结果。
答案 1 :(得分:4)
在赛斯的帮助下,使用我早晨的大脑(是的,我是中年人,早上我更聪明)。
我正在研究的here和Seth提到的链接是关键。我在博客条目中使用了js文件中的代码,并将代码从oo javascript概念转换为内联运行的脚本。
这是我的解决方案:
var lat1 = center.lat();
var lon1 = center.lng();
var lat2 = latitude;
var lon2 = longitude;
lat1 = lat1 * Math.PI / 180;
lat2 = lat2 * Math.PI / 180;
var dLon = (lon2-lon1) * Math.PI / 180;
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 bearing = Math.atan2(y, x) * 180 / Math.PI;
if (bearing < 0){
bearing = bearing + 360;
}
bearing = bearing.toFixed(0);
stationDistance.push(distance.toFixed(1));
stationBearing.push(bearing);
我正在运行演示谷歌地图here。
感谢您的帮助,现在我可以转到逻辑代码,在this url为我的客户的客户推荐正确的产品。
stackoverflow ROCKS ....
罗伯特