Не понимаю, как переменные работают в Angular?
Вы не переменные в Ангуляре не понимаете, а области видимости и асинхронность в js.
https://learn.javascript.ru/task/make-army
Потому что эта функция асинхронна и к моменту, когда она выполняется, цикл давно прошел, переменная i, соответственно, равна последнему значению
Создайте функцию и передайте туда $scope.geoObjects[i] в цикле, или просто i. Получится замыкание и значение уже не изменится