2011-12-15 45 views
20

我有如下2個功能:谷歌地圖API 3刪除選定的標記只有

function addMarker() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 

    google.maps.event.addListener(marker, "rightclick", 
    function (point) { 
    showContextMarker(point.latLng); }); 
    $('.contextmenu').remove(); 
}; 

function delMarker() { marker.setMap(null); $('.contextmenu').remove(); }; 

所以,可以理解我也有「刪除標記」選項就可以了上下文菜單。 我在添加標記期間綁定「右鍵」偵聽器,以顯示此菜單。

一切工作沒有任何問題,直到這一刻。

但是,當我嘗試點擊一個標記刪除;它隻影響最後添加的標記。 當我再試一次;什麼都沒發生。

所以我的想法是獲得點擊標記的id(或者可能是有用的東西)並根據這個運行這個刪除函數。

簡而言之;我想從具有多個標記的地圖上刪除我點擊的標記。

您有解決此問題的方法嗎?

在此先感謝!

已解決!

這是解決方案。謝謝法提赫。如果沒有你的指導是不可能的:

var id; 
var markers = {}; 
var addMarker = function() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 
    id = marker.__gm_id 
    markers[id] = marker; 

    google.maps.event.addListener(marker, "rightclick", function (point) { id = this.__gm_id; delMarker(id) }); 
} 

var delMarker = function (id) { 
    marker = markers[id]; 
    marker.setMap(null); 
} 

通過調用刪除功能:delMarker(id) PS:「點擊鼠標右鍵就足以在這種情況下,」

謝謝!

+0

但你想實現什麼???。刪除所有的標記? – Jorge 2011-12-15 14:45:46

+0

只刪除點擊的那個! – MrGorki 2011-12-15 14:49:33

回答

41

Working Sample on jsFiddle


谷歌地圖不管理您的標記。所以你所有的標記都應該由你自己來管理。

製作全局標記對象並將所有標記推送到此對象。獲取標記實例時,爲每個標記提供唯一的ID。然後,當你想刪除一個標記時,需要使用它的id並在全局標記對象中找到這個標記,最後通過傳遞null參數來調用這個標記實例的setMap方法。

此外我添加了一個適用於jsFiddle的演示。代碼大量記錄。

你的psuedo代碼應該是這樣的。 如需更詳細的代碼,請查看演示。

 
var currentId = 0; 
var uniqueId = function() { 
    return ++currentId; 
} 

var markers = {}; 
var createMarker = function() { 
    var id = uniqueId(); // get new id 
    var marker = new google.maps.Marker({ // create a marker and set id 
     id: id, 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    markers[id] = marker; // cache created marker to markers object with id as its key 
    return marker; 
} 
var deleteMarker = function(id) { 
    var marker = markers[id]; // find the marker by given id 
    marker.setMap(null); 
} 
2

補充@Fatih答案你應該管理標記。例如,您可以將每個標記添加到數組中,然後刪除,您可以在數組中找到該標記,並將映射中的val設置爲null。

1

這個工作對我來說:

第二currentId,如果你有更好的想法,讓我知道

var actualMarkerId = 0; 
var currentId = 0; 



    if (actualMarkerId>0) { 
     deleteMarker(actualMarkerId); 
     console.log(actualMarkerId); 
    } 
    var id = uniqueId(); // get new id 
    actualMarkerId = id; 
0

對於最小的變化

var newid=0; 

for (var index in results){ 

var marker = new google.maps.Marker({ 

map: map, 
icon: image, 

__gm_id: = newid+1, 

}); 
} 

現在標記[ '__ gm_id' ]仍然有一個值

2

只需在rightclick函數中傳遞您的標記。例如:

var marker = new google.maps.Marker({ 
    position: event.latLng, 
    map: map, 
    draggable: true, 
    title: 'Hello World!' 
}); 
google.maps.event.addListener(marker, "rightclick", function (point) {delMarker(marker)}); 

,使功能看起來這樣:

var delMarker = function (markerPar) { 
    markerPar.setMap(null); 
} 

你的標誌將在rightclicks可拆卸。