ArcObjects Library Reference (Carto)  

IMapServerLegendInfo Interface

Provides access to the Map Server Legend Info Interface.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

When To Use

Use IMapServerLegendInfo to retrieve individual legend elements including the symbol image, labels, descriptions and headings. A common use would be to populate a table of contents. To export a single image of the legend use ExportLegend on IMapServerLayout.

Members

Description
Read-only property LayerID The layer ID.
Read-only property LayerName The layer name.
Read-only property LegendGroups A collection of legend group objects.

CoClasses that implement IMapServerLegendInfo

CoClasses and Classes Description
MapServerLegendInfo The Map Server Legend Info coclass provides legend information for a layer.

Remarks

MapServerLegendInfo objects are the result of a GetLegendInfo method on IMapServer. Legends are associated with renderers that belong to each layer in a map. Each layer has a separate renderer. Each renderer has one or more legend groups.  Each legend group has one or more legend classes.

MapServerLegendInfo doesn't contain information about whether the data frame and the layers in the TOC are expanded or collapsed in the original map document. You have to write your own code to find this out.

[C#]

The following sample code shows how to determine whether the data frame and the layers in the TOC are expanded or collapsed in the original map document. The sample assumes that you already have a valid MapServer object.

IMapServer mapServer;
IMapServerObjects mapServerObjects;
IMapLayerInfos mapLayerInfos;
IMap map;
ILayer layer;
IGroupLayer groupLayer;
ICompositeLayer2 compLayer;
ILegendInfo legendInfo;
string strMapName;
int i, j, k;
Boolean bVisible;
string debugOutput;

// Step through data frames
for (i = 0; i < mapServer.MapCount; i++)
{
        // Get map name
        strMapName = mapServer.get_MapName(i);
        // Get map
        mapServerObjects = (IMapServerObjects)mapServer;
        map = mapServerObjects.get_Map(strMapName);
        // Print whether map (data frame) is expanded or collapsed
        debugOutput = "Map " + i.ToString() + " (" + strMapName + "): " + (map.Expanded ? "Expanded" : "Collapsed");
        MessageBox.Show(debugOutput);
        // Get MapLayerInfos
        mapLayerInfos = mapServer.GetServerInfo(strMapName).MapLayerInfos;
        // Step through layers
        for (j = 0; j < mapLayerInfos.Count; j++)
        {
                // Get layer
                layer = mapServerObjects.get_Layer(strMapName, j);
                // Check if group layer
                if (layer is IGroupLayer)
                {
                        groupLayer = (IGroupLayer)layer;
                        debugOutput = "Layer " + j.ToString() + " (" + layer.Name + "): " + (groupLayer.Expanded ? "Expanded" : "Collapsed");
                        MessageBox.Show(debugOutput);
                }
                // Check if composite layer
                else if (layer is ICompositeLayer2)
                {
                        compLayer = (ICompositeLayer2)layer;
                        debugOutput = "Layer " + j.ToString() + " (" + layer.Name + "): " + (compLayer.Expanded ? "Expanded" : "Collapsed");
                        MessageBox.Show(debugOutput);
                }
                else if (layer is ILegendInfo)
                {
                        legendInfo = (ILegendInfo)layer;
                        // If at least 1 legend group is visible, layer is expanded
                        bVisible = false;
                        for (k = 0; k < legendInfo.LegendGroupCount; k++)
                        {
                                if (legendInfo.get_LegendGroup(k).Visible)
                                {
                                        bVisible = true;
                                        break;
                                }
                        }
                        debugOutput = "Layer " + j.ToString() + " (" + layer.Name + "): " + (bVisible ? "Expanded" : "Collapsed");
                        MessageBox.Show(debugOutput);
                }
                else
                {
                        // All other layers that cannot be expanded or collapsed
                        // -> set them to "expanded"
                        debugOutput = "Layer " + j.ToString() + " (" + layer.Name + "): " + "Expanded";
                        MessageBox.Show(debugOutput);
                }
        }
}