Javascript 基于地理位置获取最近距离
我制作了一个脚本,用于获取用户的地理位置,使用Haversine公式计算位置和对象中项目之间的距离,并将距离记录在console.log中。我的问题是,如何仅对最近的项目进行console.log?希望有人能帮忙:)Javascript 基于地理位置获取最近距离,javascript,geolocation,haversine,Javascript,Geolocation,Haversine,我制作了一个脚本,用于获取用户的地理位置,使用Haversine公式计算位置和对象中项目之间的距离,并将距离记录在console.log中。我的问题是,如何仅对最近的项目进行console.log?希望有人能帮忙:) var obj=[ { 名称:“位置1”, 纬度:60.413750, 长:5.322036 }, { 名称:“位置2”, 拉脱维亚:59.749054, 长:10.203781 }, { 名称:“地点3”, 拉脱维亚:59.286271, 长:11.109228 }, { 名
var obj=[
{
名称:“位置1”,
纬度:60.413750,
长:5.322036
},
{
名称:“位置2”,
拉脱维亚:59.749054,
长:10.203781
},
{
名称:“地点3”,
拉脱维亚:59.286271,
长:11.109228
},
{
名称:“地点4”,
拉脱维亚:59.913869,
长:10.752245
}
];
var x=$(“#演示”);
var hblat;
var-hblong;
var距离;
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(显示距离);
}否则{
x、 html(“此浏览器不支持地理位置。”);
}
功能显示距离(位置){
hblat=位置坐标纬度;
hblong=位置坐标经度;
$。每个(对象、功能(键、值){
距离=hbdistance(hblat,hblong,value.lat,value.long,'K');
控制台日志(数学圆(距离*1000)/1000);
});
}
功能hbdistance(lat1、lon1、lat2、lon2、单位){
var radlat1=Math.PI*lat1/180
var radlat2=Math.PI*lat2/180
var radlon1=Math.PI*lon1/180
var radlon2=Math.PI*lon2/180
变量θ=lon1-lon2
var radtheta=Math.PI*theta/180
var dist=数学sin(radlat1)*数学sin(radlat2)+数学cos(radlat1)*数学cos(radlat2)*数学cos(radtheta);
dist=Math.acos(dist)
dist=dist*180/Math.PI
dist=dist*60*1.1515
如果(单位=“K”){dist=dist*1.609344}
如果(单位=“N”){dist=dist*0.8684}
返回区
}
在showdestance()
中,每个块都有一个计算距离的,看起来不错。你甚至还把它们记录到控制台上,所以我们就快到了
让我们在这里使用一个简单的解决方案,并建立一系列距离:
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帖子,其中解释了如何从数组中获取最小值:
希望有帮助 太好了!非常感谢戴夫,成功了:)
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
}