2013-01-19 40 views
3

使用以下代碼並試圖弄清楚如何添加一個函數,我可以調用這個函數將刪除前一個標記,然後再添加一個新標記。該地圖使用onclick事件添加標記,用戶點擊...基本上我只想在任何給定的時間在地圖上的一個標記。谷歌地圖api v3 - 在點擊事件之前添加新標記之前刪除標記

我已經搜索並嘗試了幾乎所有的東西,但必須以某種方式做錯了...請快速瀏覽代碼並讓我知道它將如何實現。

非常感謝!

<script> 
    function initialize() { 
    var mapOptions = { 
     zoom: 11, 
     center: new google.maps.LatLng(document.getElementById('field_lat').value,document.getElementById('field_lng').value), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_canvas'), 
     mapOptions); 

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


     // SET MY UI SEARCH TEXT FIELDS TO THE LAT AND LNG 
     document.getElementById('field_lat').value = e.latLng.lat(); 
     document.getElementById('field_lng').value = e.latLng.lng(); 


     placeMarker(e.latLng, map); 
    }); 
    } 

    function placeMarker(position, map) { 
     //Marker.setMap(null); 
    var Marker = new google.maps.Marker({ 
     position: position, 
     map: map 
    }); 
    map.panTo(position); 

    $("#listbox ul").empty(); 
    docall(); 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 

</script> 

地圖是人體如下

<div id="map_canvas" style="width: 400px; height: 400px;"></div> 

我試圖嘗試讓這種或類似工作的東西,但沒有骰子...

// Deletes all markers in the array by removing references to them 
function deleteOverlays() { 
if (markersArray) { 
for (i in markersArray) { 
markersArray[i].setMap(null); 
} 
markersArray.length = 0; 
} 
} 
+0

你爲什麼不把現有的標記移動到新的位置?無需刪除和重新創建。 – Marcelo

+0

[Google Maps API v3:如何刪除所有標記?]的可能重複(http://stackoverflow.com/questions/1544739/google-maps-api-v3-how-to-remove-all-markers) – Touchpad

回答

2

簡單做如下:

I.聲明一個全局變量:

var markersArray = []; 

二,定義一個函數:

function clearOverlays() { 
    for (var i = 0; i < markersArray.length; i++) { 
    markersArray[i].setMap(null); 
    } 
} 

OR

google.maps.Map.prototype.clearOverlays = function() { 
    for (var i = 0; i < markersArray.length; i++) { 
    markersArray[i].setMap(null); 
    } 
} 

III。在撥打以下電話號碼前,請按下'markerArray'中的標記:

markersArray.push(marker); 
google.maps.event.addListener(marker,"click",function(){}); 

IV。在需要的地方調用該功能。

clearOverlays(); 

OR

map.clearOverlays(); 

這就是它!

希望能幫助你。

來源:Google Maps API v3: How to remove all markers?

+1

I不得不做一些調整,但能夠遵循你提供的代碼和它的工作很棒。非常感謝! – tamak

+0

全部>這適用於地圖API V3 –

3

只需刪除以前的標記,如果有一個。

var Marker; 
function placeMarker(position, map) { 
    if(typeof marker!= 'undefined') 
     marker.setMap(null); 
    var Marker = new google.maps.Marker({ 
    position: position, 
    map: map 
    }); 
    map.panTo(position); 

    $("#listbox ul").empty(); 
    docall(); 
} 
0

您可以在第一次點擊時設置標記,然後在隨後的點擊中更改位置。

var marker; 

google.maps.event.addListener(map, 'click', function(event) { 
    placeMarker(event.latLng); 
}); 

function placeMarker(location) { 
    if (marker == null) { 
    marker = new google.maps.Marker({ 
      position: location, 
      map: map 
     }); 
    } else { 
    marker.setPosition(location); 
    } 
}