-1


我目前正在开发一个跨平台应用程序,该应用程序有一个谷歌地图,上面有一大堆图标。我使用 Ajax 查询来获取具有 lat/lng 值列表和对象类别的 kendo ui 移动数据源。
从那里,当用户选择打开该类别时,这些标记会出现在地图上。这目前有效,但删除它们是问题。

当我去删除它们时,我不知道如何删除具有特定标签的所有标记。是否有一个全局标记数组,我可以遍历以找到要删除的适当标记?
如果有,我可以简单地将这些特定标记映射设置为 null 以删除它们。
我添加标记的代码如下:

    var dataItem;
    var facData = new kendo.data.DataSource({
        ........
    });
    facData.fetch(function() {
        if (e.checked == 1) {
            for (var i = 0;i < facData.view().length;i++) {
                dataItem = facData.view()[i];
                dataItemLatLng = new google.maps.LatLng(dataItem.lat, dataItem.lon);
                createMarker(dataItemLatLng, "Toilets", toiletIcon);

            }                
        }
        else {
            Code for removing all markers with label "Toilets" 
        }
    })
}
4

2 回答 2

0

在一些外部范围内:

var markers = [];

以及创建/删除标记的函数:

function foo() {
    var facData = new kendo.data.DataSource({
        ........
    });
    facData.fetch(function() {
        if (e.checked == 1) {
            for (var i = 0; i < facData.view().length; i++) {
                var dataItem = facData.view()[i];
                var dataItemLatLng = new google.maps.LatLng(dataItem.lat, dataItem.lon);
                var marker = createMarker(dataItemLatLng, "Toilets", toiletIcon);
                markers.push(marker);
            }
        }
        else {
            while(markers.length) {
                markers.pop().setMap(null);
            }
        }
    });
}

您需要确保createMarker()返回创建的标记。

如所写,markers当标记从地图中移除时,数组被清空。这似乎是明智的,否则,下一轮数组仍将包含对旧标记的引用以及对所有新标记的引用 - 大部分时间,这意味着从与上次相同的数据创建的重复标记......等等等等。

于 2013-07-01T03:09:07.787 回答
0

我创建了一个全局数组,每个标记在添加时都会被推入。然后删除代码很简单:

for(var i=0; i< markerArray.length;i++){
                if(markerArray[i].getTitle()=="Toilets"){
                    markerArray[i].setMap(null);
                }
            }
于 2013-07-01T03:35:11.253 回答