2011-12-15 38 views
20

Tôi đã 2 chức năng như sau:Google Maps Api 3 Remove Selected Marker Chỉ

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(); }; 

Vì vậy, khi có thể hiểu rằng tôi có một menu ngữ cảnh có "Delete Marker" tùy chọn trên đó. Tôi đang ràng buộc người nghe "rightclick" trong khi thêm điểm đánh dấu, để hiển thị menu này.

Mọi thứ đang hoạt động mà không có bất kỳ vấn đề nào cho đến thời điểm này.

Nhưng khi tôi cố gắng nhấp vào điểm đánh dấu để xóa; nó chỉ ảnh hưởng đến điểm đánh dấu được thêm cuối cùng. Khi tôi thử lại; chẳng có gì xảy ra.

Vì vậy, ý tưởng của tôi là lấy id của người đánh dấu đã nhấp (hoặc thứ gì đó có thể hữu ích) và chạy chức năng xóa này theo điều này.

Tóm tắt; Tôi muốn xóa điểm đánh dấu mà tôi đã nhấp vào, từ bản đồ có nhiều điểm đánh dấu.

Bạn có cách tiếp cận nào để giải quyết vấn đề này không?

Cảm ơn trước!

GIẢI PHÁP!

Đây là giải pháp. Cảm ơn bạn Fatih. nó đã không thể không có hướng dẫn của bạn:

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); 
} 

Calling xóa chức năng theo: delMarker(id) Ps: "Nhấn chuột phải đủ về trường hợp này"

Cảm ơn bạn!

+0

Nhưng bạn muốn đạt được điều gì ??? Xóa tất cả các điểm đánh dấu? – Jorge

+0

Chỉ xóa một người đã nhấp vào! – MrGorki

+0

@ MrGorki, bạn tạo ra __gm_id bằng cách nào? – jemz

Trả lời

41

Working Sample on jsFiddle


Google Maps không quản lý dấu của bạn. Vì vậy, tất cả các điểm đánh dấu của bạn nên được quản lý bởi chính bạn.

Tạo đối tượng điểm đánh dấu toàn cục và đẩy tất cả điểm đánh dấu đến đối tượng này. Và cung cấp id duy nhất cho mỗi điểm đánh dấu khi nhận được một trường hợp đánh dấu. Sau đó, khi bạn muốn xóa một điểm đánh dấu lấy id của nó và tìm thấy điểm đánh dấu này trong đối tượng điểm đánh dấu toàn cục và cuối cùng gọi phương thức setMap của đối tượng đánh dấu này với đối số null.

Ngoài ra tôi đã thêm bản trình diễn hoạt động trên jsFiddle. Mã được viết nhiều tài liệu.

Mã psuedo của bạn phải như thế này. Để biết mã chi tiết hơn, vui lòng xem bản trình diễn.

 
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); 
} 
+0

Tôi nghĩ tương tự nhưng không thể tìm ra cách. Làm cách nào tôi có thể lấy id của một cá thể bằng cách nhấp vào bản đồ để so sánh với mảng của tôi? – MrGorki

+0

"điểm đánh dấu .__ gm_id" có vẻ là id nhưng làm thế nào tôi có thể theo dõi nó? bởi getElementbyId hoặc cái gì khác? Bất kỳ sự giúp đỡ nào đều luôn được đánh giá cao! – MrGorki

+0

Trước hết, tôi không nên cung cấp cho bạn sử dụng mảng vì khi bạn sử dụng mảng, bạn phải tìm kiếm điểm đánh dấu trong mảng. Không cần phải sử dụng đối tượng này thay vì mảng. Điều thứ hai là bạn có thể lấy thuộc tính id của điểm đánh dấu khi bạn nhấp chuột phải vào điểm đánh dấu, tôi đoán bạn biết bạn đã nhấp vào điểm đánh dấu nào. Nếu bạn biết nó sau đó chỉ cần sử dụng .id để có được nó. Nếu bạn không biết thực hiện một cách để đạt được điều đó. Vì vậy, logic là như thế này. – Fatih

2

Bổ sung câu trả lời @Fatih bạn nên quản lý điểm đánh dấu. Ví dụ bạn có thể thêm mỗi điểm đánh dấu trong một mảng và sau đó để loại bỏ, bạn có thể tìm thấy điểm đánh dấu này vào mảng và đặt val trong bản đồ null.

1

này làm việc cho tôi:

một currentId thứ hai, nếu bạn có một ý tưởng tốt hơn, cho tôi biết

var actualMarkerId = 0; 
var currentId = 0; 



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

Đối với thay đổi tối thiểu

var newid=0; 

for (var index in results){ 

var marker = new google.maps.Marker({ 

map: map, 
icon: image, 

__gm_id: = newid+1, 

}); 
} 

Bây giờ đánh dấu [ '__ gm_id' ] vẫn có giá trị

2

Chỉ cần chuyển điểm đánh dấu của bạn vào hàm rightclick. Ví dụ:

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)}); 

Và làm cho các chức năng tìm kiếm này:

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

dấu của bạn sẽ được tháo trên rightclicks.