到目前为止,我的程序主动将json数据加载到地图上作为用户平移和缩放的标记。但是,每次在加载新标记之前完成此操作时,我需要清除现有标记。这段代码可以工作并删除标记,但只有当它附加到按钮时才会单击DOM侦听器。
var features = map.data.addGeoJson(data);
google.maps.event.addDomListener(document.getElementById('removeBtn'), 'click', function () {
for (var i = 0; i < features.length; i++)
map.data.remove(features[i]);
});
这是我的代码
function initialize() {
var mapCanvas = document.getElementById('map-canvas');
var mapOptions = {
center: new google.maps.LatLng(39.50, -98.35),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(mapCanvas, mapOptions)
google.maps.event.addListener(map, 'idle', function() {
try{
for (var i = 0; i < features.length; i++) {
map.data.remove(features[i]);
}
}catch(err){
console.log("fail")
}
$.getJSON("/static/json/data.json", function(data) {
var features = map.data.addGeoJson(data) {
});
});
});
}
google.maps.event.addDomListener(window, 'load', initialize);
GEOJSON数据
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
-84.375,
36.31512514748051
]
}
}
]
}
如何处理此问题,以便'idle'事件侦听器在加载新标记之前清除现有标记?
答案 0 :(得分:1)
您不需要在某处存储功能,地图就知道功能。
只需执行以下行即可从地图中删除所有要素:
(function(m){m.data.forEach(function(f){m.data.remove(f);});}(map))
答案 1 :(得分:1)
代码的问题是getJSON回调中var
之前的单词features
。
删除该字词。
然后,您将写入全局features
变量。你的for循环将能够删除它们。