2013-10-22 87 views
0


我已經通過我的相關問題,每一個可能的問題,並試圖解決許多,似乎沒有任何幫助。我使用Google的Map API,並且地圖不是以正確的經緯度對爲中心。它指向(0,0),這是南太平洋中部的一些地方。在對我的Lat Long對進行地理定位時,它會給出正確的地址。
這裏是我的代碼:谷歌地圖API不居中正確的位置

$(document).ready(function(){ 
    var loc = {lat:0,long:0}; 
    if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition); 
    }else{ 
    alert("Geolocation is not supported by this browser."); 
    } 
    console.log(loc); 
    function showPosition(position){ 
    loc.lat=position.coords.latitude; 
    loc.long=position.coords.longitude; 
    var geocoder = new google.maps.Geocoder(); 
    var latLng = new google.maps.LatLng(loc.lat, loc.long); 
    console.log(latLng); 
    if (geocoder) { 
     geocoder.geocode({ 'latLng': latLng}, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      console.log(results[0].formatted_address); 
      alert('Address:'+results[0].formatted_address); 
     }else { 
      console.log("Geocoding failed: " + status); 
     } 
     }); //geocoder.geocode() 
    } 
    } 
    var latLong = new google.maps.LatLng(loc.lat, loc.long); 
    var mapOptions = { 
    center: latLong, 
    useCurrentLocation : true, 
    zoom: 14, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var mapMsg = new google.maps.Map(document.getElementById("local_map"), mapOptions); 
    google.maps.event.addDomListener(window, 'load'); 
    var markerOptions = new google.maps.Marker({ 
    clickable: true, 
    flat: true, 
    map: mapMsg, 
    position: latLong, 
    title: "You are here", 
    visible:true, 
    icon:'http://maps.google.com/mapfiles/ms/icons/blue-dot.png', 
    }); 
}); 


這裏是Firefox的控制檯顯示正確的位置地址和LAT長的屏幕截圖。

Firefox Console

控制檯中的前兩行是座標,第三行是地理編碼的位置。
請告訴我我錯了。我知道這將是一個愚蠢的錯誤,但我是新手。

問候

回答

1

你永遠不會獲得來自地理編碼結果的位置,或者設置的標誌 - 和執行的順序是顛倒(但不會失敗)

而是執行此操作:

... 
if (status == google.maps.GeocoderStatus.OK) { 
    var markerOptions = new google.maps.Marker({ 
    clickable: true, 
    flat: true, 
    map: mapMsg, 
    position: results[0].geometry.location, 
    title: "You are here", 
    visible:true, 
    icon:'http://maps.google.com/mapfiles/ms/icons/blue-dot.png', 
    }); 
    var marker = new google.maps.Marker(markerOptions); 
    mapMsg.setCenter(results[0].geometry.location); 
    } else { 
    console.log("Geocoding failed: " + status); 
    } 
    ... 

這裏你的代碼的莫名其妙清洗/工作版本http://jsfiddle.net/zqeCX/ 但你真的應該考慮使用的谷歌地圖的例子作爲出發點之一,得到了執行流程的權利。

+0

嗨,謝謝你的幫助。該商標正在工作! 可以請你解釋一下這個原因嗎? –

1

這是因爲navigator.geolocation.getCurrentPosition是異步。 因此,當你做var latLong = new google.maps.LatLng(loc.lat, loc.long);loc.lat仍然是「0」,因爲是loc.long

所以你需要包括做線在你的函數showPosition