【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

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);
相关推荐
sinat_384241091 分钟前
在有网络连接的机器上打包 electron 及其依赖项,在没有网络连接的机器上安装这些离线包
javascript·arcgis·electron
GIS 数据栈1 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis
GIS思维17 小时前
ArcGIS定义投影与投影的区别(数据和底图不套合的原因和解决办法)
arcgis·gis·地理信息·arcgis坐标系·动态投影
阮少年、20 小时前
ArcGIS Pro的arpx项目在ArcGIS Server中发布要素服务(FeatureServer)
arcgis·arcgis server·gis服务发布·要素服务
圆弧YH1 天前
Arcgis 地图制作
arcgis
sinat_384241091 天前
使用 cnpm 安装 Electron,才是正确快速的方法
arcgis
中科GIS地理信息培训2 天前
ArcGIS Pro 3.4新功能1:唯一值符号化增加复选框,可在内容窗格和布局视图中控制类别的可见性。
arcgis·arcgis pro
黄鹂绿柳2 天前
学了Arcgis的水文分析——捕捉倾泻点,河流提取与河网分级,3D图层转要素失败的解决方法,测量学综合实习网站存着
arcgis
科研online2 天前
ArcGIS计算水库库容量
arcgis·学习方法
WineMonk2 天前
ArcGIS Pro ADGeoProcessing DAML
arcgis·gis·arcgis pro sdk·daml