2013-06-30 4 views
1

У меня есть список клиник, которые извлекаются и кэшируются на клиентах. Перечень клиники содержитпоиск ближайших местоположений (долгота и широта) с использованием jquery

  • долготы
  • широта
  • clinicname

Мне нужно найти ближайшее место клиники с помощью JQuery. Поскольку я работаю над jQuery mobile, требования клиента явно указывают, что мне нужно работать с кэшированными данными, а не запрашивать базу данных.

Есть ли способ реализовать Геометрический поиск с помощью jquery?

Thanks

+1

Возможно, это поможет узнать, сколько записей содержится в этом кешированном списке? Допустимо ли перебирать весь список? – nif

+0

в списке квеста не будет содержаться слишком много предметов .500 максимум – Paras

+0

Распространены ли они по всему миру (в этом случае вам нужно вычислить расстояния с большим кругом) или относительно небольшую область, не слишком близкую к полюсам N или S , в этом случае вы можете пройти простым евклидовым расстоянием (sqrt (dx^2 + dy^2) с коррекцией широты? Насколько он вам нужен? – Spacedman

ответ

2

Я только что сделал это для вас. Надеюсь, это то, что вы ищете.

Он запрашивает местонахождение человека и получает расстояние от него до точки (где бы ни находились клиники) (первые 4 функции). Затем он получает тот, у кого есть кратчайшее расстояние (функция shortestDistance).

var lat1 = "me"; //enter "me" to request location 
var lon1 = 0; 

var lat2 = NUMBERSHERE; //target's latency 
var lon2 = NUMBERSHERE; //target's longitude 
var name2 = "a"; 

var lat3 = NUMBERSHERE; //target's latency 
var lon3 = NUMBERSHERE; //target's longitude 
var name3 = "b"; 

var places = 2; 

getDistance(lat1,lon1,lat2,lon2,name2); 
getDistance(lat1,lon1,lat3,lon3,name3); 

function getDistance(lat1,lon1,lat2,lon2,name2){ 
     if (lat1 == "me"){ 
       getLocation(lat2,lon2,name2); 
       latto = lat2; 
     }else{ 
       getDistancefrom(lat1,lon1,lat2,lon2,name2); 
     } 
} 

function getLocation(lat2,lon2,name2){ 
     if (navigator.geolocation){ 
       navigator.geolocation.getCurrentPosition(getDistanceFromMe); 
       function getDistanceFromMe(position){ 
         x = position.coords.latitude; 
         y = position.coords.longitude; 
         getDistancefrom(x,y,lat2,lon2,name2); 
       } 
     }else{ //geolocation not supported 
     } 
} 



function toRad(value){ 
     return value * Math.PI/180; 
} 

function getDistancefrom(lat1,lon1,lat2,lon2,name2){ 
     R = 6371; //earth radius in km 
     dLat = toRad(lat2-lat1); 
     dLon = toRad(lon2-lon1); 
     lat1 = toRad(lat1); 
     lat2 = toRad(lat2); 

     a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * 
Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
     c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
     d = R * c; //distance from YOU or Lat1 & Lon1 to Lat2 & Lon2 
     shortestDistance(name2,d) 
} 

i = 0; 
rdistance = "" 
function shortestDistance(name,distance){ 
       if (rdistance == '') 
         rdistance = distance; 
       if (distance < rdistance){ 
         rname = name; 
         rdistance = distance; 
       } 
       i++; 
       if (i == places){ 
         alert(rname); //nearest place 
       } 
} 

Расстояние формула из одной точки в другую берется из Haversine примера, который был сделан с JavaScript.

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