ThinkGeo.com    |     Documentation    |     Premium Support

WorldMapKit Render Layer performance

We use the 6.0 Desktop Edition and the World Map Data Kit to display the maps in our application.  We have the World Map data kit shapefiles loaded on a server in our offices and we share the map files on that server among the active users for our application.  Typically we have less than 10 users of our application at any particular time.  I have also run the application with the World Map Kit Data located on the same machine as our application with only a single application using the files.


We have noticed very slow rendering of the map in our application when zooming or panning around the map.  I use the WorldMapKitRenderLayer class that was used in the DesktopEdition sample application on the WorldMapKit sample applications to build the layer and overlay of the map.  I have made a few minor changes (mostly to capture exceptions) in the class from the original source.  I have been looking for optimazation of the code for rendering the map and I have not found much except to eliminate shapefiles.  I spent some time looking at the WorldMapKit sample application which has a listview showing the timing of the various shapefiles as you zoom and pan around the map.  I have noticed a wide variation of timing from one-half second or less to as much as 20 seconds (rendering Canadians streets zoomed to a very low level).  Generally, after I have zoomed to a particular area around the 4th or 5th zoom level, I see a typical pan operation requires approximately 2 seconds.  Again using the sample application, I have observed that a majority of the time to render the map is very often used by the "labels" for the shapefiles.  I noticed that Labels are loaded as "dynamiclayers" while Symbols are loaded as staticLayers.  I am guessing that this is likely to be because the labels are generated only for the extent that will be visible for any particular rendering.


Can you offer any recommendations for optimizing the speed of rendering the map?  Would it be possible and worthwhile to "preload" the shapefiles in some sort of background thread?  Many of the shapefiles are specific to each state in the US.  This does not seem to be easy to preload shapefiles.  Do the shapefiles stay "cached" in memory after the first access?   If the labels are generated dynamically,  would there be any way to generate these in the background or for a larger extent?  Do you have any reccomendations on profiling the code to determine if there are any bottlenecks that we might improve on?


 


Thanks


Richard



I have an additional observation to the performance of the WorldMapDataKit application.  It is still baffling me so if anyone can give me an explanation it would be bery helpful.  I was monitoring the lenght of time our application spent in DrawCore in the WorldMapKitRenderLayer.  Oddly enough, when I ran our application alone the DrawCore would take approx 2.0 seconds for each pan or zoom operative at a certain zoom level.  I then started the WorldMapKit Sample Application for the DesktopEdition.  I did a few pan and zoom operations at the same or nearly the same zoom level. With the sample application still running, I returned to our application and did more pan and zoom operations.  These operations now spent nearly 1 second less than they had before starting the sample application or approx 1 seconds per pan and zoom.  I repeated this several times and it appears to be consistent.  When I have two applications accessing the WorldMapKitData, each rendering operation requires less time.  It can be less than half the time required when a single application is running. 
  
 Thanks 
  
 Richard

Hi Richard, 
  
 Sorry for the long time delay. 
  
 The basic reason that the performance of World Map Kit is bad is that the text styles’ drawing. Every feature’s drawing of text style has the topology operation, which is used to calculate the location of the text and the speed might be slow. At some middle zoom levels, there are a lot of labels drawn on the map, so in these zoom levels, the performance is not as good as the other levels. Another reason that effect the performance  might be the network delaying, the application read the data from the network, it will cost some time on that more or less, so one workaround is to put the data on a local machine. You said that you want to preload some layers in the background thread, it might not be a good choice cause the size of the entire world map kit data is about 24G; The shape files will not be cached in memory but the rtree will be cached; The reason we use the name “dynamicLayers” is that the labels position might have some offset after panning or zooming, not dynamically loaded. So The best way to improve the performance might be: 
  
      1. Put the data on the local machine. 
      2. Decrease the number of labels. 
  
 Regards, 
  
 Edgar