【发布时间】:2017-09-04 09:00:45
【问题描述】:
我喜欢创建一个网站,该网站的功能应该是阅读您当前的标题。
【问题讨论】:
-
嗨,乔纳斯!我已经编辑了您的答案以直接显示屏幕截图并使其总体上更整洁。请确保我没有以任何方式意外更改您问题的含义,如果您认为有任何需要修复的内容,请随时撤消我的编辑和/或进一步编辑您的问题。谢谢,欢迎来到 Stack Overflow!
标签: javascript
我喜欢创建一个网站,该网站的功能应该是阅读您当前的标题。
【问题讨论】:
标签: javascript
我假设您已经知道如何 use the JavaScript geolocation API 以及如何在 JavaScript 中呈现旋转箭头,并且只需要帮助计算箭头应旋转的角度。这个角度只是目标点与您所在位置的azimuth 角度与设备的罗盘方向之间的差异。
要近似计算目标的方位角,您可以使用以下公式(改编自上面链接的维基百科文章):
var dx = Math.sin(lon2 - lon1);
var dy = Math.cos(lat1)*Math.tan(lat2) - Math.sin(lat1)*Math.cos(lon2 - lon1);
var azimuth = Math.atan2(dx, dy); // north = 0, increases clockwise
其中lat1和lon1是我们当前的纬度和经度,lat2和lon2是目标的纬度和经度,azimuth是从我们当前看到的目标的方位角位置,从正北顺时针方向测量。
(这个公式只是近似值,因为它假设地球是一个球体,但与其他误差源(例如不准确的位置和设备方向读数)相比,它引入的误差应该可以忽略不计。如果你真的想消除甚至不过,这个小错误,您可以使用更复杂的公式也可以计算WGS84 球体上的方位角given in the Wikipedia article。)
请注意,上述公式的所有输入都需要在radians 中给出,因为这是JavaScript trigonometric functions 所期望的。通常,纬度和经度以度为单位,因此您需要先将它们乘以Math.PI / 180 将它们转换为弧度。上面计算的结果也是弧度;要将其转换为度数,您需要将 azimuth 值与 180 / Math.PI 相乘。
一旦您知道了目标的方位角和the compass heading of the device,您可以简单地从前者中减去后者,以获得您需要旋转箭头以使其指向目标的角度。
【讨论】: