2012-06-13 2 views
0

У меня есть этот код javascript, который берет список мест и переупорядочивает элементы списка в соответствии с местоположением пользователей. как я могу изменить код так, чтобы он отображал только местоположения в окрестности 1KM, а не просто переупорядочивал весь список.Знание местоположения

<script type="text/javascript"> 
$(document).bind("mobileinit", function() { 
$.mobile.ajaxEnabled = false; 
}); 
</script> 
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script> 
<script> 
function findMe() { 
if (navigator.geolocation != undefined) { 
navigator.geolocation.watchPosition(onFound, onError); 
} 
} 
function onFound(pos) { 
var userLat = pos.coords.latitude; 
var userLong = pos.coords.longitude; 
$('ol li').each(function (index) { 
var locationLat = $(this).find('.lat').html(); 
var locationLong = $(this).find('.long').html(); 
var distance = getDistance(userLat, locationLat, userLong, locationLong); 
$(this).data("distance", distance); 
}) 

reOrder(); 
} 

function onError(pos) { 
alert("Something Went wrong"); 
} 

function reOrder() { 
$('ol li').sort(sortAlpha).appendTo('ol'); 
} 

function sortAlpha(a, b) { 
return $(a).data('distance') > $(b).data('distance') ? 1 : -1; 
}; 

function getDistance(lat1, lat2, lon1, lon2) { 
var R = 6371; // km 
var d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + 
Math.cos(lat1) * Math.cos(lat2) * 
Math.cos(lon2 - lon1)) * R; 
return d; 

}; 
</script> 

<style> 
ol .long, ol .lat 
{ 
display: none; 
} 
</style> 

ответ

0

Вы можете написать что-то вроде этого:

function filterList(){ 
    $('ol li').each(function(){ 
     if($(this).data('distance') > 1){ 
     $(this).remove(); 
     } 
    }); 
} 

Вместо вышеуказанного раствора вы можете сделать следующее?

function onFound(pos) { 
    var userLat = pos.coords.latitude; 
    var userLong = pos.coords.longitude; 
    $('ol li').each(function (index) { 
     var locationLat = $(this).find('.lat').html(); 
     var locationLong = $(this).find('.long').html(); 
     var distance = getDistance(userLat, locationLat, userLong, locationLong); 
     if(Math.ceil(distance)>1){ 
     $(this).remove(); 
     } 
     else{ 
     $(this).data("distance", distance); 
     } 
    }); 
reOrder(); 
} 

Вы можете удалить функцию filterList. Надеюсь, теперь это сработает.

+0

спасибо. Где в коде я вставляю эту функцию – dbreezio

+0

Вы можете использовать эту функцию в любом месте, но вы должны вызвать эту функцию вместо reOrder – emphaticsunshine

+0

Я пробовал эту функцию вместо reOrder, но она не работает. есть ли что-нибудь, что вы, возможно, знаете, неверно. – dbreezio

Смежные вопросы