ThinkGeo.com    |     Blog    |     Wiki    |     Support

Javascript map dynamic layers refresh from server

I need refresh map dynamic layers using javascript.  I need to do some processing on the client side then have a method called on the server side to redraw the dynamic layers.


I have tried the following; however it does not make a server side call for me to reload map features.


How do I make this work


Thanks

- Amod


<img onclick="dosomething()">


function dosomething() {


//do client side processing here


// then call server side to redraw the map preferable without a page reload

// the below does not call any server side methods and hence I cant use it 

var dynamicOverlay = myMap.getLayer("DynamicOverlay");

dynamicOverlay.redraw(true);


}


 



 Hello Amod,


 
Thanks for your post, your code is no problem if you just want to refresh the overlay, openlayer should work well. What's the problem have you met?The map does not refresh?
 
But if you want to do some work in the server side just before refresh, you can use Ajax to do this job. 
 
First, let your class inherit the ICallbackEventHandler, then implement the RaiseCallbackEvent and GetCallbackResult function.
 

        public string GetCallbackResult()
        {
            return "returnvalue";
        }

        public void RaiseCallbackEvent(string eventArgument)
        {
            ////do sever side processing here
        }

 
Then in the client side you call server and pass the parameters, it will raise the RaiseCallbackEvent and return value to js function by GetCallbackResult 

        function test() {
            callServer('parameters');
        }
         function callServer(param){
            <%= ClientScript.GetCallbackEventReference(this, "param", "receiveServerData", null)%>;
        }
        function receiveServerData(columnValue){
            alert(columnValue);
        }

 
I hope this can help, if I misunderstanding something, please feel free to let us know.
 
Regards,
 
Gary

Hi Gary 
  
 Thanks for your reply.  
  
 I tried the approach you suggested.  However may be I am missing some additional pieces of the puzzle. 
  
 So here is what I want to achieve: 
  
 I need to provide a button which calls my javascript does some processing on the client side which then requires me to redraw the dynamic layers of the map. 
  
 So using your suggestion, I now call the server, regenerate the map like so: 
  
  
public void RaiseCallbackEvent(string eventArgument)
{
        InMemoryFeatureLayer eachFeatureLayer = new InMemoryFeatureLayer();
        eachFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
        eachFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap;
        eachFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = new GeoImage(System.Web.HttpContext.Current.Server.MapPath("someicon.gif"));
        MultipointShape multiPtShape = new MultipointShape();
        multiPtShape.Points.Add(new PointShape(Val1, lVal2));
        eachFeatureLayer.InternalFeatures.Add(new Feature(multiPtShape));
        Map1.DynamicOverlay.Layers.Add(someLayer);
}
 
  
 Then do the following in javascript: 
  
  
        function receiveServerData(columnValue){
            var dynamicOverlay = myMap.getLayer("DynamicOverlay");
            dynamicOverlay.redraw(true);
        }
 
  
 However, the dynamic overlay of the map drawn has the same pins as the prior not the new points. 
  
 How do I get the map to show the new dynamic overlay. 
  
 Thanks 
 - Amod

 Hello Amod,


 
Generally your code has no problem, just one place I feel strange is you create a eachFeatureLayer but use somelayer to add into DynamicOverlay.
 
I have tested your code and everything is ok, the DynamicOverlay can be refresh and shows the new pointshape, please get the attached file and have a try.
 
Please feel free to let us know if you can't make it work or you have any more queries.
 
Regards,
 
Gary

001_Overlays.zip (3.02 KB)

Thanks Gary.  I was able to get things to work using the example you provided.

Hello Amod, 
  
 You are welcome, please don’t hesitate to let us know your questions. 
  
 Regards, 
  
 Gary