【ArcGIS Pro二次开发】(61):样式(Style)和符号(Symbol)

在 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

// 获取当前工程中的所有样式
var projectStyles = Project.Current.GetItems();
// 按名称获取样式
StyleProjectItem style = projectStyles.First(x => x.Name == "三调-符号填充");

2、创建新的style

// 创建样式
StyleHelper.CreateStyle(Project.Current, "NewStyle");

3、将style加入工程

// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 添加自定义样式
StyleHelper.AddStyle(Project.Current, styleToAdd);
// 添加系统样式
StyleHelper.AddStyle(Project.Current, "NewStyle");

4、从工程中移除style

// 样式文件路径
string styleToAdd = @"C:\Temp\NewStyle";
// 移除自定义样式
StyleHelper.RemoveStyle(Project.Current, styleToAdd);
// 移除系统样式
StyleHelper.RemoveStyle(Project.Current, "NewStyle");

5、往style添加StyleItem

StyleItem itemToAdd= new StyleItem();   // 需定义或获取
style.AddItem(itemToAdd);

6、移除StyleItem

style.RemoveItem(itemToRemove);

7、判断style是否可升级

bool flag = style.CanUpgrade;

8、判断style是否只读

bool flag = style.IsReadOnly;

9、判断style是否与前Pro版本匹配

bool flag = style.IsCurrent;

10、升级style

StyleHelper.UpgradeStyle(style)

11、构建一个CIMPointSymbol

// 构建点要素,设置颜色、尺寸和样式
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

// 获取图片
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

// 创建外轮廓
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 

CIMStroke stroke = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 2.0,SimpleLineStyle.Solid);
CIMLineSymbol lineSymbolFromStroke = SymbolFactory.Instance.ConstructLineSymbol(stroke);

15、获取Symbol信息(CIMSymbolReference)

CIMPolygonSymbol symbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB);
CIMSymbolReference cIMSymbolReference = symbol.MakeSymbolReference();

16、查询选择图斑的Symbol信息

// 获取要素图层
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();
}

17、从style中通过键值查询StyleProjectItem

string key = "0301key";
SymbolStyleItem item = (SymbolStyleItem)style.LookupItem(StyleItemType.PointSymbol, key);

18、关键字查找StyleProjectItem

IList item = style.SearchSymbols(StyleItemType.PointSymbol, searchString);

19、关键字查找Color信息

var colors = style.SearchColors(searchString);

20、获取style的名称、标签、类别、键

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的名称、标签、类别、键赋值

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);

你可能感兴趣的:(ArcGIS,Pro,SDK,ArcGIS,arcgis,Arcgis,Pro,SDK,二次开发,style,symbol)