2013-03-10 61 views
0

我已經實現了谷歌地圖,我得到了經度和緯度,我希望這些值可以在谷歌地圖功能之外使用。只有當我在谷歌地圖代碼中調用這些變量時,纔可以將它們添加到DOM。我怎樣才能將這些變量外部用於Google Maps功能。JavaScript封閉解決方案在這裏,如何使用它?

點擊地圖,我需要將這些緯度和經度值作爲查詢字符串追加到URL中。

我不確定閉包是如何工作的。有人可以幫助我將這些緯度和經度值添加到谷歌地圖initilaize()函數以外的查詢字符串。

以下是我的代碼;

<script> 
function initialize() { 
    var mapOptions = { 
    center: new google.maps.LatLng(44.397, -122.644), 
    zoom: 4, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(44.397, -122.644), 
    map: map, 
    draggable: true 
    }); 
    google.maps.event.addListener(map, 'mousemove', function ques(event) { 
    var lat_value = event.latLng.lat(); 
    var lon_value = event.latLng.lng(); 
    document.getElementById("llat").value = lat_value; 
    document.getElementById("llon").value = lon_value; 
    }); 
    google.maps.event.addListener(map, 'click', function cclick() { 
    }) 
} 
</script> 
<script> 
$(function() { 
    // Access functions and variables defined in google maps initialize() function here 
    if(document.location.href.indexOf('?') == -1) { 
    window.location = window.location + "?lat_value"; 
    } 
}); 
</script> 

FIDDLE

回答

0

你不需要在這裏使用一個JS關閉。你甚至不需要在initialize方法的範圍之外編寫處理程序。只要做到這一點,你做了mousemove處理方式相同:

google.maps.event.addListener(map, 'click', function (e) { 
    var lat_value = e.latLng.lat(); 
    var lon_value = e.latLng.lng(); 
    window.location = window.location.href.split('?')[0] 
     + "?lat_value=" + lat_value 
     + "&long_value=" + lon_value; 
}); 

雖然在一般,如果你想有機會來初始化你mapOptions變量之外,只是在外部範圍的定義它(即做var mapOptionsfunction initialize之前的聲明)。

+0

謝謝,沒關係,我不能在initilaize函數中使用這個,我需要做一個單獨的函數,如但顯然這些值不會在這裏定義,所以我的問題出現了。我的問題是如何使用這些變量以外的initiliaze功能。其實在一個新的腳本塊。 – Mike 2013-03-10 06:16:10

+0

@Mike緯度和經度值必須來自地圖點擊事件。它們是在用戶單擊鼠標按鈕時生成的。 maps api沒有提供獲取與屏幕座標相對應的LatLng對象的方法,因此您無法使用常規的DOM單擊事件來獲取它。儘管如此,您不必在該方法中執行處理:您可以在其他位置定義方法,並從點擊處理程序內部調用該方法,並傳入'lat_value'和'long_value'作爲參數。但是這在功能上是等同的。 – nbrooks 2013-03-10 06:36:53

+0

@Mike也許如果你解釋一下你的需求,我可以做更多的幫助:你想要完成的是什麼?兩個方法是否在同一個腳本塊中定義與它們的處理方式無關。 – nbrooks 2013-03-10 06:39:03