ThinkGeo.com    |     Documentation    |     Premium Support

Building cached images

Greetings.  I am working with a very large mrsid file (2.5 gigs).  What I would like to know is what is the best way to go about building a library of cached images for the static layer?  I'm assuming there isn't a function with Map Suite Web that will do this.  I figured I could probably create some sort of algorithm to go through the various extents and generate them as some sort of batch process.  Is there an event that triggers after the map has rendered all of the tiles for a particular extent?  I'm seeing with my computer that each extent takes maybe one to two minutes to render.  With cached imagery it is almost instantaneous. 


Any thought or ideas would be appreciated...


Thank you,


Binu



Binu,


 We had a performance issue about MrSid in the previous release. We have solved it in the current version (3.1.16) so I suggest you to have the new version first and see if you need to do the caching any more. Here is a post you can get the detailed info about it. 
 
gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/21/aft/5076/afv/topic/Default.aspx
 
If you still need to cache the tiles, you can use LayerOverlay.GenerateCacheImages() for it. Here is the code and just remind the 1st parameter is the scale the tiles are under. 

MrSidRasterLayer sidImageLayer = new MrSidRasterLayer(MapPath(@"~\SampleData\World\World.sid"));
sidImageLayer.UpperThreshold = double.MaxValue;
sidImageLayer.LowerThreshold = 0;
Map1.StaticOverlay.Layers.Add(sidImageLayer);
 
//Turn on the server cache
Map1.StaticOverlay.ServerCache.CacheDirectory = @"C:\MapCache";
 
//The following codes generate the images for zoomlevel01~06. Please remove these codes after the cache are generated.
RectangleShape cacheExtent = new RectangleShape(-180, 90, 180, -90);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[0], cacheExtent, GeographyUnit.DecimalDegree);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[1], cacheExtent, GeographyUnit.DecimalDegree);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[2], cacheExtent, GeographyUnit.DecimalDegree);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[3], cacheExtent, GeographyUnit.DecimalDegree);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[4], cacheExtent, GeographyUnit.DecimalDegree);
Map1.StaticOverlay.GenerateCacheImages(Map1.ClientZoomLevelScales[5], cacheExtent, GeographyUnit.DecimalDegree);

Thanks,
 
Ben

Ben,


Thank you for the reply.  I updated to the latest and greatest.  I am seeing some improvement, but it is still taking approximately 4-5 seconds per tile to load.  There are anywhere from 15-20 tiles to load.  Is that reasonable?  I know it also depends on other layers included in the static layer.  I have about 6-7 shapefile layers on the static overlay along with the one mrsid layer.


 


Binu



Binu,


  I want to make sure I understand thing.  First could you go to the post in the earlier message and download the attachment.  Make sure that the MrSid dll in the directory below and overwrite the old one.


C:\WINDOWS\system32\MapSuiteGeoRasterX86


I added the attachment again to make sure you have the right one.


  When you say it takes 4 or 5 seconds per tile to load do you mean the tiles on the web map control?  It should not take that much time at all.  For the shape files do you have spatial indexes built for them?  To check there should be a .idx and .ids for each shape file.  If not then this is for sure slowing you down.  To build them you can call the static method on the ShapeFileFeatureLayer called BuildIndex.  To test how fast the layers are taking to draw I believe there is a property on each layer called DrawingTime.  This is the time it took the last time the layer was asked to draw.  In this way you can post back for a quick check and see where the majority of the time is being take.  I strongly suggest you check if there are those .idx and .ids files.  They make all the difference in the world.


David



400-MapSuiteMrSidsX86.zip (22.3 KB)

David,


 


I really appreciate the assistance and ideas on this.  Of course performance is very important.  I did as you instructed.  I copied the latest dll into the directory and recreated all shapefile indices.  I am seeing improved performance.  I did some time tests and am getting interesting results.  Let me share them with you.  Bear in mind that I did this test using the VS Development Server with all shapefiles and image data residing on the same machine. 



 



Map1.StaticOverlay.TileType = TileType.MultipleTile


Rendering time = ~ 50 seconds


Drawing Time - timespan values (Image is MRSID, all others - shapefile)




    
        
            COUNTY
            00:00:00.0882576
        
        
            IMAGE
            00:00:03.1866758
        
        
            PARCEL
            00:00:00.0000264
        
        
            WATER
            00:00:00.0352366
        
        
            ROAD
            00:00:00.0000257
        
        
            TWNSHP
            00:00:00.0019071
        
        
            SECTION
            00:00:00.0035110
        
    


 


Map1.StaticOverlay.TileType = TileType.SingleTile


Rendering time = ~ 4-5 seconds




    
        
            COUNTY
            00:00:00.1310674
        
        
            IMAGE
            00:00:03.1401564
        
        
            PARCEL
            00:00:00.0000259
        
        
            WATER
            00:00:00.0325888
        
        
            ROAD
            00:00:00.0000260
        
        
            TWNSHP
            00:00:00.0108590
        
        
            SECTION
            00:00:00.0190089
        
    


As you can see, the drawing times are reasonable, and in the case of of a single tile, the map renders within five seconds.  However, with the tiling, 50 seconds to render the map is rather long.  Why do you think there is such a difference?  I thought the tiling was supposed to be faster.  By the way, I did turn off caching on this test so that extra time would not be used in saving off imagery.  One other thing I did is publish the application to the webserver using a single tile and accessed the map through the internet.  I took approximately fifteen seconds to fully download the map.


Thanks again for all of your help.  You guys are great!


Binu



Binu, 
  
   We appreciate the kind words.  Thank you for sending me the render times this help allot.  Tiling is inefficient versus drawing a single tile.  The reason is that tiling mean you are drawing lots of small single tiles and then putting them together.  There is allot of duplicate data read, drawn etc.  The reason tiling seems faster on things like Google Maps is that the image are pre-rendered and just sitting on the disk.  This is the same way with caching.  If you had all the data cached it would not need to draw anything.  If you combine multi tile with caching then you start to see speed increases and lower CPU time once much of the data that is frequently used is cached. 
  
   With that said let’s look at the issue.  There is definitely something wrong with the MrSid layer.  As you can see the other layers are really fast in comparison.  The Mr Sid layer is taking the majority of the time at 3+ seconds.  This is WAY too slow.  It should be more like 0.2 seconds.  If we can get there  then it will be fast tiled or not.  The reason the multi tiled version is 50 seconds is because it is taking 3 seconds for each small tile on the Mr Sid layer.  The times you see on the multi tile is the last small tile drawn.  You need to multiply them by the number of tiles to get the real time for all the tiles.  You see what I mean? 
  
   I have a feeling that the new DLL is not being called.  Could you do a test for me?  Can you go into the directory and delete the file you updates.  Well actually back it up somewhere first.  I want to make sure you are using this dll and not some other one.  There might be an issue where your version of the API is not using this dll and the one it is has the old bug.  Once you move it somewhere run your test again.  If it fails then we know it is using the dll we want.  If it draws then we know it is using some other dll.  I hope it fails as that means we know you are not on the latest version of the software.  If it works then we need to consider you uploading the large MrSid file so we can test it here.  We can create an FTP account or you can mail us a link to where we can download it.   
  
 David

David,


I did as you asked.  I renamed the dll and the system generated errors.  It would not run without that dll.  I guess it is hitting the right one.  I also tried to redownload the image file to make sure I wasn't working with a slightly corrupt one.  Stil no luck with the same results.  I also tried referencing the image file in the ThinkGeo MRSID sample application.  I figured that would be a stripped down test with nothing extra getting in the way.  I retrieved the draw time and it was the same at about three seconds.  I guess at this point I would appreciate it if you could try the test on your end.  Fortunately the image file is available for download from the California GIS website.  The link to the folder containing the sid file is


casil.ucdavis.edu/casil/imag...Barbara_1/


You will only see one sid file there.  The name is naip_1-2_1n_s_ca083_2005.sid.  It is a NAIP mosiac imagery of Santa Barbara county in California.  By the way, are there any other files (extensions) associated with a sid file?


Thanks again for all of your help.  I am eager to know your results.


Binu



Binu, 
  
 We are downloading it now and as it’s too big, we will work on that tomorrow. Just let you know. 
  
 Thanks, 
  
 Ben

Binu,


Seem we couldn't finish downloading the file as the web page is removed or something. Can you check it so we can continue downloading?



Thanks,


Ben



That is so bizarre!  I don't know why that site is down.  I'm sure it is temporary.  Anyway, I was able to find another link for the file.  Please try the following:


ftp://ftp.apfo.usda.gov/pub/Gateway...2005_3.sid


If you need additional files associated with this, please use the same url minus the sid file,


ftp://ftp.apfo.usda.gov/pub/Gateway...o_imagery/


I hope this works better.  Again, I don't know what happened to the other site.  Sorry for the inconvenience.


 


Binu



Binu, 
  
 It doesn’t matter, that things happen. I’m downloading the other sid file (ortho_1-2_1n_s_ca083_2005_3.sid) and it 25 hours left. So maybe we have to work on it tomorrow.  
  
 Thanks, 
  
 Ben. 


Binu, 


We downloaded the big file and yes, it takes about 3~4s for every tile. We improved the MapSuiteMrSids dll and the performance improves for about 20%. It will not meet your ultimate requirements and we are still looking up how we can improve the performance even more.
 
Thanks,
 
Ben

442-MapSuiteMrSidsX86.zip (20.4 KB)

Ben,


Thanks for your efforts on this.  Any improvement does help.  I'll try out the new dll.  That would be great if it does eventually get faster.


Binu



Binu, 
  
 Just let you know that after more investigation, we found the MrSids Dll (posted in the above message) has caching mechanism built in but we don’t take a very good advantage of it. I have added it to our Issue Tracking system and hopefully we can figure it out in the next version. 
  
 Thanks, 
  
 Ben  


Hello.  I noticed there is an updated web edition evaluation version posted on your site.  However, I am unable to find the equivalent web edition full version of the product.  I was wondering when that posting would happen?  Also, with the new update, has there been any improvement with the speed of rendering MrSid images as was discussed in this thread?  Will a full listing of all enhancements and bug fixes for this update be available?


 


Thanks,


Binu



Binu, 
  
 I will make sure with our WebSite Administrator that all versions are available on the site. We will also make sure the bug/enhancements list is available too. 
  
 We spent days investigating the MrSid performance but couldn’t find a way to take a good advantage of its built-in caching in our product. I’m afraid the performance now may not meet your ultimate requirements and sorry for not being so helpful on this. It’s still on the TODO list though and we will work on it, I don’t think you will wait too long.    
  
 Thanks, 
  
 Ben

 Posted By Binu on 05-26-2009 10:15 AM 

Hello.  I noticed there is an updated web edition evaluation version posted on your site.  However, I am unable to find the equivalent web edition full version of the product.  I was wondering when that posting would happen?  Also, with the new update, has there been any improvement with the speed of rendering MrSid images as was discussed in this thread?  Will a full listing of all enhancements and bug fixes for this update be available?




Binu,



You can download the latest full version of Map Suite from the ThinkGeo Customer Portal, located here: helpdesk.thinkgeo.com



You should be able to login to the Customer Portal using the same username and password you use on this site.  Then, click the “My Download” link at the top left side of the page, and you will see a list of Map Suite products that you are able to download, with version numbers and serial numbers attached.  Please note that you’ll need to have a current Software Assurance Plan in order to access the latest version.



If you have any trouble accessing the Customer Portal, you can try the “Forgot Password?” link, or contact your ThinkGeo salesperson for assistance.  If all else fails you can email support@thinkgeo.com or give us a call toll-free at 1-866-847-7510 (outside North America, dial 1-785-727-4133 instead).



Additionally, you can always find the latest change logs over in our News and Announcements forum.  For each product, there is a Features & Bug Fixes change log and a detailed API change log.  Have a look there and see if those change logs give you the information you’re looking for.



Thanks!

ThinkGeo Support



Ben,


 


Thank you for responding to my post.  I am hopeful that you will be able to get some improvements made.  Our competitor is using some open source products and the rendering is really fast.  I believe they strip out a bunch of data from the SID file and break it up into chunks.  To have a better product than theirs,  we will have to have a faster rendering of the imagery.  Otherwise, your product is wonderful.  I am really enjoying developing with it.  


 


Thanks,


Binu 



Binu, 
  
 I see. We will defenitely work on this and if they can accomplish that, I have confidence we can make it too.  We will provide you a temporary dll when we find a solution for that, hope we can have it soon. 
  
 Thanks, 
  
 Ben