2013-07-30 5 views
0

Здесь у меня есть bigArray, в котором у меня есть объекты. Каждый объект имеет элементы top, left, lat, lng.Доступ к объектам в массиве

bigArray [Object, Object, Object, Object, Object, Object, Object, Object, Object] 
    0: Object 
    lat: 33.543 
    leftPosition: 54 
    lng: 56.345 
    topPosition: -3 
    __proto__: Object 
    1: Object 
    lat: 32.4534 
    leftPosition: 197 
    lng: 45.634345 
    topPosition: 57 
    __proto__: Object 
    2: Object 
    lat: 34.6434 
    leftPosition: 245 
    lng: -102.324234 
    topPosition: -3 
    __proto__: Object 
    3: Object 
    lat: 23.3423 
    leftPosition: 330 
    lng: 57.5343 
    topPosition: 57 
    __proto__: Object 
    4: Object 
    5: Object 
    6: Object 
    7: Object 
    // N number of array etc... ...: Object 
    length: 9 
    __proto__: Array[0] 

Теперь у меня есть эта функция, которая вычислить км расстояние, основанное на широты и LNG Разногласия между двумя местами:

var loc1 = { lat: 42.672708, lon: 23.32147800000007 }; 
var loc2 = {lat:42.670242, lon:23.315002999999933}; 

function arc_distance(loc1, loc2) { 
    var rad = Math.PI/180, 
     earth_radius = 6371.009, // close enough 
     lat1 = loc1.lat * rad, 
     lat2 = loc2.lat * rad, 
     dlon = Math.abs(loc1.lon - loc2.lon) * rad, 
     M = Math; 

    return earth_radius * M.acos(
     (M.sin(lat1) * M.sin(lat2)) + (M.cos(lat1) * M.cos(lat2) * M.cos(dlon)) 
    ); 
} 
alert (arc_distance(loc1,loc2)); 

, но теперь у меня есть проблема, как рассчитать расстояние Разногласия между всеми объектами? так object[0]---distance---object[1]---distance---object[2]---distance---object[N], где N число объектов в bigArray

Так как я могу доступ ко object[0].lat.lng , object[1].lat.lng , object[2].lat.lng и на основе моего функции вычисления расстояния Разногласия между объектом и расстоянием добавить объект так Объект будет object{top,left,lat,lng, DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION}

+0

BigArray [я] .lat, BigArray [я] .lng и т.д .; bigArray [i] .distance = arc_distance (bigArray [i] .lat, bigArray [i] .lng)? Я не уверен, что понимаю вашу проблему. – zozo

+0

Слово «объект» появляется на этой странице 40 раз. –

+0

Вы не знаете, как петля? – epascarello

ответ

1

Тест

for (var i = arr.length-1; i > 0; i--) { 
     arr[0].DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION = 0; 
     arr[i].DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION = arc_distance({lat: arr[i-1].lat, lon: arr[i-1].lng}, {lat: arr[i].lat, lon: arr[i].lng}); 
} 

JSFIDDLE

+0

я увижу это работа ok –

+0

@MarkWest любой хороший? – dcodesmith

+0

'arr [0] .DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION = 0;' вы можете оставить этот код вне цикла. –

1

ли эта работа для ты?

bigArray[0].DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION=0; 
for(var i=bigArray.length;i>0;i--){ 
    bigArray[i].DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION=arc_distance(bigArray[i-1], bigArray[i]); 
} 
+0

Я действительно боялся опубликовать это как ответ после этого огромного вопроса :). – zozo

+0

должен быть 'var i = bigArray.length; i> 0; i -'; Кроме того, функция 'arc_distance' достигает долготы через' lon', тогда как объекты в массиве имеют долготу, поскольку 'lng' – mshsayem

+0

может быть, этот код даст ему некоторое представление о том, как это сделать. –

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