2014-09-28 68 views
1

我有一個函數,加載我的地​​圖以保持我的地圖是靜態的。谷歌地圖Spiderfier,地圖在setmap後沒有反應(null)

<script> 
var delArray = new Array(); 
var gm; 
var map; 
var iw; 
var oms; 

window.onload = function(){ 
    gm = google.maps; 
     map = new gm.Map(document.getElementById('map_canvas'), { 
      mapTypeId: gm.MapTypeId.TERRAIN, 
      center: new gm.LatLng(-29.335205, 24.793563), 
      scrollwheel: false, 
      zoom: 6 
     }); 
    iw = new gm.InfoWindow(); 
     oms = new OverlappingMarkerSpiderfier(map, 
      {markersWontMove: true, markersWontHide: true}); 
} 
</script> 

然後我使用另一個函數來構建我的蜘蛛數據。

<script> 
function spider(mapData){ 
    var usualColor = 'eebb22'; 
    var spiderfiedColor = 'ffee22'; 
    var iconWithColor = function(color) { 
     return 'http://chart.googleapis.com/chart?chst=d_map_xpin_letter&chld=pin|+|' + 
     color + '|000000|ffff00'; 
    } 
    var shadow = new gm.MarkerImage( 
     'https://www.google.com/intl/en_ALL/mapfiles/shadow50.png', 
     new gm.Size(37, 34), // size - for sprite clipping 
     new gm.Point(0, 0), // origin - ditto 
     new gm.Point(10, 34) // anchor - where to meet map location 
    ); 

    oms.addListener('click', function(marker) { 
     iw.setContent(marker.desc); 
     iw.open(map, marker); 
    }); 
    oms.addListener('spiderfy', function(markers) { 
     for(var i = 0; i < markers.length; i ++) { 
      markers[i].setIcon(iconWithColor(spiderfiedColor)); 
      markers[i].setShadow(null); 
     } 
     iw.close(); 
    }); 

    oms.addListener('unspiderfy', function(markers) { 
     for(var i = 0; i < markers.length; i ++) { 
      markers[i].setIcon(iconWithColor(usualColor)); 
      markers[i].setShadow(shadow); 
     } 
    }); 

    var bounds = new gm.LatLngBounds(); 
     for (var i = 0; i < mapData.length; i ++) { 
     var datum = mapData[i]; 
     var loc = new gm.LatLng(datum[0], datum[1]); 
     bounds.extend(loc); 
      var marker = new gm.Marker({ 
       position: loc, 
       title: datum[2], 
       animation: google.maps.Animation.DROP, 
       map: map, 
       icon: iconWithColor(usualColor), 
       shadow: shadow 
      }); 
     marker.desc = datum[3]; 
     oms.addMarker(marker); 
     delArray.push(marker); 
     } 
     map.fitBounds(bounds); 


// for debugging/exploratory use in console 
window.map = map; 
window.oms = oms; 
} 
</script> 

,另一個從地圖上刪除標記:

<script> 
function delMe(){ 
if(delArray){ 
    for(i =0; i <= delArray.length; i++){ 
     delArray[i].setMap(null); 
    } 
    this.delArray = new Array(); 
} 
} 
</script> 

我的地圖數據(屬於MapData)來源於一個PHP腳本,並通過傑森傳遞。在我打電話給我的蜘蛛(地圖)功能之前,這也是我稱之爲刪除功能的地方。我在傳遞新數據之前清除地圖。

$(document).ready(function() { 
    delMe(); 
    var pdata = $js_array; 
    spider(pdata);    
}); 

現在,我的問題是,所有的數據被完全顯示,但調用代爾姆()函數後,它會清除標記100%,但隨後我的地圖變得反應遲鈍調用蜘蛛當它不加載新的數據()函數與新的數據。

我可以通過重新加載/創建地圖來克服這個問題,但我想避免這種情況,只使用靜態地圖。如果我不刪除標記,只需在地圖上填充100個混合了新舊標記的標記。

當談到javascript/jquery時,我對noob有點了解,任何幫助都會非常感謝!

回答

0

它看起來像你錯過了一個OMS removeMarker呼叫你的delMe功能,它應該是這樣的:

function delMe(){ 
    if (delArray){ 
    for (i =0; i <= delArray.length; i++){ 
     oms.removeMarker(delArray[i]); 
     delArray[i].setMap(null); 
    } 
    this.delArray = []; 
    } 
} 

(這是可能的,你有其他的問題也一樣,但這裏是一個開始)。

從你寫的東西中不清楚,但是你使用JS開發者控制檯嗎?谷歌'[你的瀏覽器]開發者控制檯'獲取更多信息 - 它可以讓你看到錯誤是否導致你的地圖變得沒有反應。