Im пишу приложение, которое имеет тонны местоположений, все с координатами, я хочу, чтобы приложение могло искать местоположения по названию или по которому наиболее близко. Я знаю, как определить расстояние между двумя координатами по формуле Хаверсина. Однако я хочу, чтобы мое приложение проходило через каждый объект (местоположение) в массиве и добавляло новый элемент к этому объекту с именем distance
и distance
должно быть расстоянием до местоположения от моего местоположения. У меня есть следующий код, который, я думаю, должен работать, но это не так. У кого-нибудь есть идеи?AngularJS Получение расстояния между несколькими координатами
function GetLocation(location) {
myLat = location.coords.latitude;
myLon = location.coords.longitude;
angular.forEach($scope.ASiteLocs, function(object, location) {
location.Point.coordinates = location.Point.coordinates.substring(0, clength - 2).split(",");
Lat = location.Point.coordinates[0];
Lon = location.Point.coordinates[1];
function getCoordDistance() {
Number.prototype.toRad = function() {
return this * Math.PI/180;
}
var lat2 = myLat;
var lon2 = myLon;
var lat1 = Lat;
var lon1 = Lon;
var R = 3959; // Radius in miles
//has a problem with the .toRad() method below.
var x1 = lat2 - lat1;
var dLat = x1.toRad();
var x2 = lon2 - lon1;
var dLon = x2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
}
object.distance = d;
});
}
Вот что места выглядят как (только некоторые из них):
"name": "502 Nelson St, Greenville, MS 38701",
"visibility": "0",
"description": "502 Nelson St, Greenville, MS 38701",
"styleUrl": "#waypoint",
"Point": {
"coordinates": "-91.05636,33.415485,0"
}
}, {
"name": "242 Blackhawk Trace, Galena, IL 61036",
"visibility": "0",
"description": "242 Blackhawk Trace, Galena, IL 61036",
"styleUrl": "#waypoint",
"Point": {
"coordinates": "-90.319778,42.390862,0"
}
}, {
"name": "3747 Ocean Dr, Vero Beach, FL 32963",
"visibility": "0",
"description": "3747 Ocean Dr, Vero Beach, FL 32963",
"styleUrl": "#waypoint",
"Point": {
"coordinates": "-80.358248,27.659094,0"
}
}
Вот бухнуться моей работы, если это делает его легче читать.
http://plnkr.co/edit/nRQc7Ym0lsaK6jQwd626?p=preview
Где ваша функция получает $ scope? – msarchet
Внесен в другую часть приложения. @msarchet –
Где вы вызываете 'getCoordDistance', вы определяете функцию, но никогда не вызываете ее? – msarchet