在 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
:表示一个单独的符号样式,包含一组符号和相关的元数据。
1、按名称获取style
cs
// 获取当前工程中的所有样式
var projectStyles = Project.Current.GetItems<StyleProjectItem>();
// 按名称获取样式
StyleProjectItem style = projectStyles.First(x => x.Name == "三调-符号填充");
2、创建新的style
cs
// 创建样式
StyleHelper.CreateStyle(Project.Current, "NewStyle");
3、将style加入工程
cs
// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 添加自定义样式
StyleHelper.AddStyle(Project.Current, styleToAdd);
// 添加系统样式
StyleHelper.AddStyle(Project.Current, "NewStyle");
4、从工程中移除style
cs
// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 移除自定义样式
StyleHelper.RemoveStyle(Project.Current, styleToAdd);
// 移除系统样式
StyleHelper.RemoveStyle(Project.Current, "NewStyle");
5、往style添加StyleItem
cs
StyleItem itemToAdd= new StyleItem(); // 需定义或获取
style.AddItem(itemToAdd);
6、移除StyleItem
cs
style.RemoveItem(itemToRemove);
7、判断style是否可升级
cs
bool flag = style.CanUpgrade;
8、判断style是否只读
cs
bool flag = style.IsReadOnly;
9、判断style是否与前Pro版本匹配
cs
bool flag = style.IsCurrent;
10、升级style
cs
StyleHelper.UpgradeStyle(style)
11、构建一个CIMPointSymbol
cs
// 构建点要素,设置颜色、尺寸和样式
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);
12、从图片构建一个CIMPointSymbol
cs
// 获取图片
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);
13、构建一个CIMPolygonSymbol
cs
// 创建外轮廓
CIMStroke outline = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlueRGB, 2.0, SimpleLineStyle.Solid);
// 创建CIMPolygonSymbol
CIMPolygonSymbol fillWithOutline = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.Solid, outline);
14、构建一个CIMLineSymbol
cs
CIMStroke stroke = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 2.0,SimpleLineStyle.Solid);
CIMLineSymbol lineSymbolFromStroke = SymbolFactory.Instance.ConstructLineSymbol(stroke);
15、获取Symbol信息(CIMSymbolReference)
cs
CIMPolygonSymbol symbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB);
CIMSymbolReference cIMSymbolReference = symbol.MakeSymbolReference();
16、查询选择图斑的Symbol信息
cs
// 获取要素图层
FeatureLayer ly = MapView.Active.GetSelectedLayers().OfType<FeatureLayer>().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();
}
17、从style中通过键值查询StyleProjectItem
cs
string key = "0301key";
SymbolStyleItem item = (SymbolStyleItem)style.LookupItem(StyleItemType.PointSymbol, key);
18、关键字查找StyleProjectItem
cs
IList<SymbolStyleItem> item = style.SearchSymbols(StyleItemType.PointSymbol, searchString);
19、关键字查找Color信息
cs
var colors = style.SearchColors(searchString);
20、获取style的名称、标签、类别、键
cs
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);
21、给style的名称、标签、类别、键赋值
cs
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);