ThinkGeo.com    |     Documentation    |     Premium Support

Change Corlor a line or polygon... in a layer

Hi all!


In my map, example it has a many blue rivers. And i want to change color rivers which are polluted into red color.


How can i do in the mapsuite desktop?


Thanks!



Hello nguyen, 



Thanks for your post, I'm not sure what's the states in your layer, is it only contains the river data? 



If so, you can simply set the default AreaStyle or LineStyle to this layer to change the color, please see the code below: 


worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Red));
worldLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.SimpleColors.Red));
worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



If not, could you please give more information? How can you define the river? 



Regards, 



Gary 



I want to use colors to show information about river’s problem. 
 Example: 
           It has 0-20% pollution -> color: blue 
           It has 20 -40% pollution -> color: yellow green 
           It has > 40% pollution -> color: red. 
 Do you understand my infomation :)? 
  


Hello nguyen, 



Yes, thanks for your further information. 



For this requirement, we have the ClassBreakStyle can do this job, this class represents a style based on a range of values. Please see the code below: 


ClassBreakStyle classBreakStyle = new ClassBreakStyle("YourRiverPollutionColumnName");
classBreakStyle.ClassBreaks.Add(new ClassBreak(20, new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Blue))));
classBreakStyle.ClassBreaks.Add(new ClassBreak(40, new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Yellow))));
classBreakStyle.ClassBreaks.Add(new ClassBreak(100, new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Red))));

riverFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(classBreakStyle);
riverFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



Or you can see HowDoISamples -- > Data Providers --> LoadAGridFeatureLayer 



Regards, 



Gary



Nguyen,


 I would like to bring some more information because I think that Gary's answer is uncomplete. Indeed the correct style to use is ClassBreakStyle but you have to be aware on how the break value in each ClassBreak works. The first parameter that you pass in ClassBreak is actually the value the range of the class break is going to start from. So for your case, you are going to have to have the following code. Also, you will see that I am using LineStyle and not AreaStyle because your river data is more than likely line based. I hope this will have helped. Thank you.



ShapeFileFeatureLayer riverFeatureLayer = new ShapeFileFeatureLayer();

ClassBreakStyle classBreakStyle = new ClassBreakStyle("YourRiverPollutionColumnName");
//From 0 until the value of the next ClassBreak (20). From 0 to 19.9999
classBreakStyle.ClassBreaks.Add(new ClassBreak(0,new LineStyle(new GeoPen(GeoColor.StandardColors.Blue,3))));

//From 20 until the value of the next ClassBreak (40). From 20 to 39.9999
classBreakStyle.ClassBreaks.Add(new ClassBreak(20, new LineStyle(new GeoPen(GeoColor.StandardColors.YellowGreen, 3))));

//From 40 and beyond. 
classBreakStyle.ClassBreaks.Add(new ClassBreak(40, new LineStyle(new GeoPen(GeoColor.StandardColors.Red, 3))));

riverFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(classBreakStyle);
riverFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;