I am new to Sharpmap and GIS. Going through the sample code and building simple programs for better understanding. I have a water bodies layer. I want to display only a particular river. I used CustomTheme. How to show label for only this river.

To display a river (named Ganga), I have written following code.

SharpMap.Data.Providers.ShapeFile shapeFileProvider = new SharpMap.Data.Providers.ShapeFile(@"C:\water.shp", false);
SharpMap.Layers.VectorLayer waterLayer = new SharpMap.Layers.VectorLayer("Water", shapeFileProvider);

SharpMap.Rendering.Thematics.CustomTheme waterTheme = new  SharpMap.Rendering.Thematics.CustomTheme(GetWaterStyle);
waterLayer.Theme = waterTheme;

The GetWaterStyle method:

private SharpMap.Styles.VectorStyle GetWaterStyle(SharpMap.Data.FeatureDataRow row)
    SharpMap.Styles.VectorStyle style = new SharpMap.Styles.VectorStyle();
    if (row["NAME"].ToString().Equals("Ganga"))
        style.Fill = Brushes.Aqua;
        return style;
        return null;

Now I want to show a label "Ganga" (the river name) as well. How to approach?

Please help.

Thanks and regards, Abhi

1 Answer 1


You can do something like this:

    //Proivder for labels only fetching one river
    SharpMap.Data.Providers.ShapeFile shapeFileProviderLabels = new SharpMap.Data.Providers.ShapeFile(@"rivers.shp", false);
    shapeFileProviderLabels.FilterDelegate += new SharpMap.Data.Providers.FilterProvider.FilterMethod(delegate(FeatureDataRow row) { return row["NAME"] as string == "Ganga"; });
    int cnt = shapeFileProviderLabels.GetFeatureCount();

    SharpMap.Layers.VectorLayer waterLayer = new SharpMap.Layers.VectorLayer("Water", shapeFileProvider);

    //Layer for labels
    SharpMap.Layers.LabelLayer waterLabels = new SharpMap.Layers.LabelLayer("Water_Labels");
    waterLabels.LabelColumn = "NAME";
    waterLabels.DataSource = shapeFileProviderLabels;


There has been an bug/issue with the FilterDelegate of ShapeFile provider in SharpMap, this is fixed and included in SharpMap 1.0 RC1 that is newly released

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.