[英]Google Maps API - Map.data scope issue
我正在嘗試通過執行以下操作將GeoJSON圖層添加到Google Maps(v3):
imageActive = {
url: "images/target_red.png",
origin: new google.maps.Point(0,0),
anchor: new google.maps.Point(11, 11),
} // ACTIVE marker image
jQuery.getJSON('home/gcpts/geojson.php', function(data){
points = map.data.addGeoJson(data);
console.log(points); //this works
});
map.data.setStyle({
clickable: true,
draggable: false,
});
map.data.addListener('click', function(event){
setActiveImage(event);
})
function setActiveImage(event){
for(var i = 0;i<points.length;i++){ //can't read "length" of undefined
points[i].revertStyles();
}
map.data.overrideStyle(event.feature, {
icon: imageActive,
});
}
但是,當我嘗試遍歷“ points”變量時,似乎無法“看到”它。 我主要是不確定的,或者如果我嘗試調用點的長度(points.length),那么它不存在。
如果我在jQuery函數中使用console.log(points),那么我可以看到該變量中的所有功能。 如果將它放在外面,則看不到它。 關於示波器,我有什么想念的嗎?
我希望我可以設置一個“ click”事件,並使用event.feature來覆蓋Style。 然后,當單擊其他要素時,該樣式將從其他geoJson要素中刪除,並覆蓋新單擊的要素。
似乎應該可以正常工作,但是我似乎無法弄清楚如何迭代這些功能。
謝謝!
(此外,我在“無沖突”模式下使用jQuery ...)
因為您沒有使用var
關鍵字,所以所有變量都是全局范圍的。 似乎其他腳本正在尋找一個points
變量並覆蓋您的變量。 假設您的代碼已經包裝在某種函數中(例如jQuery ready
處理程序),則可以僅使用var
來解決問題。 在調用getJSON()
之前,我將添加以下代碼行:
var points = [];
前面的答案指出,您需要確保“ points”變量的范圍適當,但更好的答案是根本不需要該變量:由於您使用的是map.data,因此可以直接使用它來訪問要素,使用類似:
map.data.foreEch(function(feature) {console.log(feature);})
當然,必須注意您的“地圖”變量的范圍。
此外,您也不需要使用map.data.loadGeoJson(theUrl)
您只需使用map.data.loadGeoJson(theUrl)
加載數據map.data.loadGeoJson(theUrl)
為您完成ajax
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.