ThinkGeo.com    |     Documentation    |     Premium Support

Make shapefile polygons different colors

 I've got some custom shapefiles that contain very basic polygons in them, and when I load the shapefiles I want to be able to make each polygon a different color.  For example, in one shapefile I have three concentric circles, and I want the largest one to be red, the middle one to be blue, and the smallest one to be green.  


I can read from the .shp and get three features, but then I'm not sure what to do with the 'Feature' objects that I have to get them to display(and with different colors).  



Hello Ryan, 



 You can try use QualityFamilyAreaStyle to make this, QualityFamilyAreaStyle is expected to use a whole bunch of QualityFamilyColor to render a Area type features. For example, I have 5 quality family colors to render 251 features, then 

Feature1----using QualityFamilyColor one 

Feature2----using QualityFamilyColor two 

Feature3----using QualityFamilyColor three 

Etc in turn. 



Here is a sample for this, you can have a try: 


private void WpfMap_Loaded(object sender, RoutedEventArgs e)
        {
            Map1.MapUnit = GeographyUnit.DecimalDegree;
            Map1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);

            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"..\..\SampleData\Data\Countries02.shp");
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new QualityFamilyAreaStyle(new GeoPen(GeoColor.StandardColors.Gray), GeoColor.SimpleColors.PaleBlue, 15);
            worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay worldOverlay = new LayerOverlay();
            worldOverlay.Layers.Add("WorldLayer", worldLayer);
            Map1.Overlays.Add("StaticOverlay", worldOverlay);

            Map1.CurrentExtent = new RectangleShape(-143.4, 109.3, 116.7, -76.3);
            Map1.Refresh();
        }


Regards, 



Gary



Ryan,


  Reading your description, I think that what you need is a Style that is going to color the polygons based on its size. For doing that I would suggest you create a custom Style inheriting fromn Areastyle and in the overwritten DrawCore function, you write the logic to have the feature displayed with a color based on the size of its polygon. I don't know if you have the size of the polygon based on a column or based on the surface area of the polygon, but you can write yourself the logic for that.


 As a good example for creating such a custom style, I recommend the sample Sized Point Style of the Code Community wiki.thinkgeo.com/wiki/Map_Suite_Wp...oint_Style. It is about creating a custom Point Style which size is proportional to some value of a column. I think that the code you will find in this sample will be good help to get you started.