x

Layer "Refresh" erzwingen?


  1. Layer "Refresh" erzwingen? · Ghostrider82 (Gast) · 19.01.2014 13:23 · [flux]

    Hallo zusammen,

    seit bereits einiger Zeit verwende ich folgenden Schnippsel, den ich auf des Netzwolfens Internetseite gefunden habe ;-)

    map.addLayer␣(new␣OpenLayers.Layer.PopupMarker('Punkte',␣{
    
    location:␣'data.php',
    
    createIconFromData:␣function␣(data)␣{
    
    switch␣(data.marker)␣{
    
    default:
    return␣new␣OpenLayers.Icon␣('icon1.png',␣{w:40,h:18},␣{x:0,y:0});
    case␣'1':
    return␣new␣OpenLayers.Icon␣('icon2.png',␣{w:50,h:23},␣{x:20,y:-10});
    case␣'2':
    return␣new␣OpenLayers.Icon␣('icon3.png',{w:50,h:23},␣{x:-50,y:-23});
    
    }
    
    },
    
    createTooltipFromData:␣function␣(data)␣{
    
    return␣'xyz';
    
    },
    
    reloadInterval:␣20000
    
    }));
    

    Damit lasse ich alle 20 Sekunden die Icons refreshen.

    Nun ist es allerdings nötig, dass ich dies nicht nur intervallgesteuert machen kann, sondern irgendwie über eine Funktion, so dass ich beispielsweise beim Anklicken eines Links diese Funktion ausführen kann, welche dann das Layer refreshed (also kein location.reload() sondern nur die Icons neu rendert (nennt man das so?))

    Ist jemandem was bekannt, wie man das bewerkstelligen könnte?

    Danke und Gruß
    Ghost


    • Re: Layer "Refresh" erzwingen? · maxbe (Gast) · 19.01.2014 13:30 · [flux]
      var␣meinlayer=new␣OpenLayers.Layer.PopupMarker('Punkte',.....
      map.addLayer(meinlayer);
      

      und dann irgendwo anders, wenn du ihn auffrischen willst

      meinlayer.redraw();
      

      Grüße, Max


    • Re: Layer "Refresh" erzwingen? · Ghostrider82 (Gast) · 19.01.2014 13:47 · [flux]

      War auch mein erster Gedanke bzw. Rechercheergebnis, aber das funktioniert nicht.

      var␣test␣=␣map.addLayer␣(new␣OpenLayers.Layer.PopupMarker('Punkte',␣{
      ....
      
      }));
      
      map.addLayer(test);
      
      setTimeout(function(){
      
      test.redraw();
      
      },␣2000);
      

      Ergebnis: layer_mapnik is not defined


    • Re: Layer "Refresh" erzwingen? · maxbe (Gast) · 19.01.2014 13:53 · [flux]

      Du musst auf den Layer Zugriff haben. Deshalb erst "meinlayer=new OpenLayers.Layer..." und dann erst "map.addLayer(meinlayer);". In deinem Code ist "test" ja nicht der Layer sondern der Rückgabewert von "map.addLayer()".

      Und der Layer muss als globale Variable verfügbar sein...

      var␣meinlayer;
      
      function␣init␣(){
      meinlayer=new␣OpenLayers.Layer.PopupMarker('Punkte',.....␣␣␣␣␣␣<-----␣da␣steht␣kein␣"var"␣davor
      map.addLayer(meinlayer);
      
      setTimeout(function(){
      ...
      meinlayer.redraw();
      ...}
      

    • Re: Layer "Refresh" erzwingen? · Ghostrider82 (Gast) · 19.01.2014 14:24 · [flux]

      Er sagt mir nun auch weiterhin, dass meinlayer undefined ist.

      //Vor␣Init␣noch␣var␣meinlayer;
      
      meinlayer=new␣OpenLayers.Layer.PopupMarker('Punkte',␣{
      
      location:␣'data.php',
      
      createIconFromData:␣function␣(data)␣{
      
      switch␣(data.marker)␣{
      
      [icons]
      }
      
      },
      
      createTooltipFromData:␣function␣(data)␣{
      
      return␣'xyz';
      
      }
      
      });
      
      map.addLayer(meinlayer);
      
      setInterval(function(){
      meinlayer.redraw();
      },␣1000);
      
      };␣//Init␣zuende
      

    • Re: Layer "Refresh" erzwingen? · maxbe (Gast) · 19.01.2014 15:47 · [flux]

      Ghostrider82 wrote:

      Er sagt mir nun auch weiterhin, dass meinlayer undefined ist.

      hmmm... Kann es sein, dass der refresh zu früh kommt? "map.addLayer(meinlayer)" braucht ja einige Zeit und wenn dann schon meinlayer.redraw() zuschlägt, bevor der Layer geladen und aufgebaut ist... probier doch mal ne Pause dazwischen, oder ein "if(meinlayer){meinlayer.redraw();}" (oder so ähnlich, ungetestet... 😉 )