ThinkGeo.com    |     Documentation    |     Premium Support

How can i load shp file one time for all users + Web Edition 3.0

hi all,


I am planning to use Map Suite Web Edition 3.0 in my web site to show some points.


my problem is when adding my layers, i have one layer (street layer) which take a lot of time to load (600000) street.


so what is need is, if there is any way to load only current road in this view so it will not load all of them?


or if there is any way to load all of them one time for all users, in application start for example and let all users use the same pre-loaded map?


finaly, what is the benifit of (ServerLayerOverlay) in silverlight , is it for the same issue, and if where should i declare that variable?


thanks.



Hi Ahmed,



I have a question for you; did you disable the index file in your application? For example is there any code like the following; if yes, please build the index file and remove this code; then try again.layer.RequireIndex = false;


Actually, when we render the map, we only get all the data in current view port not all of them.



I'm not quite sure what do you mean by "if there is any way to load all of them one time for all users, in application start for example and let all users use the same pre-loaded map?"



I guess there are two meanings. One is using HttpApplicationState which shares all the states by all the users. So you want to load the shapes from application every time. Unfortunately, we don’t support loading from it.



While another choice is cache tiles. For example we pre-generate all the tiles on the server side and all the user load the same images; not render the map on the fly?

If you want to do this; please set the server cache on the overlay which contains your street layer. Here is the code.layerOverlay.ServerCache.CacheDirectory = @"c:\\imageCache\";
layerOverlay.ServerCache.CacheId = "streetOverlay";



Silverlight ServerLayerOverlay is kind the same as the LayerOverlay; it is a quick way to help user to create their map service by very simple code.



Looking forward your feedback.



Thanks,

Howard

 



yes thankyou, i was build new index every time i run the code, once i comment it it goes litle faster, but it still slow. 
 i add the layers using: Map1.StaticOverlay.Layers.Add 
 let me show you all my code to give me advance, thanks very well, 
  
 if (!IsPostBack) 
             { 
                 Map1.MapUnit = GeographyUnit.DecimalDegree; 
  
                 String shapeFileName = @"C:\Users\Ahmed\Desktop\PolyGon\AdminBndy1.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(shapeFileName); 
  
                 String shapeFileName2 = @"C:\Users\Ahmed\Desktop\PolyGon\Oceans.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName2, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer2 = new ShapeFileFeatureLayer(shapeFileName2); 
  
  
                 String shapeFileName3 = @"C:\Users\Ahmed\Desktop\PolyGon\AdminBndy3.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName3, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer3 = new ShapeFileFeatureLayer(shapeFileName3); 
  
                 String shapeFileName4 = @"C:\Users\Ahmed\Desktop\PolyGon\AdminBndy4.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName4, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer4 = new ShapeFileFeatureLayer(shapeFileName4); 
  
                 // this is the layer that i want to ask about. 
                 String shapeFileName5 = @"C:\Users\Ahmed\Desktop\Links\Streets.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName5, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer5 = new ShapeFileFeatureLayer(shapeFileName5); 
                 worldLayer5.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Capital1("ST_NAME"); 
                 worldLayer5.DrawingMarginPercentage = 50; 
  
  
  
                 String shapeFileName6 = @"C:\Users\Ahmed\Desktop\POI\Hospital.shp"; 
                 //ShapeFileFeatureLayer.BuildIndexFile(shapeFileName6, BuildIndexMode.DoNotRebuild); 
                 ShapeFileFeatureLayer worldLayer6 = new ShapeFileFeatureLayer(shapeFileName6); 
                 worldLayer6.ZoomLevelSet.ZoomLevel10.DefaultTextStyle = TextStyles.Capital1("POI_NAME"); 
                 worldLayer6.DrawingMarginPercentage = 50; 
  
  
  
  
  
                  
                 worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1; 
                 worldLayer2.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Water1; 
                 worldLayer3.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1; 
                 worldLayer4.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1; 
                 worldLayer5.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad3; 
                 worldLayer6.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = PointStyles.City1; 
  
  
                  
                 worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                 worldLayer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                 worldLayer3.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                 worldLayer4.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                 worldLayer5.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level15; 
                 worldLayer6.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16; 
  
                 //LayerOverlay layerOverlay = new LayerOverlay(); 
                 //layerOverlay.ServerCache.CacheDirectory = @"c:\imageCache"; 
                 //layerOverlay.ServerCache.CacheId = "streetOverlay"; 
                 //layerOverlay.Layers.Add(worldLayer); 
                 //layerOverlay.Layers.Add(worldLayer2); 
                 //layerOverlay.Layers.Add(worldLayer3); 
                 //layerOverlay.Layers.Add(worldLayer4); 
                 //layerOverlay.Layers.Add(worldLayer5); 
                 //layerOverlay.Layers.Add(worldLayer6); 
  
                 Map1.StaticOverlay.Layers.Add(worldLayer); 
                 Map1.StaticOverlay.Layers.Add(worldLayer2); 
                 Map1.StaticOverlay.Layers.Add(worldLayer3); 
                 Map1.StaticOverlay.Layers.Add(worldLayer4); 
                 Map1.StaticOverlay.Layers.Add(worldLayer5); 
                 Map1.StaticOverlay.Layers.Add(worldLayer6); 
  
                 Map1.CurrentExtent = new RectangleShape(0, 78, 30, 26); 
                 Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#ff00ff")); 
  
  
                  
                 //Map1.Refresh(); 
             } 
  


Hi Ahmed, 
  
 You code is pretty good and I cannot find the performance issue through your code.  
  
 One thing I want to point out is that the index file can be created by two ways. One is writing code as you did. While another way is running the Map Suite Explorer; drag the shape files into the explorer. If there is no index files, the explorer will create the files automatically. Once the index files are generated, we don’t need to do it again. So please remove the code which used for generating the index files. 
  
 I guess slow is caused by your shape files. Could you please try the following options. 
 1. Set StaticOverlay as Single Tile Type and see how much time it costs. Here is the code: 
 Map1.StaticOverlay.TileType = TileType.SingleTile; 
  
 2. Send me your 7 shape files to see why it renders slowly. 
  
 3. Provide me how slow it is. For example in single tile mode, how long will it use for rendering the whole tile. 
  
 Looking forward your feedback and let me know if you have any questions. 
  
 Thanks, 
 Howard

hi mr.howard, 
  
 thankyou very well, actually i catched the error finaly, it was that i load all streets since the first zoom level, now if i load it since zoom level 15 or what ever i runs very fast. 
  
 thankyou for your patience.

Ahmed,



You are welcome. Some layers are a very small are in the world extent; so we don't need to set them through level 01 to 20. You cannot even see it although you have set it. So we usually set some specific zoom level for layers to gain better performance. 



For example: world map kit which you can access by the following address which has 20G more data; every layer has a specific level so that map control renders the feature in some specific level and extent only.

maps.thinkgeo.com



Please feel free to let me know if you have more questions.



Thanks,

Howard