2013-08-20 3 views
0

Я получение моих клиентов, географические координаты с помощью следующего кода:Google Maps LatLng возвращение (NaN, NaN)

loc={} 
if (navigator.geolocation) 
{ 
    navigator.geolocation.getCurrentPosition(function(position){ 
     loc.lat = position.coords.latitude; 
     loc.lng = position.coords.longitude; 
                   }); 
} 

Я затем пытаюсь превратить это в карту Google скоординировать со следующим кодом

var clientLocation = new google.maps.LatLng(loc.lat, loc.lng); 

Это, однако, возвращается

(NaN,NaN) 

может кто-нибудь предложить, что я могу делать неправильно?

ответ

0

Скорее всего потому, что getCurrentPosition() является асинхронным, но вы ожидаете синхронного ответа.

getCurrentPosition() принимает вашу функцию как аргумент, который, как я предполагаю, вызовет, когда он закончит работу. Ваша функция - это обратный вызов, который обновляет ваш объект loc.

Проблема в том, что вы ожидаете, что loc будет обновлен до того, как getCurrentPosition закончит работу.

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

var loc={} // Don't forget the var declaration, or you might mess with the global scope 
if (navigator.geolocation) 
{ 
    navigator.geolocation.getCurrentPosition(function(position){ 
     loc.lat = position.coords.latitude; 
     loc.lng = position.coords.longitude; 
     createLatLng(); 
    }); 
} 

function createLatLng() { 
    var clientLocation = new google.maps.LatLng(loc.lat, loc.lng); 
    // and whatever else you need to do when you have the coordinate 
} 
0

На самом деле, это займет loc.lat и loc.lng как 2 аргументов. Это то, что вы получаете (NaN, NaN). Используйте следующий код, передавая значения координат непосредственно,

navigator.geolocation.getCurrentPosition(onSuccess, onError); 
    function onSuccess(pos) { 
    var myCenter = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude); 
    var mapProp = { 
     center: myCenter, 
     zoom: 15, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("googleMap"), mapProp); 
    var marker = new google.maps.Marker({ 
     position: myCenter, 
    }); 
    marker.setMap(map); 
    } 

    function onError(){ 
    alert('error'); 
    } 

Надеюсь, это поможет вам !!!!!

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