2012-05-29 56 views
0

首先,我想說,我一直在互聯網上查找了很長時間,一直無法找到答案,因此我的問題這裏。谷歌地圖api v2 map.removeOverlay()標記數組問題

我最近的學校項目是創建一個管理頁面,將文章添加到數據庫中,文章連接到谷歌地圖上的一個點。在地圖上添加點的要求是用戶能夠點擊一次地圖並生成標記,如果第二次點擊地圖時第一個標記移動到第二個地點。 (這是我正在努力。)

問題是,現在的代碼,我得到的錯誤,markersArray是未定義的。如果我放置var markersArray = new Array;在eventListener下面,然後我得到一個錯誤,說明main.js(googles文件)有錯誤,而第二個中的markersArray [0]未定義。我不得不使用谷歌地圖API v2,儘管它是舊的。

<script type="text/javascript"> 
//<![CDATA[ 

var map; 
var markers = new Array; 

function load() { 
    if (GBrowserIsCompatible()) { 
    this.counter = 0; 
    this.map = new GMap2(document.getElementById("map")); 
    this.map.addControl(new GSmallMapControl()); 
    this.map.addControl(new GMapTypeControl()); 
    this.map.setCenter(new GLatLng(57.668911, 15.203247), 7);  

    GDownloadUrl("genxml.php", function(data) { 
     var xml = GXml.parse(data); 
     var Articles = xml.documentElement.getElementsByTagName("article"); 
     for (var i = 0; i < Articles.length; i++) { 
     var id = Articles[i].getAttribute("id"); 
     var title = Articles[i].getAttribute("title"); 
     var text = Articles[i].getAttribute("text"); 
     var searchWord = Articles[i].getAttribute("searchWord"); 
     var point = new GLatLng(parseFloat(Articles[i].getAttribute("lat")), 
           parseFloat(Articles[i].getAttribute("lng"))); 
     var article = createMarker(point, id, title, text); 
     this.map.addOverlay(article);   
     } 
    }); 
    } 

var myEventListener = GEvent.bind(this.map,"click", this, function(overlay, latlng) { 

    if (this.counter == 0) { 
    if (latlng) { 
     var marker = new GMarker(latlng); 
     latlng1 = latlng; 
     this.map.addOverlay(marker); 
     this.counter++; 
     markers.push(marker); //This is where I get the error that markersArray is undefined. 

    } 
} 
else if (this.counter == 1) { 
    if (latlng){ 
    alert (markers[0]); 
    this.map.removeOverlay(markers[0]); 
    var markers = []; 
    this.map.addOverlay(marker); 
    this.counter++; 
    } 
} 

}); 
} 

function createMarker(point, id, title, text) { 
    var article = new GMarker(point); 
    var html = "<b>" + title + "</b> <br/>" 
    GEvent.addListener(article, 'click', function() { 
    window.location = "article.php?id=" + id; 

    }); 
    return article; 
} 

回答

0

我解決了這個問題。我不完全確定它爲什麼起作用,但現在看起來像這樣:

var markersArray = []; 

function load() { 
if (GBrowserIsCompatible()) { 
    this.counter = 0; 
    this.map = new GMap2(document.getElementById("map")); 
    this.map.addControl(new GSmallMapControl()); 
    this.map.addControl(new GMapTypeControl()); 
    this.map.setCenter(new GLatLng(57.668911, 15.203247), 7);  

GDownloadUrl("genxml.php", function(data) { 
var xml = GXml.parse(data); 
var Articles = xml.documentElement.getElementsByTagName("article"); 
    for (var i = 0; i < Articles.length; i++) { 
     var id = Articles[i].getAttribute("id"); 
     var title = Articles[i].getAttribute("title"); 
     var text = Articles[i].getAttribute("text"); 
     var searchWord = Articles[i].getAttribute("searchWord"); 
     var type = Articles[i].getAttribute("type"); 
     var point = new GLatLng(parseFloat(Articles[i].getAttribute("lat")), 
           parseFloat(Articles[i].getAttribute("lng"))); 
     var article = createMarker(point, id, title, text); 
     this.map.addOverlay(article);   
     } 
    }); 
    } 

var myEventListener = GEvent.bind(this.map,"click", this, function(overlay, latlng) { 
var marker = new GMarker(latlng); 
if (this.counter == 0) { 
    if (latlng) { 
     latlng1 = latlng; 
     this.map.addOverlay(marker);  
     markersArray.push(marker);  
     this.counter++; 

    } 
} 
else if (this.counter == 1) { 
    if (latlng){ 
     this.map.removeOverlay(markersArray[0]); 
     this.map.addOverlay(marker); 
     this.counter++; 
    } 
} 

}); 
} 

function createMarker(point, id, title, text) { 
var article = new GMarker(point); 
var html = "<b>" + title + "</b> <br/>" 
GEvent.addListener(article, 'click', function() { 
    window.location = "article.php?id=" + id; 
}); 
return article; 
}