2016-03-15 114 views
2

我在下面的代碼中顯示標記,我點擊地圖上的標記。它的工作完美,事情是我想添加新標記時刪除以前的地圖標記。我應該在哪裏做出改變才能完美運作。在Google地圖中添加新標記之前移除上一個標記

 google.maps.event.addListener(map, "click", function (e) { 

        latLng = e.latLng; 

        console.log(e.latLng.lat()); 
        console.log(e.latLng.lng()); 

        image = clientURL + "/common/images/markers/red.png"; 
        console.log("Marker"); 
        marker = new google.maps.Marker({ 
         position: latLng, 
         map: map, 
         icon: image 
        }); 


       }); 

我refered,這不是我的情況下工作的許多環節To remove previous markers before adding new Markers

+0

marker.setMap(空)前。 –

+0

您未使用Google Maps API v2。這不再有效;任何對V2 API的請求都真正由V3 API處理。所以我重申了這個問題,並從標題中刪除了對V2的錯誤引用。 – duncan

+0

這是一種基本的知識,即在函數範圍內創建對象時,每次調用該函數時都會創建一個新對象,而不會影響以前的對象。在偵聽器之外聲明標記而不指定它的位置,然後在偵聽器中使用marker.setPosition(e.latLng)。 –

回答

2

你在你的問題鏈接的答案類似,你需要保持全球參考最後一個標記添加到地圖(以前的標記被刪除)。

var map; 
var previousMarker; // global variable to store previous marker 
function initMap() { 
    map = new google.maps.Map(document.getElementById('map'), { 
    center: { 
     lat: -34.397, 
     lng: 150.644 
    }, 
    zoom: 8 
    }); 
    map.addListener('click', function(e) { 
     // if the previousMarker exists, remove it 
     if (previousMarker) 
     previousMarker.setMap(null); 

     latLng = e.latLng; 

     console.log(e.latLng.lat()); 
     console.log(e.latLng.lng()); 

     //image = clientURL + "/common/images/markers/red.png"; 
     console.log("Marker"); 
     previousMarker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
     }); 
    } 

); 
} 
+0

我嘗試建議,但它打錯誤 - >未捕獲TypeError:previousMarker.setMap不是一個函數 –

+0

@KarthikeyanPandian看到我更新的答案,這段代碼功能齊全,試試看 - 我唯一不得不做的出於測試目的,刪除標記的替換圖像。 – bwegs

6

添加代碼,如果它存在,並且有一個.setMap方法從地圖中刪除標記(假定已有標記可用在當前範圍內或是全球性的):

if (marker && marker.setMap) { 
    marker.setMap(null); 
} 

完整功能:

google.maps.event.addListener(map, "click", function (e) { 

    latLng = e.latLng; 

    console.log(e.latLng.lat()); 
    console.log(e.latLng.lng()); 

    image = clientURL + "/common/images/markers/red.png"; 
    console.log("Marker"); 
    // if marker exists and has a .setMap method, hide it 
    if (marker && marker.setMap) { 
    marker.setMap(null); 
    } 
    marker = new google.maps.Marker({ 
    position: latLng, 
    map: map, 
    icon: image 
    }); 
}); 
+1

+1用於檢查標記是否爲空以及標記是否設置了非空映射。否則它將無法工作。這是使其工作的途徑之一。乾杯! –

1

在HTML代碼,並添加谷歌地圖API密鑰

<div id="map_div" style="width:100%;height:85px;"></div> 

在創建新的JavaScript代碼

var add_marker = null,map = null; //Declare vaiable 

// map load 
map = new google.maps.Map(document.getElementById('map_div'),{ 
     zoom:10, 
     position: new google.maps.LatLng(11.342423,77.728165), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

// first time map load set marker static 
add_marker = new google.maps.Marker({ 
     map:map, 
     position:new google.maps.LatLng(11.342423,77.728165), 
     zoom:10 
}); 

map.addListener("click",function(e){ 
    if(add_marker != null) {   //already set marker to clear 
     add_marker.setMap(null); 
     add_marker = null; 
    } 

    // Dynamic to set marker based on click event 
    add_marker = new google.maps.Marker({ 
      map:map, 
      position:new google.maps.LatLng(e.latLng.lat(),e.latLng.lng()), 
      zoom:10 
    }); 
}); 
相關問題