ThinkGeo.com    |     Documentation    |     Premium Support

Comments on our deployment

We have evaluated the World Map Kit, and decided to deploy it.   However, we did a lot of work to make it meet our needs.   I thought it might be helpful to to others to describe what we did, as well as provide suggestions to ThinkGeo about potential enhancements to the solution.


All of our customers are in North America, and most of them operate in only a few counties within a single state.   As such, the deployment size of the WorldMapKit in its native form was a showstopper for us.  To address this, we wanted to break the full install into a "Core" install that is required for all users, and then individual state installs that can be selectively installed by each customer.


Here are things that we did:



        
  1. We wrote a simple program that scanned the original USA folder for the tlka, lpt, etc sub folders. 
        

              
    • Within those, we created a subfolder for every distinct state-specific 2-character prefix that we found on the files, and moved all state-specific files into separate state-specific subfolders.  

    •         
    • While doing that, we also built index files for each individual shapefile so we could move away from the MultiShapefileFeatureLayer construct.

    •         
    • We wrote out a little script for our installation package, so that when completed, we had a pre-made install script for every state-specific dataset.

    •     

        

  2.     
  3. We edited the provided renderer class to do away with all of the MultiShapefileFeatureLayer constructs and replace with ShapefileFeatureLayer.  

  4.     
  5. We changed all of the "RenderSymbolLayer(new ShapefileFeatureLayer(...))  and RenderLabelLayer(...) methods to accept the name of the shapefile, and instantiate the layer within the method.  In this way, if the shapefile is not there, it can be easily trapped, skipped the rendering, and drive on with other files.    We have many shapefiles we did not want to distribute.  This is a change that ThinkGeo should make in future releases.

  6.     
  7. We created a RenderLayerDelegate so that we could pass a rendering function to a more generic shapefile processing class:   
        

     


        private delegate void RenderLayerDelegate(FeatureLayer layer);


  8.     
  9. In the locations that found all state-specific shapefiles and added them to a MultiShapefileFeatureLayer, we now call a generic multi-file processing function with a filename pattern and the rendering or labelling delegate.

  10.     
  11. We make the original RenderClass derive from the abstract Layer class, making this effectively a multi-layer layer.   We added a DrawCore method to draw the Feature and Label layers that were created from all of the rendering functions.


With this done, we have a single class that is Layer.   We instantiate it with the data folder in the constructor, and everything else is encapsulated.  We just add it to our map as a single layer, and it "just works".   The class will find any data that has been installed, and survive any missing data.   We've tested with 5 states loaded at one time, and we don't see any penalty for using multiple ShapefileFeatureLayers vs a single MultipleShapefileFeatureLayer.


If you find any of this useful, drop me a note for more info.   But, ThinkGeo guys, you might want to consider some of this as part of any new release you make.    I sure did like that all of the complex rendering classes were written.   Out of the box, the maps look quite good.  We have only done some zoom-level tweaking.



Ted, Thanks for your sharing! 
  
 I am very impressed with your great work and it did will give us some very useful suggestions! 
  
 I appreciate your contributions on our products very much! 
  
 Let me know if any problems happened! 
  
 Thanks. 
  
 Yale 


Ted, 
  
 I’m developing an internal Silverlight application and we’re only interested in seeing the street level data for several counties in Southern California. I was about to start “carving” out the RenderMap() that was included in the WorldMapKit demo to limit the shape files and layers that I would need when I came across your thread. 
  
 Sounds like you guys did a lot of brainstorming to pull this off and I appreciate that you shared your efforts with us. I’d be very interested to learn more of your approach. I can be reached at btitular@dispatchtrans.com
  
 Bob 
  
  


Bob… I’m blowing off the weekend after a long week.   I’ll send you the source code to the little tool we built to do this.    I’ll send the updated RenderClass to ThinkGeo, and they can forward it.  As the original code was part of the world map kit, I do not want to redistribute that, but I have no problem if ThinkGeo wants to share it.

Ted, 
  
 No problem. I started breaking down the RenderMap() method to satisfy our needs and I believe I’m heading in the right direction. I’ll check this thread during the middle of the week. 
  


I have attached the source code and executable of a project called the WorldMapKitConverter.   It is pretty straight forward.


Think Geo Support:  Feel free to make this a code community project if you want.


I will e-mail the source for our modified RenderClass and ask them to share it to licensed users.



1044-WorldMapKitConverter.zip (15.8 KB)

Thanks Ted!

Thank you for sharing your code. Your idea has been added to the list of future projects in our Code Community.

This sounds like something that would be perfect for us as well. Any chance of getting a copy of the render code?



Skip, 
  
 Thanks for your post and welcome you to ThinkGeo MapSuite discussion forum. 
  
 If you want, you can contact our support for this(support@thinkgeo.com). 
  
 Let me know if any more questions. 
  
 Thanks. 
  
 Yale 


Skip, 
  
 The render code is a product we sell called World Map Kit.  It comes with the data and all the rendering code.  
  
 David

I’m aware of that; indeed I am using it now. I was specifically asking for your customer’s update to the render code which sounded like a more flexible approach. 
  
 Just as a side note, the render code that shipped with my copy of World Map Kit needed tweaking as it didn’t compile. Is there an update to it available somewhere?

Skip,  
  
 Can you tell me the date of the CSharp WorldMapKit Samples.sln on your World Map Kit disc? This will tell me if you have the latest version of World Map Kit.

Ted/all, 
  
 I realize this is somewhat unrelated, but we broke the USA data into base map data and then separate states. Wanted to deliver an distribution for each state. With the large datasets, we ran into problems with the Setup Installer within the Visual Studio - seems to be unable to build an MSI file even though there is 4 GB of RAM on the computer. Did you guys run into anything like this, and if so, what approach did you take?  
  
 thanks, 
  
 -jeff

That’s what we did… make a “Core” distribution of all of the world and USA stuf at large, and then a state-specific distribution for each state.   Our process rebuilt the state indices, and then we modified the renderer to work with reading each state LK* file (as an example) as a shapefile, rather than a multi-shapefile.      
  
 We are really happy with the world map kit after these tweaks.

 Posted By Ryan on 10-30-2009 09:24 AM 

Skip,  



Can you tell me the date of the CSharp WorldMapKit Samples.sln on your World Map Kit disc? This will tell me if you have the latest version of World Map Kit. 



Sure thing. Mine says 2/18/2009.



Skip,  
  
 I have e-mailed you directly the FTP login informaiton that will give you access to the latest World Map Kit code.

I was hoping that the new code incorporated some of the ideas that Ted suggested. I might also suggest that it would be good to update it to move away from the use of deprecated methods, since I assume the world map kit is intended to be kind of a "best practices" demonstration module as well. 



Skip,  
  
 I applaud Ted for publicizing the changes he made to the World Map Kit to meet his needs. He makes some very good points for future potential enhancements of the World Map Kit but at this time we have not made any changes to the World Map Kit. To achieve the same functionality as Ted you will have to follow his code examples provided earlier in this post.