Потому что эта функция асинхронна и к моменту, когда она выполняется, цикл давно прошел, переменная i, соответственно, равна последнему значению
Создайте функцию и передайте туда $scope.geoObjects[i] в цикле, или просто i. Получится замыкание и значение уже не изменится