ThinkGeo.com    |     Documentation    |     Premium Support

Access column values in a dbf file

Hello,


I wanna show a polyline layer and before i paint it i want to paint each polyline another color depending on the value of a column in its dbf file the question is how to i access the dbf files column value.


For example i have one column OBJECTID and one column NAME i want to loop all OBJECTID's and for each record check the value of the NAME column and depending on that value im gonna paint each records polyline different color.


An help


Thanks in Advnaced


 


dimitris


T











Hi Dimitris,


 


Actually, you don’t need to loop all the values in the dbf file. The ValueStyle can satisfy your requirement. We have a HowDoISample demonstrating how to use it, and you can find it in HowDoISamples/Styles/ DrawFeaturesBasedOnValues. 


 


In that sample, we are using a shape file named “capital.shp”, also there is a dbf file named “capital.dbf” in the same folder with the .shp file. There is a column “POP_RANK” in the dbf file, we set different styles according to different value in that column.


 


Hope this helps and any more questions please let us know.


 


Thanks,


 


Sun




To further illustrate what Sun explained to you using ValueStyle, you can see how you can apply this Style to a polygon based layer as it is your case to the countries02.shp shapefile that comes with the sample data. Here, you take the column "COLOR_MAP" and assign a different color for each value from 1 to 8. The result is a map with all the countries being pleasantly displayed and well distinguished. This is another way on how ValueStyle can be useful to apply to your data.




ShapeFileFeatureLayer CountriesLayer = new ShapeFileFeatureLayer(@"..\..\Data\countries02.shp");
           
            // Draw features based on values
            ValueStyle valueStyle = new ValueStyle();
            valueStyle.ColumnName = "COLOR_MAP";
            valueStyle.ValueItems.Add(new ValueItem("1", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightGreen,GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("2", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightPink, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("3", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightCyan, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("4", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightBlue, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("5", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightGoldenrodYellow, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("6", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightSalmon, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("7", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightCoral, GeoColor.StandardColors.Black)));
            valueStyle.ValueItems.Add(new ValueItem("8", AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightSkyBlue, GeoColor.StandardColors.Black)));

            CountriesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

            CountriesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


Dimitris, 
  
   Yet another way to do it would be to create a custom style.  If your list of colors could be very high or you wanted to make other determinations I would create a custom Style. 
  
 The good news is that we have a learning video called Creating Custom Sytles at the link below.  There is a video, presentation materials and also a set of sample application.  I think you will kind creating custom Styles easy and flexible. 
  
 gis.thinkgeo.com/Products/GISComponentsforNETDevelopers/MapSuiteDesktopEdition/Videos/tabid/679/Default.aspx 
  
 David