Ваша проблема, вероятно, именно здесь:
navigator.geolocation.getCurrentPosition(handle_geolocation_query, handle_errors);
Предположительно, handle_geolocation_query
выглядит примерно так:
var position;
function handle_geolocation_query(pos) {
position = pos;
}
Но navigator.geolocation.getCurrentPosition
являетсявызов асинхронной функции:
Метод getCurrentPosition()
принимает один, два или три аргумента.При вызове он должен немедленно вернуться, а затем асинхронно попытаться получить текущее местоположение устройства .Если попытка успешна, successCallback
должен быть вызван [...]
Акцент мой.
Итак, ваш handle_geolocation_query
обратный вызов будет вызван getCurrentPosition
когда у него есть позиция, а не когда вы звоните getCurrentPosition
.Итак, когда вы попадаете сюда:
var lat = position.coords.latitude;
var lon = position.coords.longitude;
Ваш position
не обязательно будет содержать что-либо полезное, и вы, вероятно, получите сообщение об ошибке, сообщающее, что position.coords
не определен или не является объектом или чем-то похожим
Вам нужно переместить вещи new google.maps.LatLng
и new google.maps.Map
внутрь обратного вызова handle_geolocation_query
, где вы получите полезное значение position
.