【问题标题】:Get nearest distance based on geolocation根据地理位置获取最近距离
【发布时间】:2016-11-16 12:35:23
【问题描述】:

我编写了一个脚本来获取用户的地理位置,使用 Haversine 公式计算位置和对象中的项目之间的距离,然后 console.log 距离。我的问题是我怎样才能 console.log 只有最近的项目?希望有人可以提供帮助:)

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>

<p id="demo"></p>

<script>

var obj = [

{
    name:"location1",
    lat:60.413750, 
    long:5.322036
},
{
    name:"location2",
    lat:59.749054, 
    long:10.203781
},
{
    name:"location3",
    lat:59.286271, 
    long:11.109228
},
{
    name: "location4",
    lat:59.913869, 
    long:10.752245
}
];



var x = $("#demo");
var hblat ;
var hblong ;
var distance ;


if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showDistance);
} else {
    x.html("Geolocation is not supported by this browser.");
}


function showDistance(position) {
    hblat = position.coords.latitude;
    hblong = position.coords.longitude;

    $.each(obj, function(key, value){
        distance = hbdistance(hblat, hblong, value.lat, value.long, 'K');

        console.log(Math.round(distance*1000)/1000);  
    }); 
}


function hbdistance(lat1, lon1, lat2, lon2, unit) {
        var radlat1 = Math.PI * lat1/180
        var radlat2 = Math.PI * lat2/180
        var radlon1 = Math.PI * lon1/180
        var radlon2 = Math.PI * lon2/180
        var theta = lon1-lon2
        var radtheta = Math.PI * theta/180
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist)
        dist = dist * 180/Math.PI
        dist = dist * 60 * 1.1515
        if (unit=="K") { dist = dist * 1.609344 }
        if (unit=="N") { dist = dist * 0.8684 }
        return dist
}

</script>


</body>
</html>

【问题讨论】:

    标签: javascript geolocation haversine


    【解决方案1】:

    showDistance() 中,您有一个each 块,您可以在其中计算距离并且看起来正确。您甚至还可以将它们记录到控制台,所以我们就快到了。

    让我们在这里使用一个简单的解决方案并建立一个距离数组:

    function showDistance(position) {
        hblat = position.coords.latitude;
        hblong = position.coords.longitude;
        var distances = []; // Array to store distances
        $.each(obj, function(key, value){
            distance = hbdistance(hblat, hblong, value.lat, value.long, 'K');
            distances.push(distance); // Add our distance to the array
        }); 
    
        var min = Math.min.apply(Math, distances); // Get minimum value
    
        console.log(min); // Log minimum value
    }
    

    您可以在此处查看另一篇解释从数组中获取最小值的 SO 帖子:Obtain smallest value from array in Javascript?

    希望有帮助!

    【讨论】:

    • 太棒了!非常感谢戴夫,做到了:)
    猜你喜欢
    • 2012-09-21
    • 2013-06-07
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多