Layer "Refresh" erzwingen?

Hallo zusammen,

seit bereits einiger Zeit verwende ich folgenden Schnippsel, den ich auf des Netzwolfens Internetseite gefunden habe :wink:

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

var meinlayer=new OpenLayers.Layer.PopupMarker('Punkte',.....
map.addLayer(meinlayer);

und dann irgendwo anders, wenn du ihn auffrischen willst

meinlayer.redraw();

Grüße, Max

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

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();
...}

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

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… :wink: )