2011-08-14 210 views
0

首先感謝您抽出時間來幫助我,感謝您的努力。谷歌地圖JavaScript問題

我與谷歌地圖API的一個問題,JavaScript版本3.

我寫了下面的代碼

$('.adr').ready(function(){  

    initialize(); 

}) 

function initialize() { 

    var myLatlng = codeAddress(); 

    var myOptions = { 
     zoom: 14, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.SATELLITE 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions); 

    } 

function codeAddress() 
{ 
    var geocoder = new google.maps.Geocoder(); 

    var address; 
    var street = cropAdr($(".street-address").text()); 
    var city = cropAdr($(".locality").text()); 
    var state = cropAdr($(".region").text()); 
    var zip = cropAdr($(".zip").text()); 

    address = street + ", " + city + ", " + state + ", " + zip;  

    geocoder.geocode({'address': address}, function(results, status) 
    { 

     if (status == google.maps.GeocoderStatus.OK) 
     { 
     var latlng = results[0].geometry.location; 
     return latlng; 
     } 
     else 
     { 
     alert("Geocode was not successful for the following reason: " + status);   
     return null; 
     } 

    }); 
} 



function cropAdr(args) 
{ 
    var index = args.indexOf(":"); 
    var value = args.substr(index+1); 

    return value; 
} 

但它不工作。

我已經檢查了「結果[0] .geometry.location」回報,其完美的價值,所以地址的操作工作。 「results [0] .geometry.location」是一個google.maps.Latlng對象,但我試圖只刪除協作字符串,然後創建一個新的google.maps.Latlng對象,但沒有骰子。

但是,如果我手動複製該字符串並將值粘貼到「var myLatlng = new google.maps.Latlng(粘貼複製字符串!)」整件事情起作用!

我看不出還有什麼是錯的這個腳本(道歉jQuery和Javascritpt的混亂)。

回答

1

的谷歌地圖API地址接受當地址已經地理編碼將要運行的功能,但該功能可異步調用 - 也就是說,你的後代碼的其餘部分已經完成運行。

在codeAddress調用地理編碼,並在功能通過這條線:

geocoder.geocode({'address': address}, function(results, status) 

然後,您可以嘗試從傳遞給地理編碼器函數返回一個的latLng,但畢竟是不一樣的返回來自codeAddress的值。您從此函數返回的值將被傳遞給geocoder對象,該對象將會忽略它。

你需要你傳遞給地理編碼做的經緯度一些功能。例如,替代:

return latLng; 

有:

map.setCenter(latLng); 

和地圖應圍繞自己的地理編碼地址,一旦結果可用。 (要做到這一點,你需要使地圖對象成爲全局或者使其可用於codeAddress,我建議在你的代碼的頂部添加「var map;」,並從你的代碼的前面去掉「var」使用初始化參數圖)

+0

我已經試過你的建議, 認沽瓦爾圖;在屏幕的頂部,INITIALISE內 刪除,無功從「VAR地圖」() 變化「返回經緯度」到「map.setCenter(經緯度);」 將原始「Center:myLatlng」更改爲(0,0)的一個預先定義的Latlng對象並嘗試null。也稱爲codeAddress();地圖初始化後,也嘗試過。但沒有什麼作品... –

+0

我解決了它!你是正確的,但是當我啓動地圖中心的起源時,它已經把Latlng,LatLng的錯誤導致了一個JS錯誤...感謝您的幫助。 –