我有一个javascript函数,可以创建一个传单图层组,将其添加到地图中,删除它然后重复。每次,它都会通过一个json数组,该数组包含放置在图层组中的数据。效果是地图上数据点的动画。
有两个数据集格式化为使用此功能进行动画处理。我们称他们为Nowcast和Forecast。在我的应用程序中,如果我按以下顺序运行动画:
临近预报,预报,临近预报,预测,临近预报
在第三次Nowcast运行中,看起来预测中的一些数据与Nowcast数据一起显示。不是所有数据,只有几次迭代,但它只是坐在那里,并且在动画结束时不会消失。获得这种奇怪的残留数据的唯一方法是再次运行预测动画。 (再次运行Nowcast不会将其删除)。
无论如何,这是功能:
function animateAshData(inputData,dataLayer) {
var currentTime = inputData.ashData[t];
var currentAshData = currentTime.concentrations;
window.Android.toLogCat("t = " + currentTime.date + " " + t);
window.Android.toLogCat("Current set size= " + currentAshData.length);
if (dataLayer != undefined) { //The map has a data layer already been created from previous time step, so remove it
removeDataLayer(dataLayer);
}
var currentAshLayerGroup = new L.LayerGroup();
for (j = 0; j<currentAshData.length; j++) {
L.marker([currentAshData[j].lat, currentAshData[j].lon],{icon: ashIcon}).addTo(currentAshLayerGroup);
map.addLayer(currentAshLayerGroup);
};
t = t+1;
// Queue up the animation to the next time step
tid = setTimeout(function(){
if (t > finalt) {
//end of animation
window.Android.toLogCat("Done with animation");
removeDataLayer(currentAshLayerGroup);
window.clearTimeout(tid);
} else {
// delete currentTime.concentrations;
clearMap();
animateAshData(inputData,currentAshLayerGroup);
}
}, 100);
我的第一个想法是图层组以某种方式持久存在,即使我在那里有一个map.removeLayer(图层)(尽管为什么它需要3次迭代而不是2次才能显示出来,这是神秘的... )。所以,我创建了一个removeDataLayer()函数并添加了一个layer.clearLayers()。这也不起作用。我终于在这里添加了函数Clear all polylines from leaflet map来尝试清除所有内容,但这仍然无效。这是我的removeDataLayer函数:
function removeDataLayer(layer){
map.removeLayer(layer);
layer.clearLayers();
clearMap();
};
function clearMap(){
for(i in map._layers){
if(map._layers[i]._path != undefined)
{
try{
map.removeLayer(map._layers[i]);
}
catch(e){
console.log("problem with " + e + map._layers[i]);
}
}
}
};
无论如何,我无法想象我是唯一一个有小叶层相互干扰和/或完全消除它们的问题的人。提前谢谢。