Короче говоря как вы захотели - сделать невозможно. Упростим:
var latlng=null;
setTimeout(function(){ latlng='100.100'; }, 1);
alert(latlng); // выведет "null"
Почему? Потому что алерт выполнится раньше чем безымянная функция присвоит переменной latlng новое значение, даже при таком микроскопическом сдвиге времени в 1мс.
Второе, даже если та самая функция определения координат занимает еще меньше времени, алерт все равно покажет нулл, просто потому что он находится на прямой, а та функция - в ответвлении, то есть на кривой.
В таких случаях всегда приходится перестраивать логику и мышления и приложения чтобы воспользоваться результатом, который вычисляется не сейчас, и не в этом месте, а позже и в другом месте. Решение для таких случаев весьма простое: это самое решение перемещается из сейчас и тут - в тогда и там. То есть туда где появляется результат перемещается и получатель этого результата.
Когда вы делаете алерт там - он работает? Потому что он перемещен в то самое время и место, и конечно работает. А другой алерт - из сейчас и тут - никогда не будет работать как вы хотите.
Вам несколько раз объяснили что применение координат должно находиться там, где они появляются, после того как они там появляются - там где алерт который нормально показывает. Вот и все. Что вы с ними хотите сделать - делайте в любой функции и передавайте ее в будущее туда, где она получит результат после того как он появится. Все просто.