ThinkGeo.com    |     Documentation    |     Premium Support

Server Caching issues

I am experiencing a new problem which I believe to have started with the recent upgrade.  I was unable to successfully restore to the previous version of Map Suite Web so I am unable to confirm that this issue was not happening before.  The problem occurs with server side image caching.  We are using a MrSid image as part of our static layer that gets cached server side.  The initial build with a dyanamic overlay works just fine.  Everything draws correctly and everything lines up.  However, if you start panning a little to the left or to the right, the dyanamic layer is no longer in synch with the static layer.  It is as if the dynamic layer properly pans and shifts the images slightly left or slightly right, but the static layer redraws the previous image.  I've attached a sample showing how the dyanamic layer shapes don't properly line up with the static layer imagery.  Map_on.jpg is when the two overlays line up.  Map_off.jpg is when the two overlays are not in synch.  If I turn off server side caching of the static layer everything is fine.  Like I said, from the best I can tell, it is as if the engine is using the cached image of the original image rather than redrawing or using a different cached image for the new extent. 


I hope I was able to convey the problem at hand. 


 


Thank you,


Binu



Hi Binu,



Sorry, I can’t recreate your issue; I tested by the following code in our installed sample which you can find at Samples\ SatelliteImage\LoadAMrSidImage.aspx and it works fine. 
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
        Map1.CurrentExtent = new RectangleShape(-80.5, 68.9, 80, -60.43);
        Map1.MapUnit = GeographyUnit.DecimalDegree;

        MrSidRasterLayer sidImageLayer = new MrSidRasterLayer(MapPath(@"~\SampleData\World\World.sid"));
        sidImageLayer.UpperThreshold = double.MaxValue;
        sidImageLayer.LowerThreshold = 0;
        Map1.StaticOverlay.Layers.Add(sidImageLayer);

        ShapeFileFeatureLayer citiesLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/USA/cities_a.shp"));
        citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.City3;
        citiesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
        citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = new TextStyle("AREANAME", new GeoFont("Verdana", 9), new GeoSolidBrush(GeoColor.StandardColors.Black));
        citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.HaloPen = new GeoPen(GeoColor.StandardColors.White, 2);
        citiesLayer.DrawingMarginPercentage = 50;
        Map1.DynamicOverlay.Layers.Add(citiesLayer);

        Map1.StaticOverlay.ServerCache.CacheDirectory = MapPath("~/ImageCache/" + Request.Path);
    }
}

Also I can’t find your attached sample. If it’s inconvenient, please send it to support@thinkgeo.com and ask to forward to Howard.



If you have any questions please let me know.



Thanks,



Howard



Howard,


Thanks for checking this out.  The only thing you were missing from your source to re-create this issue is the following line:



Map1.StaticOverlay.TileType =



TileType.SingleTile; 

I'm attaching a jpg image of what the map looks like when the dynamic layer is not in synch with the static layer.  Again, it is like the static layer is just pullling from cache the original image.



 


You should be able to recreate this problem now by setting the StaticOverlay TileType to SingleTile. 


 


Thank you,


Binu




Binu, 
  
 Here is some misunderstanding for cache system. 
  
 In single-tile type, we don’t support cache system although it can be turned on. The images are generated dynamically whenever the viewport extent changed; so that the extent is always changing, in another word, cache is useless for single tile type which only makes your performance lower. 
  
 While in multi-tile type, we have a fixed algorism to calculate the tiles which will be always the sample tile, so cache can improve the performance better in this type. 
  
 We recommend you to use multi-tile instead here. 
  
 If you have any questions please let me know. 
  
 Thanks, 
 Howard

Howard,


 


I am somewhat troubled by your response for two reasons. 



        
  1. If you follow the thread concerning Building Cached Images, gis.thinkgeo.com/Support/Dis...fault.aspx, you will see that we have an ongoing issue with the product where our MrSid images are taking approximately 2 seconds to render.  If you do this with tiling, with approximately 15 tiles, it takes about thirty seconds.  This is unacceptable.  We have to use single tile, which still takes the two seconds to render.  Ben has told me they are working on the issue and hope to someday speed things up.  Once we get the render time down to fractional seconds, then we can go back to tiling.

  2.     
  3. I just uninstalled the update and reinstalled the previous version, 3.1.16, and used the exact same code with SingleTile and static layer server side caching.  Everything worked just fine.  The images rendered correctly, from cache, and synched up with the dynamic overlay.  I also think this was much faster when it retrieved from cache. 


 


Thank you,


Binu



Binu, 
  
 I understand your scenario. But cache is really useless when using Single Tile Type as I explained. Since 3.1.124, we update the cache system which may have some bug; we’ll have it fixed soon around these days and please remove the server cache code temporary. I’ll let you know when we have this fixed, also please keep an eye on our web site. 
  
 If you have any questions please let me know. 
  
 Thanks, 
 Howard