public static void ApplySymbol(string symbolChoice)
{
QueuedTask.Run(() =>
{
// Check for an active 2D mapview, if not, then prompt and exit.
if (MapView.Active == null || (MapView.Active.ViewingMode != ArcGIS.Core.CIM.MapViewingMode.Map))
{
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("An active 2D MapView is required to use this tool. Exiting...", "Info");
return;
}
// Get the layer(s) selected in the Contents pane, if there is not just one, then prompt then exit.
if (MapView.Active.GetSelectedLayers().Count != 1)
{
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("One feature layer must be selected in the Contents pane. Exiting...", "Info");
return;
}
// Check to see if the selected layer is a feature layer, if not, then prompt and exit.
var featLayer = MapView.Active.GetSelectedLayers().First() as FeatureLayer;
if (featLayer == null)
{
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("A feature layer must be selected in the Contents pane. Exiting...", "Info");
return;
}
// Check if the feature layer shape type is point, if not, then prompt and exit.
else if (featLayer.ShapeType != esriGeometryType.esriGeometryPoint)
{
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Selected feature layer must be shape type POINT. Exiting...", "Info");
return;
}
try
{
// If symbolChoice is a single symbol
if (symbolChoice == "single symbol")
{
// Get all styles in the project
var styles = Project.Current.GetItems<StyleProjectItem>();
// Get a specific style in the project
StyleProjectItem style = styles.First(s => s.Name == "ArcGIS 2D");
// Get the Push Pin 1 symbol
var pt_ssi = style.SearchSymbols(StyleItemType.PointSymbol, "圆形 3").FirstOrDefault();
// Create a new renderer definition and reference the symbol
SimpleRendererDefinition srDef = new SimpleRendererDefinition();
srDef.SymbolTemplate = pt_ssi.Symbol.MakeSymbolReference();
// Create the renderer and apply the definition
CIMSimpleRenderer ssRenderer = (CIMSimpleRenderer)featLayer.CreateRenderer(srDef);
// Update the feature layer renderer
featLayer.SetRenderer(ssRenderer);
}
else if (symbolChoice == "graduated color")
{
// Get a style and color ramp to apply to the renderer
StyleProjectItem style = Project.Current.GetItems<StyleProjectItem>().First(s => s.Name == "ColorBrewer 方案(RGB)");
IList<ColorRampStyleItem> colorRampList = style.SearchColorRamps("红色(4 类)");
ColorRampStyleItem aColorRamp = colorRampList[0];
// Create a graduated color renderer definition with 3 breaks, a populated numeric field named "Symbol" is required
GraduatedColorsRendererDefinition gcDef = new GraduatedColorsRendererDefinition()
{
ClassificationField = "ID",
ClassificationMethod = ArcGIS.Core.CIM.ClassificationMethod.EqualInterval,
BreakCount = 4,
ColorRamp = aColorRamp.ColorRamp,
SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol().MakeSymbolReference(),
};
// Create the renderer and apply the definition
CIMClassBreaksRenderer cbRndr = (CIMClassBreaksRenderer)featLayer.CreateRenderer(gcDef);
// Update the feature layer renderer
featLayer.SetRenderer(cbRndr);
}
}
catch (Exception exc)
{
// Catch any exception found and display in a message box
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Exception caught: " + exc.Message);
return;
}
});
}
Notification notification = new Notification();
protected override void OnClick()
{
ApplySymbol("graduated color");
}}