小叶层以某种方式相互干扰

时间:2013-11-25 15:16:07

标签: javascript animation leaflet

我有一个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]);
            }
        }
    }
};

无论如何,我无法想象我是唯一一个有小叶层相互干扰和/或完全消除它们的问题的人。提前谢谢。

0 个答案:

没有答案