“我当前的地理位置”和其他坐标之间的计算

Posted

技术标签:

【中文标题】“我当前的地理位置”和其他坐标之间的计算【英文标题】:Calculation between “my current geolocation” and other coordinates 【发布时间】:2013-10-20 14:01:09 【问题描述】:

如何计算“我当前的地理位置”(我使用 navigator.geolocation.watchPosition 获得的坐标)与同时说 10 个其他(固定)坐标之间的距离?

我想跟踪距离,所以如果“我当前的地理位置”在一个特定半径范围内,坐标 ==> 就会发生惊人的事情。

我可以使用Haversine 距离公式解决这个问题吗?

所有计算都将在较小的区域(城市)内进行,因此我需要以米而不是公里为单位获得结果。

感谢您的宝贵时间和意见!

/a.

【问题讨论】:

【参考方案1】:

在赤道坐标中的小数点后 5 位 (0.00001) = 1.1057 米纬度和 1.1132 米经度。

随着坐标从赤道移动到两极,经度值减小。

学位|纬度 |经度 ------------------------------ 0° | 1.1057 米 |1.1132 米 15° | 1.1064 米 |1.0755 米 30° | 1.1085 米 |0.9648 米 45° | 1.1113 米 |0.7884 米 60° | 1.1141 米 |0.5580 米 75° | 1.1161 米 |0.2890 米 90° | 1.1169 米 |0.0000 米

如果您的距离很小,您可以使用毕达哥拉斯校正纬度或使用Haversine。

以下代码使用Haversine

var lat1 =55.00001;//Point 1 nearest
var lng1 =-2.00001  ; 
//var lat1 =55.00002;//Point 2 nearest
//var lng1 =-2.00002    ; 

//Array of points
var coordArray = [[55.00000,-2.00000],[55.00003,-2.00003],[55.00006,-2.00006],[55.00009,-2.00009],[55.00012,-2.00012]];

function toRad(Value) 
    /** Converts numeric degrees to radians */
    return Value * Math.PI / 180;


function Round(Number, DecimalPlaces) 
    return Math.round(parseFloat(Number) * Math.pow(10, DecimalPlaces)) / Math.pow(10, DecimalPlaces);

function haversine(lat1,lat2,lng1,lng2)
    rad = 6371000; // meters
    deltaLat = toRad(lat2-lat1);
    deltaLng = toRad(lng2-lng1);
    lat1 = toRad(lat1);
    lat2 = toRad(lat2);
    a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) + Math.sin(deltaLng/2) * Math.sin(deltaLng/2) * Math.cos(lat1) * Math.cos(lat2); 
    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return  rad * c;

function calculate()
    var result = haversine(lat1,coordArray [0][0],lng1,coordArray [0][1]);
    var index = 0;
    for (var i=1;i<coordArray.length;i++) 
        var ans = haversine(lat1,coordArray [i][0],lng1,coordArray [i][1]);
        if (ans < result)
            result = ans;
            index++;
           

    
    document.write("Result = " +Round(result,2)+ " Meters Point = "+ (index+1));

见Fiddle

【讨论】:

它是否完全回答了您的问题??【参考方案2】:

harvesine 公式只是一个特殊的公式。但它适用于你的问题。如果你想要更好的结果,你可以试试 vincenty 公式。它使用椭球地球。只需遍历每个点并计算与它的距离。

【讨论】:

或者我可以使用 Google Maps API 来实现相同的功能吗? 什么意思?有谷歌方向 API。如果这就是你的意思,那么是的。

以上是关于“我当前的地理位置”和其他坐标之间的计算的主要内容,如果未能解决你的问题,请参考以下文章

如何计算一组 x、y 坐标和位置变量之间的距离?

计算我的位置与多个位置之间的距离

计算 2 个坐标 iphone 之间的距离 - 最佳实践

计算当前坐标和坐标列表之间的距离

用起始位置和距离计算新坐标

计算Excel表格中两个地方之间的地理坐标距离