Google Maps Javascript - computeHeading和指南针方向来计算面向方向

时间:2015-06-22 09:10:25

标签: javascript google-maps google-maps-api-3 compass direction

对我的currentPosition和destinationPosition使用computeHeading()函数我可以得到返回的角度(t当前介于-180和+180之间)。

heading = google.maps.geometry.spherical.computeHeading(
    currentLocation,
    destinationLocation
);

我也可以使用一个函数返回指南针的方向,返回alpha,它给我从北方的旋转角度。

alpha = null;
//Check for iOS property
if (event.webkitCompassHeading) {
    //window.confirm("iOS device - using webKit instead"); // report back that we are indeed on iOS
    alpha = event.webkitCompassHeading;
}
//non iOS
else {
    alpha = event.alpha;
}

var locationIcon = myLocationMarker.get('icon');
locationIcon.rotation = 360 - alpha;
myLocationMarker.set('icon', locationIcon);

这给了我角度,然后帮我旋转我的图标,这样我就可以看到我是否指出正确的方式

有人能告诉我math / js代码然后得到我面对目的地的方式给我一个返回的结果。我需要知道我是否面向目的地然后我可以看到我是否面对错误的方式等。

我将尝试使用一些网络音频平移来帮助指导人们指出正确的方法。

谢谢

编辑:这是一张可能有助于澄清的图片。我确定这是一个简单的计算,但我无法弄清楚enter image description here

2 个答案:

答案 0 :(得分:2)

计算两个纬度/经度点之间的角度

private double angleFromCoordinate(double lat1, double long1, double lat2,
        double long2) {

    double dLon = (long2 - long1);

    double y = Math.sin(dLon) * Math.cos(lat2);
    double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
            * Math.cos(lat2) * Math.cos(dLon);

    double brng = Math.atan2(y, x);

    brng = Math.toDegrees(brng);
    brng = (brng + 360) % 360;
    brng = 360 - brng; // count degrees counter-clockwise - remove to make clockwise

    return brng;
}

=============================================== ======================

使用GoogleMap apis:

<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false&libraries=geometry"></script>

var point1 = new google.maps.LatLng(lat1, lng1);
var point2 = new google.maps.LatLng(lat2, lng2);
var heading = google.maps.geometry.spherical.computeHeading(point1,point2);

答案 1 :(得分:0)

我认为这只是数学,因为......

diff(Lat)/diff(lng) = tan(alpha)

然后我想你可以弄明白其余的吗?

请注意,由于GPS精度问题,航向可能会发生根本变化。考虑使用compass data和某种算法来简化大纲。