我试图找到最近的三个位置并在html(https://snag.gy/zSL4pO.jpg)上显示信息。
我能够找到最近的位置,但我无法进一步了解。在Java中,我将创建一个位置列表,然后按距离对它们进行排序。什么是在javascript中完成此操作的最简单方法?
当前功能:
function nearestLocation(position) {
var myLocation;
var currentLng = position.coords.longitude
var currentLat = position.coords.latitude;
var locationLng;
var locationLat;
var dx;
var dy;
var distance;
var nearestAttraction = 15000; // ein extrem weit entfernter Ort (unrealistisch)
var locationID = 0;
for (var i = 0; i < 3; i++) {
myLocation = locations[i];
locationLng = myLocation[2];
locationLat = myLocation[1];
dx = 71.5 * (currentLng - locationLng);
dy = 111.3 * (currentLat - locationLat);
distance = Math.sqrt(dx * dx + dy * dy);
if (distance < nearestAttraction) {
nearestAttraction = distance;
locationID = i;
}
console.log('Distance ' + i + ': ' + distance);
}
localStorage.setItem('currentLat', currentLat);
localStorage.setItem('currentLng', currentLng);
localStorage.setItem('locationID', locationID);
showLocation(locationID, nearestAttraction);
}
感谢您的帮助
答案 0 :(得分:0)
你可以使用sort()函数。
首先,制作一个数组。 var elements = [];
第二,用json值填充数组
element.unshift({位置:姓名,DIST:距离});
或
element.unshift([name,distance]); //这会更快
第三,对数组进行排序。
element.sort(function(a,b){return b.dist-a.dist;}); // with object {}。
element.sort(function(a,b){return b [1] -a [1];});
第四,随时随地使用。
element [0] .place; //最近的地方名称。(对象)
element [0] [0]; //最近的地方名称。(数组)
------- --------端 如果您有任何疑问,请问我。
P.S。使用Math.hypot();而不是Math.sqrt(); // Math.hypot更快,但遗留浏览器没有
答案 1 :(得分:0)
我的一个朋友能够帮助我。这是适合我的代码:
function nearestLocation(position) {
var myLocation;
var currentLng = position.coords.longitude
var currentLat = position.coords.latitude;
var locationLng;
var locationLat;
var dx;
var dy;
var distance;
var nearestAttraction = 15000; // ein extrem weit entfernter Ort (unrealistisch)
var locationID = 0;
//Annahme: Maximal drei Attraktionen
for (var i = 0; i < locations.length; i++) {
var location = locations[i];
locationLng = location[2];
locationLat = location[1];
dx = 71.5 * (currentLng - locationLng);
dy = 111.3 * (currentLat - locationLat);
distance = Math.sqrt(dx * dx + dy * dy);
location.push(distance);
var output = "";
output += distance.toString();
}
console.log(locations);
locations.sort(function (a, b) {
return a[8] - b[8];
});
console.log(locations);
//Fuer Uebung 5c: Speichern der aktuellen Position und naechsten Attraktion im localStorage
localStorage.setItem('currentLat', currentLat);
localStorage.setItem('currentLng', currentLng);
localStorage.setItem('locationID', locationID);
showLocation();
}