2013-08-20 74 views
0

我獲得我的客戶的地理座標用下面的代碼:谷歌地圖經緯度返回(NAN,NAN)

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

我再試圖變成一個谷歌地圖這樣用下面的代碼協調

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

然而,這是返回

(NaN,NaN) 

任何人都可以建議我可能做錯了什麼?

回答

0

這很可能是因爲getCurrentPosition()是異步的,但您期待同步響應。

getCurrentPosition()將您的函數作爲參數,我假設它將在完成運行時調用它。你的函數是一個更新你的loc對象的回調函數。

問題在於你期待loc在getCurrentPosition完成運行之前被更新。

你應該做的卻是讓你的函數調用經緯度創作,就像這樣:

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'); 
    } 

希望這將有助於你!!!!!

相關問題