ThinkGeo.com    |     Documentation    |     Premium Support

Sample for v5.0 LegendAdornmentLayer

Your news announcement for the 5.0 version lists added support for creating map legends.  However, I could not find any information or sample code on to how to do this.


Could you please post a sample application for the Desktop Edition of how to do this?  Perhaps a Getting Started with sample code for the new features in 5.0?


Thanks.


Elisa




Elisa,


Thank you for the post.  There is currently a legend sample application being worked on that will be released out to the wiki in the coming days.  If you follow us on Facebook or Twitter you will be notified whenever a new sample is added to the collection.


In order to help you get your feet wet with the new legend I have posted the following code below that shows how to use the new Legend Feature in 5.0.  The API is pretty easy to use, there are really only two classes you need to know.  The LegendAdornmentLayer class which controls things like the Location, Title and Background mask the LegendItem class which defines the items that will be present in the Legend.  Most of your code will be dealing with setting up LegendItems, each legend item has an ImageStyle property and a TextStyle propertly.  This allows you to have full control over each item in the legend and make it look exactly how you want.  The ImageStyle will take virtually any style that can be defined in Map Suite, it uses the DrawSample method of the Style to draw the image on the Legend so as long as your style support this method it will work in the legend too.  The TextStyle property sets what Text you want to put by each legend item and allows you to control the font, color and size just like you would when setting a TextStyle to do labeling in Map Suite.


Please take a look at the code below and let us know if you have any questions or feedback.  The result of this code will generate a Map just like the picture below.  


 



        winformsMap1.MapUnit = GeographyUnit.DecimalDegree;

        LegendItem title = new LegendItem();
        title.TextStyle = new TextStyle("Map Legend", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendItem legendItem1 = new LegendItem();
        legendItem1.ImageStyle = winformsMap1.FindFeatureLayer("Primaryborder").ZoomLevelSet.ZoomLevel09.DefaultLineStyle;
        legendItem1.TextStyle = new TextStyle("State Borders", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendItem legendItem2 = new LegendItem();
        legendItem2.ImageStyle = winformsMap1.FindFeatureLayer("Capitals").ZoomLevelSet.ZoomLevel06.CustomStyles[0];
        legendItem2.TextStyle = new TextStyle("Capitals", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));
        
        LegendItem legendItem3 = new LegendItem();
        legendItem3.ImageStyle = winformsMap1.FindFeatureLayer("Fedlandnps").ZoomLevelSet.ZoomLevel04.DefaultAreaStyle;
        legendItem3.TextStyle = new TextStyle("Forests", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendItem legendItem4 = new LegendItem();
        legendItem4.ImageStyle = winformsMap1.FindFeatureLayer("Cover").ZoomLevelSet.ZoomLevel01.DefaultAreaStyle;
        legendItem4.TextStyle = new TextStyle("Oceans", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendItem legendItem5 = new LegendItem();
        legendItem5.ImageStyle = new AreaStyle(new GeoSolidBrush(new GeoColor(255, 0, 128, 0)));
        legendItem5.TextStyle = new TextStyle("Trees", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendItem legendItem6 = new LegendItem();
        legendItem6.ImageStyle = new AreaStyle(new GeoSolidBrush(new GeoColor(255, 128, 96, 0)));
        legendItem6.TextStyle = new TextStyle("Dirt", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));

        LegendAdornmentLayer legendLayer = new LegendAdornmentLayer();
        legendLayer.BackgroundMask = AreaStyles.CreateLinearGradientStyle(new GeoColor(255, 255, 255, 255), new GeoColor(255, 230, 230, 230), 90, GeoColor.SimpleColors.Black);
        legendLayer.LegendItems.Add(legendItem1);
        legendLayer.LegendItems.Add(legendItem2);
        legendLayer.LegendItems.Add(legendItem3);
        legendLayer.LegendItems.Add(legendItem4);
        legendLayer.LegendItems.Add(legendItem5);
        legendLayer.LegendItems.Add(legendItem6);
        legendLayer.Title = title;
        legendLayer.Location = AdornmentLocation.LowerLeft;

        AdornmentOverlay adornmentOverlay = new AdornmentOverlay();
        adornmentOverlay.IsBase = true;

        adornmentOverlay.Layers.Add("LengendLayer", legendLayer);
        winformsMap1.Overlays.Add(adornmentOverlay);

        winformsMap1.CurrentExtent = new RectangleShape(-125, 50, -66, 23);
        winformsMap1.Refresh();

 


 


Thanks!



Elisa,



We have just posted a new code sample that demonstrates the construction of a sample legend using the new LegendAdornmentLayer in Map Suite 5.0.  You can download it here:



wiki.thinkgeo.com/wiki/Map_S...w_A_Legend



Please let us know if you have any questions.



Thanks,

ThinkGeo Support