Select to view content in your preferred language

Is it possible to recover the symbol as legend and to put it inside the listbox ?

676
1
Jump to solution
12-11-2012 09:20 PM
FabienNAPPA
Regular Contributor
Hi all,

Is it possible to recover the symbol as legend and to put it inside the listbox ?

Here is my code, but I can retrieve that the first symbol with this method!

And when the layer is empty this does not work.

In advance thank you.
Fabiano

string[] myLayerIDs = { "FeatureLayer1", "FeatureLayer2", "FeatureLayer3", "FeatureLayer4" };  List<strList> myDataSource = new List<strList>();  foreach (var layerID in myLayerIDs)             {                  FeatureLayer isLayer = Map.Layers[layerID] as FeatureLayer;                  isLayer.UpdateCompleted += (sender, e) =>                     {                         foreach (Graphic layerItem in isLayer.Graphics)                         {                  myDataSource.Add(new strList { LayerName = layerItem, ImageSource = layerItem.Symbol });                         break;                         }                     };                              }
0 Kudos
1 Solution

Accepted Solutions
FabienNAPPA
Regular Contributor
This is my solution :

         public class ListLayerDisponible         {             public bool IsCheckedCheck { get; set; }             public string LayerName { get; set; }             public string TypeLayer { get; set; }             public StackPanel ContentSymbol { get; set; }         }          private static IEnumerable<FeatureLayer> GetLayers(IEnumerable<string> ids, Map map)         {             if (map != null)             {                 if (ids != null)                 {                     foreach (string item in ids)                     {                         FeatureLayer featureLayer = GetFeatureLayerWithID(item, map);                         if (featureLayer != null)                             yield return featureLayer;                     }                 }                 else                 {                     foreach (Layer layer in map.Layers)                     {                         if (layer is FeatureLayer && !string.IsNullOrEmpty(layer.ID))                         {                             yield return layer as FeatureLayer;                         }                     }                 }             }         }          private static FeatureLayer GetFeatureLayerWithID(string layerID, Map map)         {             if (map != null && !string.IsNullOrEmpty(layerID) && map.Layers[layerID] is FeatureLayer)                 return map.Layers[layerID] as FeatureLayer;             return null;         }          public class GroupSymbology         {              public string Name { get; set; }              public IList<Symbology> Templates { get; set; }              public override string ToString()             {                 return Name;             }         }          public class Symbology         {              public string Name { get; set; }              public object TypeID { get; set; }              public Symbol Symbol { get; set; }                public string Description { get; set; }              public override string ToString()             {                 return Name;             }          }          private static Symbology GetSymbolTemplate(Symbol symbol, object featureTypeID, string templateName, string displayName, string description)         {             object type = null;             if (featureTypeID != null && !string.IsNullOrEmpty(templateName))                 type = new object[] { featureTypeID, templateName };             else if (featureTypeID != null)                 type = featureTypeID;             else                 type = templateName;             Symbology symbolTemplate = new Symbology()             {                 TypeID = type,                 Symbol = symbol,                 Name = displayName,                 Description = description             };             return symbolTemplate;         }          public List<GroupSymbology> templateGroups = new List<GroupSymbology>();          public void UpdateDataSourceSymbology_UpdateCompleted(object sender, EventArgs e)         {             FeatureLayer layer = (FeatureLayer)sender;              GroupSymbology group = new GroupSymbology() { Name = layer.ID, Templates = new List<Symbology>() };              if (layer.Renderer != null)             {                 Symbol defaultSymbol = layer.Renderer.GetSymbol(null);                  if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0)                 {                     foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes)                     {                         if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0)                         {                             foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates)                             {                                 string name;                                 if (type.Value.Templates.Count > 1)                                     name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name);                                 else                                     name = type.Value.Name;                                 Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;                                 Symbology symbolTemplate = GetSymbolTemplate(symbol, type.Value.Id, featureTemplate.Value.Name, name, featureTemplate.Value.Description);                                 if (symbol != null)                                     group.Templates.Add(symbolTemplate);                             }                         }                     }                 }                 else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0)                 {                     foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates)                     {                         Symbology symbolTemplate = GetSymbolTemplate(defaultSymbol, null, featureTemplate.Value.Name, featureTemplate.Value.Name, featureTemplate.Value.Description);                         if (defaultSymbol != null)                             group.Templates.Add(symbolTemplate);                     }                 }                 else                 {                     if (defaultSymbol != null)                         group.Templates.Add(GetSymbolTemplate(defaultSymbol, null, null, layer.ID, null));                 }                 if (group.Templates.Count > 0)                     templateGroups.Add(group);             }              StackPanel contenerGroupSymbol = new StackPanel() { Orientation = Orientation.Horizontal };             foreach (var objSymbol in group.Templates)             {                 SymbolDisplay _SymbolDisplay = new SymbolDisplay() { Name = objSymbol.Name, Width = 14, Height = 14, Symbol = objSymbol.Symbol, Margin = new Thickness(0, 0, 5, 0) };                 contenerGroupSymbol.Children.Add(_SymbolDisplay);             }              workflowData.Add(new ListLayerDisponible { IsCheckedCheck = false, LayerName = group.Name, TypeLayer = "null", ContentSymbol = contenerGroupSymbol });              MyListBox.ItemsSource = workflowData;              layer.UpdateCompleted -= UpdateDataSourceSymbology_UpdateCompleted;         }          private readonly ObservableCollection<ListLayerDisponible> workflowData = new ObservableCollection<ListLayerDisponible>();          private void AddListLayerDisponible()         {              string[] myLayerIDs = { "FeatureLayer_1", "FeatureLayer_2", "FeatureLayer_3", "FeatureLayer_4" };              foreach (FeatureLayer isLayer in GetLayers(myLayerIDs, Map))             {                 FeatureLayer layer = Map.Layers[isLayer.ID] as FeatureLayer;                 layer.UpdateCompleted += UpdateDataSourceSymbology_UpdateCompleted;             }          }

View solution in original post

0 Kudos
1 Reply
FabienNAPPA
Regular Contributor
This is my solution :

         public class ListLayerDisponible         {             public bool IsCheckedCheck { get; set; }             public string LayerName { get; set; }             public string TypeLayer { get; set; }             public StackPanel ContentSymbol { get; set; }         }          private static IEnumerable<FeatureLayer> GetLayers(IEnumerable<string> ids, Map map)         {             if (map != null)             {                 if (ids != null)                 {                     foreach (string item in ids)                     {                         FeatureLayer featureLayer = GetFeatureLayerWithID(item, map);                         if (featureLayer != null)                             yield return featureLayer;                     }                 }                 else                 {                     foreach (Layer layer in map.Layers)                     {                         if (layer is FeatureLayer && !string.IsNullOrEmpty(layer.ID))                         {                             yield return layer as FeatureLayer;                         }                     }                 }             }         }          private static FeatureLayer GetFeatureLayerWithID(string layerID, Map map)         {             if (map != null && !string.IsNullOrEmpty(layerID) && map.Layers[layerID] is FeatureLayer)                 return map.Layers[layerID] as FeatureLayer;             return null;         }          public class GroupSymbology         {              public string Name { get; set; }              public IList<Symbology> Templates { get; set; }              public override string ToString()             {                 return Name;             }         }          public class Symbology         {              public string Name { get; set; }              public object TypeID { get; set; }              public Symbol Symbol { get; set; }                public string Description { get; set; }              public override string ToString()             {                 return Name;             }          }          private static Symbology GetSymbolTemplate(Symbol symbol, object featureTypeID, string templateName, string displayName, string description)         {             object type = null;             if (featureTypeID != null && !string.IsNullOrEmpty(templateName))                 type = new object[] { featureTypeID, templateName };             else if (featureTypeID != null)                 type = featureTypeID;             else                 type = templateName;             Symbology symbolTemplate = new Symbology()             {                 TypeID = type,                 Symbol = symbol,                 Name = displayName,                 Description = description             };             return symbolTemplate;         }          public List<GroupSymbology> templateGroups = new List<GroupSymbology>();          public void UpdateDataSourceSymbology_UpdateCompleted(object sender, EventArgs e)         {             FeatureLayer layer = (FeatureLayer)sender;              GroupSymbology group = new GroupSymbology() { Name = layer.ID, Templates = new List<Symbology>() };              if (layer.Renderer != null)             {                 Symbol defaultSymbol = layer.Renderer.GetSymbol(null);                  if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0)                 {                     foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes)                     {                         if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0)                         {                             foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates)                             {                                 string name;                                 if (type.Value.Templates.Count > 1)                                     name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name);                                 else                                     name = type.Value.Name;                                 Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;                                 Symbology symbolTemplate = GetSymbolTemplate(symbol, type.Value.Id, featureTemplate.Value.Name, name, featureTemplate.Value.Description);                                 if (symbol != null)                                     group.Templates.Add(symbolTemplate);                             }                         }                     }                 }                 else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0)                 {                     foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates)                     {                         Symbology symbolTemplate = GetSymbolTemplate(defaultSymbol, null, featureTemplate.Value.Name, featureTemplate.Value.Name, featureTemplate.Value.Description);                         if (defaultSymbol != null)                             group.Templates.Add(symbolTemplate);                     }                 }                 else                 {                     if (defaultSymbol != null)                         group.Templates.Add(GetSymbolTemplate(defaultSymbol, null, null, layer.ID, null));                 }                 if (group.Templates.Count > 0)                     templateGroups.Add(group);             }              StackPanel contenerGroupSymbol = new StackPanel() { Orientation = Orientation.Horizontal };             foreach (var objSymbol in group.Templates)             {                 SymbolDisplay _SymbolDisplay = new SymbolDisplay() { Name = objSymbol.Name, Width = 14, Height = 14, Symbol = objSymbol.Symbol, Margin = new Thickness(0, 0, 5, 0) };                 contenerGroupSymbol.Children.Add(_SymbolDisplay);             }              workflowData.Add(new ListLayerDisponible { IsCheckedCheck = false, LayerName = group.Name, TypeLayer = "null", ContentSymbol = contenerGroupSymbol });              MyListBox.ItemsSource = workflowData;              layer.UpdateCompleted -= UpdateDataSourceSymbology_UpdateCompleted;         }          private readonly ObservableCollection<ListLayerDisponible> workflowData = new ObservableCollection<ListLayerDisponible>();          private void AddListLayerDisponible()         {              string[] myLayerIDs = { "FeatureLayer_1", "FeatureLayer_2", "FeatureLayer_3", "FeatureLayer_4" };              foreach (FeatureLayer isLayer in GetLayers(myLayerIDs, Map))             {                 FeatureLayer layer = Map.Layers[isLayer.ID] as FeatureLayer;                 layer.UpdateCompleted += UpdateDataSourceSymbology_UpdateCompleted;             }          }
0 Kudos