2016-11-16 4 views
1

사용자의 위치 정보를 가져 오는 스크립트를 작성하고 Haversine 수식을 사용하여 개체의 위치와 항목 간 거리를 계산하고 거리를 console.log로 계산합니다. 내 질문은 어떻게 가장 가까운 항목 만 console.log 수 있습니까? 누군가가 도와 수 있기를 바랍니다 :) 당신이 거리를 계산하고 잘 보이는 곳에 showDistance()에서지구 위치에 따라 가장 가까운 거리 가져 오기

<!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

는 당신이 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

대단원! 고마워요 데이브, 그랬어 :) – hb8