ThinkGeo.com    |     Documentation    |     Premium Support

Hangup problem in displaying multiple map layers read from xml file

Hi Tsui,


   I am testing a mapManager class which can read map layer shape files from a xml configuration file and display the layers correctly in a WGS84 map. Everything goes well except that when the final layer shape file is processed, the map loader application cannot respond to any Map GUI action, such as zoom in/out  and seems getting stuck at the display for ever. I call the loadMapFromXml method in Wpf_MapLoaded. What could be the problem? Thanks.


Franklin



002_001_MapLoaderClass.txt (5.28 KB)

Franklin, 
  
 Thanks for your sample code, I review line by line but I didn’t find any code may cause the problem. Could you provide your xml file as well so that I can reproduce your problem at my machine? 
  
 Thanks, 
  
 James

James, 
  
   Have uploaded the xml file to Ticket 3424. Please take a look there. Thanks. 
  
 Franklin

Franklin, 
  
 I think you add staticOverlay too many times, you can try to move “wpfMap1.Overlays.Add(staticOverlay);” outside the while loop because you only need to add it once. And also you set CurrentExtent every time and refresh wpfMap every time for each layer, I don’t know what your intention but you can move them out of the while loop and just call them once after loading all layers. 
  
 Thanks, 
  
 James

James, 
  
  Logically you are correct. I tried this outside the while loop several times already but nothing would be shown in the map area. So I was forced to the present approach, because at least it shows all the layers. Do you know why this weird thing happen?

Franklin, 
  
 I think your code might be wrong, could you provide the code which you put all metioned staff out of the while loop? And I can review again to check if I can find the problem. 
  
 Thanks, 
  
 James

I moved the following lines outside the loop and placed them just above  ShpFileTable[0].Close() (refer to the MapLoader txt file above) 
  
  
 wpfMap1.Overlays.Add(staticOverlay); 
                 if ((!ShpFileTable[0].IsOpen == true) && (ShpFileTable[0] != null)) 
                 { 
                     ShpFileTable[0].Open(); 
  
                 } 
                 RectangleShape extBox = ShpFileTable[0].GetBoundingBox(); 
                 wpfMap1.CurrentExtent = extBox; 
  
                 wpfMap1.Refresh(); 
  
 Then nothing could be shown in the map area when the method is called in Wpf_MapLoaded. Why?

Franklin,


That's weird I don't know what your problem. Could you do the following test to verify if the problem is caused by MapSuite or not?


Don't use xml file, just write code like our HowDoI samples, create 16 ShapeFileFeatureLayer and set the specific styles and apply to zoom level 20, add all layers to static overlay, and then add static overlay to wpfMap, set MapUnit, CurrentExtent, call Refresh(), such as following code. If it works that means it's not the MapSuite's issue, If it still has problem, please provide the code and we can figure out how to fix it.


            LayerOverlay staticOverlay = new LayerOverlay();

            ShapeFileFeatureLayer ShapeFileFeatureLayer1 = new ShapeFileFeatureLayer(path1);
            ShapeFileFeatureLayer1.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = yourAreaStyle1;
            ShapeFileFeatureLayer1.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = yourLineStyle1;
            ShapeFileFeatureLayer1.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = yourPointStyle1;
            ShapeFileFeatureLayer1.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ShapeFileFeatureLayer1.DrawingMarginPercentage = 100;

            ShapeFileFeatureLayer ShapeFileFeatureLayer1label = new ShapeFileFeatureLayer(path1);
            ShapeFileFeatureLayer1label.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = yourTextStyle1;
            ShapeFileFeatureLayer1label.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ShapeFileFeatureLayer1label.DrawingMarginPercentage = 100;

            staticOverlay.Layers.Add(layerName1, ShapeFileFeatureLayer1);
            staticOverlay.Layers.Add(labelName1, ShapeFileFeatureLayer1label);


            ShapeFileFeatureLayer ShapeFileFeatureLayer2 = new ShapeFileFeatureLayer(path2);
            ShapeFileFeatureLayer2.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = yourAreaStyle2;
            ShapeFileFeatureLayer2.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = yourLineStyle2;
            ShapeFileFeatureLayer2.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = yourPointStyle2;
            ShapeFileFeatureLayer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ShapeFileFeatureLayer2.DrawingMarginPercentage = 100;

            ShapeFileFeatureLayer ShapeFileFeatureLayer2label = new ShapeFileFeatureLayer(path2);
            ShapeFileFeatureLayer2label.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = yourTextStyle2;
            ShapeFileFeatureLayer2label.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ShapeFileFeatureLayer2label.DrawingMarginPercentage = 100;

            staticOverlay.Layers.Add(layerName2, ShapeFileFeatureLayer2);
            staticOverlay.Layers.Add(labelName2, ShapeFileFeatureLayer1label);

            // do the same way for other shape files
            ...

            wpfMap1.Overlays.Add(staticOverlay);

            wpfMap1.MapUnit = GeographyUnit.DecimalDegree;
            wpfMap1.CurrentExtent = new RectangleShape(-180, 90, 180, -90);
            wpfMap1.Refresh();

Thanks,


James



Franklin, does the shapefile order matter?  Is there something special about the final shapefile being read?  


 



Hi James, 
  
   I had no problem in displaying multiple layer map following the conventional way. But it is very inconvenient if you have to do it in the hard coded way for deploying a map application, which is supposed to be run on any set of map shape files defined in the xml configuration file. 
 I am solving the xml maploader problem, nothing else. Thanks. 
  
 Franklin

Franklin, 
  
 Thanks for your reply, you may misunderstand my point, I just want to make sure if the problem is caused by MapSuite or not, that way is just a test, not really suggest you do like that. So now I know the problem is caused by your xml parsing, you can add some trace to output the settings of each layer, and compare the hard coded setting, and then you will find which part is different. 
  
 Thanks, 
  
 James