ThinkGeo.com    |     Documentation    |     Premium Support

ServerLayerOverlay not getting refreshed

Hello,


Doing a map refresh after removing and re-adding a ServerLayerOverlay is not working for us. We are using Map.EditTools functionality for drawing features on the map, and at the same time are saving them in the database using a WCF service call.


Now the problem arises when we try to redraw the corresponding ServerLayerOverlay in the callback function of the service call. The ServerLayerOverlay and Map do get updated, but it does not show the change on the map until we pan the map or do some manual interaction.


void client_RefreshServerLayerCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    UnloadServerOverlay(MapOverlayType.RedLine); // Removes the ServerLayerOverlay from     Map.Overlays collection
    ShowOrHideOverlay(MapOverlayType.RedLine, true); // fetches the updated ServerLayerOverlay from MapConnector
    Map1.Refresh();
}


It sounds funny, but this is what we are dealing with. Any help would be greatly appreciated.
 
Thanks and Regards,
ankit

 


 



Epic, 
  
 Use callback to update the serveroverlay at server side, after updating, the extent or zoomlevel of map in client side keeps the same, doesn’t have any changes, so that the map don’t need to refresh, so that you have manually call map.Refresh after wcf callback. 
  
 When you call Map.Refresh, could you use the event of shapefilefeaturesource, to make sure the server side did drawing operation. If not, that means it doesn’t has redraw operation, it’s maybe our bug that we will try to create a simple sample to reproduce it. If so, you need to check if the data are been updated by wcf, the update fail may cause the problem. 
  
 And when do the panning or other operation, it also call Map.Refresh() method, the same as ZoomToExtent, please use client side event OnExtentChanging to determine if it redraws map when calling Refresh even the two extents are the same. 
  
 Thanks, 
  
 James

James, 
  
 Thanks for the response. And sorry for replying toy our response this late.  
  
 If I am getting your point right, that is exactly what we are doing.    
  
 
            MapWCFServiceReference.MapWCFServiceClient client = new MapWCFServiceReference.MapWCFServiceClient(
                WSConfig.MapWCFServiceConfigurationName, WSConfig.GetMapWCFServiceEndpointAddress());
            client.SaveFeaturesCompleted += _client_SaveFeaturesCompleted;
            client.SaveFeaturesAsync(jsonString);

           private void _client_SaveFeaturesCompleted(object sender, MapWCFServiceReference.SaveFeaturesCompletedEventArgs e)
          {
              MapWCFServiceReference.MapWCFServiceClient client = new MapWCFServiceReference.MapWCFServiceClient(
                WSConfig.MapWCFServiceConfigurationName, WSConfig.GetMapWCFServiceEndpointAddress());
              client.RefreshServerLayerCompleted += client_RefreshServerLayerCompleted;
              client.RefreshServerLayerAsync(LayerNames.RedLine.ToString());
          }

          void client_RefreshServerLayerCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
          {
              m_parentPage.SetInlineBusyStatus(false);
              UnloadServerOverlay(MapOverlayType.RedLine);
              ShowOrHideOverlay(MapOverlayType.RedLine, true);
          }
 
  
 Map1.Refresh() is called in ShowOrHideOverlay() function.  
  
 So basically we are first saving the drawn feature in the database using a WCF service, SaveFeatures, and then are trying to refresh the client side ServerLayerOverlay by calling another WCF service, RefreshServerLayer. And refreshing the map in the callback function of the second service.  
  
 The ServerLayerOverlay object in the MapConnector is refreshed after the second WCF call is verified by seeing the changes on the map. But the problem is the given layer does not get refreshed right away. I even tried ExtentChanged event as you suggested. I could see the event getting fired from ShowOrHideOverlay() function, but the LayerOverlay does not get refreshed until a pan event on the map. 
  
 ankit 
  


Epic, 
  
 Thanks for your sample code, I will discuss with our development team and figure out the problem, any progress I will let you know, 
  
 Thanks, 
 James

Hi Epic, 
  
 Could you try this code instead of Map1.Refresh()? 
  
 Map1.ZoomTo(Map1.CurrentExtent, OverlayDrawType.Redraw);  
  
 If that don’t works for you, please try this again: 
  
 ServerLayerOverlay.Draw(Map1.CurrentExtent, OverlayDrawType.Draw); 
  
 Please let me know the test result. 
  
 Regards, 
  
 Don