2017-10-02 7 views
0

Ich entwerfe eine Anwendung mit Leaflet. Im Grunde muss ich mehrere WMS-Schichten hinzufügen und sie dann mit einer zeitgesteuerten Schleife durchlaufen. Dies ist der Code (immer noch ein Entwurf, ich habe es nicht getestet), aber ich vermisse eine Funktion für "showLayer(i)".Looping durch WMS Layer auf einer Karte

var osmUrl = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png', 
      osm = new L.TileLayer(osmUrl, {maxZoom: 18}), 
      mymap = new L.Map('map', {layers: [osm], center: new L.LatLng(41.69906, 12.39258), zoom: 5, maxZoom:8}); 

    var optionsArray =['opt1', 'opt2', ...]; 
    var layer = new Array(myoptionsArray.length); 

    for (i = 0; i < myoptionsArray.length; i++) { 
     l = L.tileLayer.wms(url, {optionsArray[i]}); 
     layer.push = l 
     l.addTo(mymap); 
     } 


    function myLoop(){ 
     ...count on i.... 
     showLayer(i); 
     timerID = setTimeout(myLoop, 500); 
    } 

    myLoop(); 

    function showLayer(i){ 
     ????? 
    } 

Antwort

1

Da in Ihrem Code layer (verwirrende Namensgebung!) Ist ein Array enthält Instanzen von L.TileLayer ...

function showLayer(i){ 
    layer.forEach(function(l){ l.removeFrom(map); }); 
    layer[i].addTo(map); 
} 

Beachten Sie auch, dass die korrekte Syntax array.push(foo) und nicht array.push = foo wäre. Beachten Sie außerdem, dass das Erstellen eines Arrays mit einer Anfangslänge push()weitere Elemente am Ende hinzufügen kann, anstatt das Array aufzufüllen.