我有一个在客户端获取并缓存的诊所列表。诊所列表包含
- 经度
- 纬度
- 诊所名称
我需要使用 jquery 找到最近的诊所位置。由于我正在使用 jquery mobile,因此客户端要求明确指出我需要处理缓存的数据而不是查询数据库。
有没有办法用 jquery 实现地理邻近搜索?
谢谢
我有一个在客户端获取并缓存的诊所列表。诊所列表包含
我需要使用 jquery 找到最近的诊所位置。由于我正在使用 jquery mobile,因此客户端要求明确指出我需要处理缓存的数据而不是查询数据库。
有没有办法用 jquery 实现地理邻近搜索?
谢谢
我刚为你做了这个。希望这是您正在寻找的。
它请求该人的位置并获取从他到某个点的距离(无论诊所在哪里)(前 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
}
}
从一个点到另一个点的距离公式取自一个用 Javascript 完成的Haversine示例。