ThinkGeo.com    |     Documentation    |     Premium Support

Shapefiles performance is good in map suite but not in VS software

I have about 60 shapefiles with the total size of 850mb. when i put them in map suite explorer, the perforamce is good after certain zoom levels. but when i load all these shapefiles in my software, the performace is bad. please suggest the right way of doing it.


here is the code


 




          Map1.MapUnit = GeographyUnit.Meter;
            LayerOverlay layerOverlay = new LayerOverlay();

            foreach (string fileName in fileNames)
            {

               ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(fileName);
                ShapeFileFeatureLayer.BuildIndexFile(fileName);
                layer.Open();
                ShapeFileType type = layer.GetShapeFileType();
                layer.Close();
                
                    if (type == ShapeFileType.Polygon)
                        layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
                    else if (type == ShapeFileType.Polyline)
                        layer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.ContestedBorder1;
                    else if (type == ShapeFileType.Point)
                        layer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1;

                    layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
       
               
                layerOverlay.Layers.Add(Path.GetFileName(fileName), layer);

               
            }
            Map1.Overlays.Add("shp",layerOverlay);

            Map1.CurrentExtent = GetFullExtent();
            Map1.Refresh();
 


Hi Rajanikanth, 
  
 Do you mean in deep zoom levels the performance is still bad? I can’t see any code that will cause the bad performance, maybe when it first loaded in a high zoom level, it will display the map, but as you zoom in, it will become faster. And the ShapeFileFeatureLayer.BuildIndexFile(fileName); will slow down the speed if there is no idx file, but it will build only once. So I think the code is correct. Could you please send a simple sample to us to find out the root problem? 
  
 Thanks, 
  
 Edgar

When i zoom in deeper, the performance is better. I have sent the tiny geo file with index files to support@thinkgeo.com. Shape file is about 85mb so sent the tinygeo file. Compare to Mapsuite explorer the overall performance is bad in VS. It would be great help if you can help me in finding the root cause.



Edgar, Did you get a chance to see or test the file i have sent?

Hi rajanikanth,  
  
 Thanks for your questions! 
  
 There are a couple of elements I think might explain the difference in performance between Map Suite Explorer and your application.  
 First, Map Suite Explorer uses SingleTile mode. You might try setting the TileMode for the LayerOverlay containing your shapefiles to TileType.SingleTile to see if this increases your performance. 
  
 There is a bit more overhead with the MultipleTile option, thus it is a bit slower, but it provides your users with a map that fills in the tiles as they pan/zoom the map. Some users prefer this behavior to a map that draws the entire area all at once as occurs with SingleTile. 
  
 If you choose to stay with MultipleTile and you have labels applied to your you might consider setting the DrawingMarginPercentages of your Layers to 0. By setting this value to 0 the map will not check an extra margin around the CurrentExtent to see if other labels might need to be drawn. By removing this check you should see a bit of an increase in performance but only if you are currently adding labels to the map. 
  
 Finally it seems you might be unnecessarily running the ShapeFileFeatureLayer.BuildIndexFile() everytime your application runs. There is a parameter on this method named BuildIndexMode where you can set DoNotRebuild. This will check to see if a spatial index exists for your shapefile and NOT rebuild the index if it already exists.

Ryan, 
 I tried using SingleTile as well, but the performance is still the same compare to MultipleTile. 
 I am not worried about loading time. I can remove the buildIndexfile(). 
  
 I request you to test the file in map suite and VS.  
  
  
  


Hi rajanikanth,


Thanks for sending your sample but we cannot accept an 85MB email attachment.


I think we need additional information about how the performance is 'bad'. 

You stated that "when i put them in map suite explorer, the perforamce is good after certain zoom levels. but when i load all these shapefiles in my software, the performace is bad."


It sounds like we are comparing the peformance of Map Suite Explorer after you have zoomed in several levels (fewer features are drawn), and the performance of the Map in Visual Studio at the highest zoom level where every single featuer from every layer is drawn on the map.


Is the performance of the map in Visual Studio good after you zoom in to certain levels?


As you zoom in, the map will only draw the features that are within the current map view so the amount of time needed to draw these features decreases. 

We recommend not loading very complex or very populous shapefiles until you are zoomed in several levels on the map. You can easily control when your shapefiles are drawn on the map by using the ZoomLevelSet for each Layer.


I would recommend reading through our WPF Edition QuickStart Guide where we demonstrate how to setup Layers to display at different ZoomLevels: wiki.thinkgeo.com/wiki/Map_S...tart_Guide



Ryan, 
 Let me explain it better… 
  
 1.  Since email attachement doesnt accept larger images i have sent the Tinygeo file instead of shape file to support@thinkgeo.com on 09/27/2012. I have also sent the dependent files as well along with the Tinygeo file in a compressed zip file. The zip file size is less than 1MB. I hope thinkGeo accept the zip file with less than 1 MB size. If not i shall resend it in acceptable format. 
  
 2. I have taken one sample(larger image) shape/tinyGeo file and tested it on Map suite and using VS software. The performance in Map suite is very much better compare to using VS software in any zoom level. I see more performance difference in heighst zoom level compare to lower zoom levels. 
  
 As per your suggestion I am displaying the layers at different zoom levels. But the performance difference is seen even using one shape file. 
 Hope it gives more clarity on my question… 
  
  
  


Hi rajanikanth, 



Just so I am clear, are you only using the code from your first post to display these shapefiles or have you modified your code? 

If you have modified your code please provide a solution containing all of this code. Most performance issues are a result of the code, not of the actual data.


I have loaded the TinyGeo file you provided and the map renders more quickly when you are zoomed in to a lower zoomlevel than when your are fully zoomed out, but this is expected behavior as there are simply more elements to render when zoomed out. Can you quantify the performance difference as well? Are you seeing that Map Suite is 2 seconds slower to render the map, or 10 seconds slower?


Also we need to be able to compare the two different performance results that you are seeing. What is the VS software? Do you mean Visual Studio or some other software package?


The current version of Map Suite Explorer does not have support for the TinyGeo format, so I have been unable to load your provided file into this tool to try and compare the performance. Can you e-mail the shapefile version of your elevations file? I would only need the .shp as you have provided the other elements of the shapefile in your first e-mail.



Just the same code. when i test single file, i comment the for loop and define the fileName. I call this code in Map1_Loaded call back.

Hi rajanikanth,  
  
 I just edited my previous post, can you review and reply to my new questions from that post?

1. I am using Visual Studio software 
 2. I cant send you the shape file as the file size is 85 mb. after compressing it comes about 65mb. 
 3. Even at full extent, map suite takes about 1 second. where as VS takes 7 to 10 seconds changing to next zoom level. There is one difference i forgot to tell you is that map suite doesnt display any colors. but in VS software i set the default line style, so displays with color. Not sure if that impacts the performance. 
  


I have uploaded .shp file to the following link. 
  
 sendspace.com/file/8zn0x8 


Hi rajanikanth, 



There is a difference in the rendering time between Map Suite Explorer and Map Suite WPF running in Visual Studio but I was not able to recreate a 7 to 10 second difference. 

For the WPF Edition in Visual Studio: 

I was seeing about a 3 to 4 second drawing time when using MultipleTile Mode and zooming to the the full extent of the map. 

I was seeing about a 1 to 2 second drawing time when using SingleTile Mode and zooming to the full extent of the map. 



Map Suite Explorer is a lightweight shapefile viewer designed to allow for the quick viewing of data that the Map Suite control supports. This includes shapefiles, and various raster files. As this is a simple tool just designed for quickly viewing data it does not implement the complex Styling features that are exposed the Map Suite API. Thus when you loaded your shapefile into Map Suite Explorer it used uses a very simple LineStyle with only an OuterPen, and it uses SingleTile for its TileMode. 



In your code you are using the ContestedBorder1 LineStyle for line-based shapefiles. This is a bit more complex LineStyle in that it it has potentially 3 separate pins, Inner, Outer, and Center pins so it will take the map control longer to draw this style. 

Additionally we default to using MultipleTile mode within the WPF Edition, and there is overhead to create these tiles and allow for only the necessary tiles to be drawn when panning. 



I don't see any other simple performance increases you can make to your code so I think you have two options: 



        
  1. Use SingleTile Mode. Each time a user pans or zooms the map the entire map will be redrawn. There is less overhead with this option and thus each full screen draw is quicker.

  2.     
  3. Use MultipleTile Mode. This mode will only draw the necessary new tiles as you pan the map, unchanged tiles will not be redrawn. Thus the entire map will not be redrawn as you pan the map. This can provide a bit smoother map in that part of the tiles remain visible on the map as you pan.



Ryan, 
 I think, There is a difference in performance results may be due to system configuration. the results i have sent you using singleTile mode.  
 Any ways… thanks for giving detailed response.

You are welcome!