在 ArcGIS Pro SDK 中,地图要素符号(Symbol)和符号样式(Style)是2个很重要的概念。
【Symbol】是用于表示地图上不同类型的要素(如点、线、面)的图形化表示。
在地图中,各种要素都需要通过符号来展示,符号通常包括颜色、线型、填充样式、大小等属性。在 ArcGIS Pro SDK 中,符号是通过 【ArcGIS.Core.CIM
】命名空间中的类来表示的。这些类可以用来构建各种类型的符号,例如点符号、线符号、面符号、文本符号等。
以下是一些常见的符号类:
CIMPointSymbol
:表示点要素的符号,可以设置点的形状、颜色、大小等属性。CIMLineSymbol
:表示线要素的符号,可以设置线的颜色、宽度、线型等属性。CIMPolygonSymbol
:表示面要素的符号,可以设置填充颜色、轮廓线颜色、样式等属性。CIMTextSymbol
:表示文本要素的符号,可以设置字体、颜色、大小等属性。【Style】 是一组用于表示地图要素外观的符号集合,它们可以被重复使用在不同的地图中。
Style可以包含各种类型的符号、线型、颜色、标签样式等。在 ArcGIS Pro中,符号样式可以在 ArcGIS Pro 的项目中创建和管理。在 ArcGIS Pro SDK 中,可以通过【 ArcGIS.Desktop.Core
】命名空间中的类来访问和使用这些样式。
以下是一些常见的符号样式类:
StyleProjectItem
:表示项目中的符号样式,可以通过该类来访问项目中的样式。SymbolStyleItem
:表示一个单独的符号样式,包含一组符号和相关的元数据。// 获取当前工程中的所有样式
var projectStyles = Project.Current.GetItems();
// 按名称获取样式
StyleProjectItem style = projectStyles.First(x => x.Name == "三调-符号填充");
// 创建样式
StyleHelper.CreateStyle(Project.Current, "NewStyle");
// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 添加自定义样式
StyleHelper.AddStyle(Project.Current, styleToAdd);
// 添加系统样式
StyleHelper.AddStyle(Project.Current, "NewStyle");
// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 移除自定义样式
StyleHelper.RemoveStyle(Project.Current, styleToAdd);
// 移除系统样式
StyleHelper.RemoveStyle(Project.Current, "NewStyle");
StyleItem itemToAdd= new StyleItem(); // 需定义或获取
style.AddItem(itemToAdd);
style.RemoveItem(itemToRemove);
bool flag = style.CanUpgrade;
bool flag = style.IsReadOnly;
bool flag = style.IsCurrent;
StyleHelper.UpgradeStyle(style)
// 构建点要素,设置颜色、尺寸和样式
CIMPointSymbol starPointSymbol = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.RedRGB, 10.0, SimpleMarkerStyle.Star);
// 通过CIMMarker来构建点要素
CIMMarker marker = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.GreenRGB, 8.0, SimpleMarkerStyle.Pushpin);
CIMPointSymbol pointSymbolFromMarker = SymbolFactory.Instance.ConstructPointSymbol(marker);
// 获取图片
System.Drawing.Image image = System.Drawing.Image.FromFile(@"C:\PathToImage\Image.png");
var stream = new System.IO.MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0;
// 创建CIMMarker
CIMMarker marker = SymbolFactory.Instance.ConstructMarkerFromStream(stream);
// 通过CIMMarker来构建点要素
CIMPointSymbol cIMPointSymbol = SymbolFactory.Instance.ConstructPointSymbol(marker);
// 创建外轮廓
CIMStroke outline = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlueRGB, 2.0, SimpleLineStyle.Solid);
// 创建CIMPolygonSymbol
CIMPolygonSymbol fillWithOutline = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.Solid, outline);
CIMStroke stroke = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 2.0,SimpleLineStyle.Solid);
CIMLineSymbol lineSymbolFromStroke = SymbolFactory.Instance.ConstructLineSymbol(stroke);
CIMPolygonSymbol symbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB);
CIMSymbolReference cIMSymbolReference = symbol.MakeSymbolReference();
// 获取要素图层
FeatureLayer ly = MapView.Active.GetSelectedLayers().OfType().FirstOrDefault();
// 获取选择图斑
var selection = ly.GetSelection();
// 获取OID
var firstOID = selection.GetObjectIDs().FirstOrDefault();
if (ly.CanLookupSymbol())
{
// 查询Symbol
var symbol = ly.LookupSymbol(firstOID, MapView.Active);
// 转为Json
var jSon = symbol.ToJson();
}
string key = "0301key";
SymbolStyleItem item = (SymbolStyleItem)style.LookupItem(StyleItemType.PointSymbol, key);
IList item = style.SearchSymbols(StyleItemType.PointSymbol, searchString);
var colors = style.SearchColors(searchString);
var va1 = symbol.GetType().GetProperty("Name").GetValue(symbol, null);
var va2 = symbol.GetType().GetProperty("Tags").GetValue(symbol, null);
var va3 = symbol.GetType().GetProperty("Category").GetValue(symbol, null);
var va4 = symbol.GetType().GetProperty("Key").GetValue(symbol, null);
symbol.GetType().GetProperty("Name").SetValue(symbol, va);
symbol.GetType().GetProperty("Tags").SetValue(symbol, va);
symbol.GetType().GetProperty("Category").SetValue(symbol, va);
symbol.GetType().GetProperty("Key").SetValue(symbol, va);