ThinkGeo.com    |     Documentation    |     Premium Support

Refresh Some, not all overlays

Hey,


I have an application in which the client specifies criteria, and this criteria is used to generate a map with various layers.  Throughout the use of this application, clients will change this criteria and then look at the map again.


 


I could simply force a postback and redraw the entire map, but I would like to avoid this.  Some of the overlays will never change, while some of the overlays will change depending on the criteria specified by the client.


 


I would like to be able to reload only the changed the overlays without reloading the entire map, how can I go about this??


 


Thanks,


 


Eric 



Hello Eric, 



If you know which overlay you want to refresh, there is a easy way to do that, please see the code below: 


var map = Map1.GetOpenLayersMap();
var overlay = map.getLayer('ObjectOverlay');
overlay.redraw(true);



Regards, 



Gary



 Thank you so much, that was so easy!



Hello Eric,  
  
 You are welcome, any time you meet problems just let us know. 
  
 Regards, 
  
 Gary

Gary, 
  
 This does in fact redraw the layers on the client side, but it redraws them as is.  When I redraw the layers, I need them to change based on changes made to selected criteria.  Currently the map is initially drawn based on data loaded into a datatable, when the the datatable changes i need the layer to redraw based on the new information, not just redraw the layer that was in the map upon initial load.

Hello Eric, 
  
 Sorry I’m not understand your requirements very well. 
  
 Do you mean the user(or data) made some change to the layer, but when you redraw the layer, the change didn’t apply? 
  
 If so, could you please provide some sample or code? 
  
 Regards, 
  
 Gary

Hey, 
  
 My problem is that the client side redraws the layers, but only redraws the layers as the map first rendered them.  I need the serverside to redraw only specific Overlays, then pass those specific overlays to the client and redraw them as layers on the client side.

Hello Eric, 



Here has a sample, “Change Renderer”  button will fire the Serverside and add a feature into layer, but the map didn't redraw now, until you click the clientside “Refresh DynamicOverlay Only” button, as the Overlay redraws, the added feature takes effects on the map.





Is this fit your situation? 



Feel free to let us know the problems, 



Regards, 



Gary



Refresh.zip (276 KB)

 Gary,


 


This sounds promising, where is the sample??? link please ??


 


Thank you,


 


Eric


 


You just added it, let me look and then get back to you, 


 


Thanks



 This looks very helpful.  Now I just need to set it up so that one client side action fires the server side overlay update.



Eric, 
  
 I’m glad it helped, just let us know if you meet problem, we will try our best to help you coding easier. 
  
 Regards, 
  
 Gary

Gary, 



When I attempt to reference the overlay I want to redraw I get an error.  The error says that the Overlay doesn't exist, referencing the overlay in the main function works fine, but the button doesn't find it.


 


So within the button function the Map1.CustomOverlays collection is empty and I have no idea why.



        protected void Page_Load(object sender, EventArgs e)         {             OverlayClass = new Map_Overlays();             lblSession.Text = Session["SessionId"].ToString();              if (!IsPostBack)             {                 Map1.CurrentExtent = OverlayClass.GetExtent(Session["SessionId"].ToString());                 Map1.MapUnit = GeographyUnit.DecimalDegree;                 Map1.StaticOverlay.Layers.Add(OverlayClass.DefineBaseMap());                  GeoCollection<overlay> MapOverlays = OverlayClass.GetOverlays(Session["SessionId"].ToString());                  //LayerOverlay test = (LayerOverlay) MapOverlays[0];                 //Layer redrawtest = test.Layers[0];                 //Map1.DynamicOverlay.Layers.Add("redrawtest", redrawtest);                  //Map1.CustomOverlays.Add(MapOverlays[0]);                  foreach (Overlay mapLOLs in MapOverlays)                 {                     Map1.CustomOverlays.Add(mapLOLs);                 }                  LayerOverlay RedrawTest = (LayerOverlay)Map1.CustomOverlays["PenetrationOverlay"];                 int OverlayTestCount = RedrawTest.Layers.Count;              }          }          protected void Button1Click(object sender, EventArgs args)         {             LayerOverlay RedrawTest = (LayerOverlay)Map1.CustomOverlays["PenetrationOverlay"];             RedrawTest.Redraw();         }</overlay>



Hello Eric, 
  
 Sorry I can’t run your code, there are some new class which you create them, could you please provide more codes? A sample will be appreciate. 
  
 Regards, 
  
 Gary