2014-08-08 5 views
0

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

+0

Где ваша функция получает $ scope? – msarchet

+0

Внесен в другую часть приложения. @msarchet –

+0

Где вы вызываете 'getCoordDistance', вы определяете функцию, но никогда не вызываете ее? – msarchet

ответ

0

При использовании angular.forEach для массива объектов, то первый аргумент функции является объект, второй индекс массива:

angular.forEach($scope.ASiteLocs, function(location, arrayIndex) { 
    ... 
    location.distance = d; 
}) 

Примечание 1: вы меняете местоположение. Point.coordinates from string to array в вашем forEach, поэтому функция GetLocation будет работать только один раз, поскольку исходный массив местоположений будет изменен.

Примечание 2: определение функции в цикле - это плохая практика и «дорогая»

 Смежные вопросы

  • Нет связанных вопросов^_^