ThinkGeo.com    |     Documentation    |     Premium Support

Center/inner/outerLine rendering order

Hello,


I'm using multiple ShapeFileFeatureLayers in one LayerOverlay, with the shapefiles containing lines. When, for example, I have two layers of lines, it seems that the centerline of the layer at the bottom draws over the innerline of the layer at the top. Am I correct to assume that line shape layers are drawn in the following order:


Outerlines of all layers, starting with the bottom layer.


Innerlines of all layers, starting with the bottom layer.


Centerlines of all layers, starting with the bottom layer.


 


Also, is there a way to have the top layer draw it's lines entirely on top of the bottom layers without moving the layer to a new overlay?


 


Thank you



Werner, 
  
 Thanks for your post, 
  
 I have checked the problem what you mentioned used the latest WpfDesktopEdition and I cannot reproduce your problem correctly, it worked fine, actually according to my tests, the layer render order is the load order, the OuterPen or InnerPen property will not affect to the load order for your layers, I guessed maybe you didn’t use the latest WPFDesktopEdition so please contact ThinkGeo Support to get the latest version to try again, if you still encounter any problems please let me know, 
  
 Thanks, 
  
 Scott,

 Hello Scott,


 


Thank you for the reply. I did have version 4.0 and upgraded to version 4.5, however, I'm still experiencing this problem. I hope the following code snippets will help:


When using a single overlay:


 



wpfMap1.MapUnit = ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree;

wpfMap1.MapUnit = ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree;
//Using only one overlay first overlay
LayerOverlay roadsOverlay = new LayerOverlay();

//Load minor roads shape file first
ShapeFileFeatureLayer minorRoad = new ShapeFileFeatureLayer(@"C:\dev\maps\demo data\roads\demo_minor.shp");
minorRoad.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.MajorRoad1;
minorRoad.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
//Add minor roads to the overlay
roadsOverlay.Layers.Add(minorRoad);

//Load major roads shape file second 
ShapeFileFeatureLayer majorRoad = new ShapeFileFeatureLayer(@"C:\dev\maps\demo data\roads\demo_major.shp"); majorRoad.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Highway1;
majorRoad.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
//Add major roads to the overlay and add to map
roadsOverlay.Layers.Add(majorRoad);
wpfMap1.Overlays.Add(roadsOverlay);

wpfMap1.CurrentExtent = new RectangleShape(-40, 40, 50, -40);
wpfMap1.Refresh();

 


It seems that the center line of the minor road is still overwriting the outerline of the major road. I attached a screenshot of how it looks : 1.jpg.



 


When using seperate overlays, one for minor and one for major roads:


 



wpfMap1.MapUnit = ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree;
            
//Create first overlay
LayerOverlay roadsOverlay1 = new LayerOverlay();
//Load minor roads shape file first
ShapeFileFeatureLayer minorRoad = new ShapeFileFeatureLayer(@"C:\dev\maps\demo data\roads\demo_minor.shp");
minorRoad.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.MajorRoad1;
minorRoad.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
//Add minor roads to first overlay and add to map
roadsOverlay1.Layers.Add(minorRoad);
wpfMap1.Overlays.Add(roadsOverlay1);

//Create second overlay
LayerOverlay roadsOverlay2 = new LayerOverlay();
//Load major roads shape file second
ShapeFileFeatureLayer majorRoad = new ShapeFileFeatureLayer(@"C:\dev\maps\demo data\roads\demo_major.shp");
majorRoad.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Highway1;
majorRoad.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
//Add major roads to second overlay and add to map
roadsOverlay2.Layers.Add(majorRoad);
wpfMap1.Overlays.Add(roadsOverlay2);

wpfMap1.CurrentExtent = new RectangleShape(-40, 40, 50, -40);
wpfMap1.Refresh();

 


The major roads are correctly drawn completely over the minor roads, as show in the second attached screenshot : 2.jpg:



 Am I missing something?



Werner,


What's your version of wpf desktop edition? According to my test used your code, it seems there are not any problems for the overlap issue, here are my test result below for two cases:


1, Add the major roads first, then add the minor raods.


 



 //Add major roads to the overlay and add to map
            roadsOverlay.Layers.Add(majorRoad);
            //Add minor roads to the overlay
            roadsOverlay.Layers.Add(minorRoad);
Here is the screen shot for it below:



The light yellow color one is the minor roads and the dark yellow color one is the major roads, obviously, the minor roads are overrided the major rodas because of the minor roads were added after the major roads.


2, Add the minor roads first, then add the major raods.


 



//Add minor roads to the overlay
            roadsOverlay.Layers.Add(minorRoad);
            //Add major roads to the overlay and add to map
            roadsOverlay.Layers.Add(majorRoad);
This is the screen shot for it below:



 


So you can compare between the two screen shots and the code, we always render the layer according to the add order, this is my test result used your code, if I misunderstand anything please let me know,


Thanks,


Scott,