我在javascript中遇到这个问题:我有很多随机地图坐标(纬度,经度)存储在数组中
var coordinates = [
[64,22],[55,33],[28,35],[...,...]
]
我还有一种方法可以计算其中两个点之间的距离
像
var getDistance =function(point1,point2)
{
return L.dist(point1,point2);//leaflet method
}
然后这是我的问题:
如何对我的数组进行排序,使距离从第一个坐标最近排序,然后最接近第二个,然后最接近第三个,然后最接近第四个......?任何人都有这个解决方案......我迷失了:(
编辑1:
我尝试用嵌套for循环来解决问题...但结果似乎是错误的。
var cloestIndex = 1;
var closestDistance = 99999999;
for (var i = 0; i < coords.length; i++) {
for (var j = i + 1; j < coords.length; j++) {
if ((Map().distance(coords[i], coords[j]) < closestDistance) &&
(Map().distance(coords[i], coords[j]) != 0){
closestDistance = (Map().distance(coords[i], coords[j]));
closestIndex = j;
}
}
console.log("CD", closestDistance + "(" + closestIndex + ")");
finalArray.push(coords[closestIndex]);
coords.splice(closestIndex, 0);
cloestDistance = 9999999;
}
答案 0 :(得分:1)
如何对我的数组进行排序,使距离从第一个坐标开始排序,然后从第一个坐标到第二个坐标,然后是cloest到第三个,然后是cloest到第四个......?
这不称为“排序”,因为“与之前的”的最近距离不是ordering。按距离对单个点进行排序将是。
所以要做你想做的事,你真的应该按照你的描述,首先把第一个坐标放在结果数组中,然后在其余部分找到最接近的那个并添加它,然后找到最接近的 - 等等,直到没有更多的坐标。