2016-11-16 192 views
1

我做了一個腳本,獲取用戶的地理位置,使用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> 

回答

0

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?

希望幫助!

+1

太棒了!非常感謝Dave,它做到了:) – hb8