2013-03-09 72 views
1

我有一個谷歌地圖,我不斷用標記更新。如果標記重疊(完全相同的位置),我有一個計數器添加到標記內的數字。問題是每次我添加一個新標記時,並不總是將它放在另一個標記的頂部。所以,例如,標記的數字是10。一個新的標記與11和動畫後它隱藏在10後面。有些時候在幾個標記後,頂部標記將是正確的數字,如21而不是10.Google Maps API按經度/緯度移除標記

那麼有沒有辦法刪除經緯度/經度標記添加新的之前?這裏是我有:

for (var i=0; i<response.trans.length; i++) { 
    //add to location 
    location[response.trans[i].location_id] += 1; 

    latLng = new google.maps.LatLng(response.trans[i].latitude, response.trans[i].longitude); 
    marker = new google.maps.Marker({ 
     map:map,               
     position: latLng, 
     icon: 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+client[response.trans[i].location_id], 
     animation: google.maps.Animation.DROP 
    }); 
    markers.push(marker); 
} 

謝謝雷蒙德!你把我推在正確的方向

這是爲我工作的代碼:

for (var i=0; i<response.trans.length; i++) { 
    //add to total count 
    totalCount += 1; 

    //add to location 
    location[response.trans[i].location_id] += 1; 

    markerChanged = false; 
    for(x=0; x < markers.length; x++){ 
     if(markers[x].getPosition().lat().toFixed(6) == response.trans[i].latitude.toFixed(6) && markers[x].getPosition().lng().toFixed(6) == response.trans[i].longitude.toFixed(6)){ 
      markers[x].setIcon('http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+location[response.trans[i].location_id]); 
      markers[x].setAnimation(google.maps.Animation.DROP); 
      markerChanged = true; 
     } 
    } 

    if(markerChanged === false){ 
     latLng = new google.maps.LatLng(response.trans[i].latitude, response.trans[i].longitude); 
     marker = new google.maps.Marker({ 
      map:map, 
      position: latLng, 
      icon: 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+location[response.trans[i].location_id], 
      animation: google.maps.Animation.DROP 
     }); 
     markers.push(marker); 
    } 
} 

所以我增加了內部的for循環,它會針對當前標記。我必須使用toFixed(6)將其更改爲一個字符串。浮點精度正在拋棄正確性。所以如果標記是相同的,它會改變圖標。如果它是一個新的標記,它會將它添加到地圖中。我添加了DROP動畫,因爲我仍然希望它能夠被更新。

謝謝!

回答

0

如果他們是相同的確切位置,你可以嘗試:

for(i=0; i < markers.length; i++) { 
    if(markers[i].getPosition().lat() == response.trans[i].latitude && markers[i].getPosition().lng() == response.trans[i].longitude) 
     markers[i].icon = "number11.png" 
} 
+2

待辦事項_使用無證屬性(.IB .jb),他們_will_改變,會意外地破壞你的代碼[使用以文檔方式訪問它們:.lat()和.lng()]。而且,浮點平等不是一個好的測試。 – geocodezip 2013-03-09 01:44:07

+0

謝謝,我目前正在使用這個項目,這將幫助我。 – Ray 2013-03-09 02:47:58

+0

這讓我朝着正確的方向前進!謝謝!我會用更新的代碼更新我的問題。 – Pablo 2013-03-11 15:53:13

1

我相信你可以在將標記添加到地圖之前聚合列表的信息。也就是說,

var location = {}; 

for (var i = 0; i < response.trans.length; i++) { 
    location[response.trans[i].location_id] += 1; 
} 

for (location_id in location) { 
    if (location.hasOwnProperty(location_id)) { 
    /* add marker */ 
    } 
} 
相關問題