У меня есть массив объектов, которые содержат некоторые адресные данные, включая широту и долготу.
У меня есть функция, которая вычисляет расстояние между двумя наборами координат широты и долготы.
Мне нужно отсортировать мой массив от ближайшего к дальнему из определенного набора широт / длин.
Я пытаюсь использовать arr.sort(comparefunction)
, но пока не повезло.Можно ли использовать внешнюю функцию внутри моей функции сравнения, чтобы сделать это?
Вот код, который я попробовал.
function getDistance (lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1/180
var radlat2 = Math.PI * lat2/180
var theta = lon1-lon2
var radtheta = Math.PI * theta/180
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
if (dist > 1) {
dist = 1;
}
dist = Math.acos(dist)
dist = dist * 180/Math.PI
dist = dist * 60 * 1.1515
if (unit=="K") { dist = dist * 1.609344 }
if (unit=="N") { dist = dist * 0.8684 }
return dist
}
let distributors = [
{
city: "A",
lat: 44.3384925,
long: -59.6993207,
name: "Name 1",
},
{
city: "B",
lat: 44.3384925,
long: -78.6993207,
name: "Name 2",
},
{
city: "C",
lat: 64.3384925,
long: -39.6993207,
name: "Name 3",
}
];
let sortedDist = distributors.sort(function(a, b){
if(getDistance(44.3617171302915, -79.65860486970848, a.lat, a.long, "K") < getDistance(44.3617171302915, -79.65860486970848, a.lat, a.long, "K")){
return -1;
}
if(getDistance(44.3617171302915, -79.65860486970848, a.lat, a.long, "K") > getDistance(44.3617171302915, -79.65860486970848, a.lat, a.long, "K")){
return 1;
}
return 0;
})
Таким образом, в этом сценарии второй элемент в массиве находится ближе всего к расстоянию от 44.3617171302915, -79.65860486970848
, но я console.log(sortedDist)
и ничего не изменилось.