【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);
相关推荐
新中地GIS开发老师18 小时前
WebGIS和WebGL的基本概念介绍和差异对比
学习·arcgis·webgl
王解18 小时前
Jest项目实战(2): 项目开发与测试
前端·javascript·react.js·arcgis·typescript·单元测试
GISerQ.2 天前
ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?
arcgis·栅格数据·按掩膜提取
坫鹏加油站2 天前
【ArcGIS】绘制各省碳排放分布的中国地图
arcgis
前端 贾公子2 天前
koa项目实战 == 实现注册登录鉴权
arcgis
jyan_敬言4 天前
【Linux】centos7安装配置DHCP、FTP服务
linux·运维·服务器·c语言·开发语言·arcgis·青少年编程
yngsqq5 天前
arcgis坐标系问题
arcgis
GIS思维5 天前
ArcGIS影像调色(三原色)三原色调整
arcgis
新中地GIS开发老师6 天前
地理信息科学专业想搞GIS开发:学前端还是后端?
前端·javascript·arcgis·前端框架·cesium
Z_W_H_7 天前
【ArcGISPro】宣布推出适用于 ArcGIS 的 AI 助手
人工智能·arcgis·ai