ArcEngine 9.3 学习笔记(七):图层符号化(利用ESRI自带的符号库进行唯一值符号化:图层开发实例;设计GIS系统符号化模块注意事项)...
来自:https://blog.csdn.net/kailuan2zhong/article/details/81714083
4.8 利用ESRI自带的符号库进行唯一值符号化:图层开发实例
目的:学会开发唯一值符号化要素图层功能
步骤:
1、准备点数据,添加属性字段“类别”;
2、为要素“类别”属性值分别设置为Hospital 2 、School 1、Airport 三种属性值;
以上两步应该是创建MXD,然后在程序中 打开MXD,点击按钮,实现下面click的功能
3、实现唯一值符号化功能
4、运行程序实现效果
功能开发: 实现唯一值符号化功能 代码如下:
1 /// <summary>
2 /// 获取符号库中符号
3 /// </summary>
4 /// <param name="sServerStylePath">符号库全路径名称</param>
5 /// <param name="sGalleryClassName">GalleryClass名称</param>
6 /// <param name="symbolName">需要获取的符号名称</param>
7 /// <returns>符号</returns>
8 private ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName)
9 {
10 try
11 {
12 // ServerStyleGallery对象
13 IStyleGallery pStyleGaller = new ServerStyleGalleryClass();
14 IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage;
15 IEnumStyleGalleryItem pEnumStyleGalleryItem = null;
16 IStyleGalleryItem pStyleGallerItem = null;
17 IStyleGalleryClass pStyleGalleryClass = null;
18 // 使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件
19 pStyleGalleryStorage.AddFile(sServerStylePath);
20 // 遍历ServerGallery中的Class
21 //(因为IStyleGallery QI到了 IStyleGalleryStorage ,IStyleGalleryStorage加载了文件后,IStyleGallery中就有内容了)
22 for (int i = 0; i < pStyleGaller.ClassCount; i++)
23 {
24 pStyleGalleryClass = pStyleGaller.get_Class(i);
25 if (pStyleGalleryClass.Name != sGalleryClassName)
26 {
27 continue;
28 }
29
30 // 获取EnumStyleGalleryItem对象 ,联系之前Rose的代码段
31 pEnumStyleGalleryItem = pStyleGaller.get_Items(sGalleryClassName, sServerStylePath, "");
32 pEnumStyleGalleryItem.Reset();
33
34 // 遍历pEnumStyleGalleryItem
35 pStyleGallerItem = pEnumStyleGalleryItem.Next();
36 while (pStyleGallerItem!=null)
37 {
38 if (pStyleGallerItem.Name == symbolName)
39 {
40 // 获取符号
41 ISymbol pSymbol = pStyleGallerItem.Item as ISymbol;
42 // 释放Com对象??
43 System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumStyleGalleryItem);
44 System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumStyleGalleryItem);
45 return pSymbol;
46 }
47 else
48 {
49 }
50 pStyleGallerItem = pEnumStyleGalleryItem.Next();
51 }
52 }
53 System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumStyleGalleryItem);
54 System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);
55 return null;
56 }
57 catch (Exception)
58 {
59 return null;
60 }
61 }
62
63 /// <summary>
64 /// 设置要素图层唯一值符号化
65 /// </summary>
66 /// <param name="pFeatureLayer"></param>
67 private void UniqueValueRenderFlyr(IFeatureLayer pFeatureLayer)
68 {
69 try
70 {
71 // 创建UniqueValueRendererClass对象(存储符号,存储规则 是 符号名:字段名:符号)
72 IUniqueValueRenderer pUVRender = new UniqueValueRendererClass();
73 //创建属性字段
74 List<string> pFieldValues = new List<string>();
75 pFieldValues.Add("Hospital 2");
76 pFieldValues.Add("School 1");
77 pFieldValues.Add("Airport");
78 for (int i = 0; i < pFieldValues.Count; i++)
79 {
80 ISymbol pSymbol = new SimpleMarkerSymbolClass();
81 // 获取指定 符号库中 对应符号名的 符号
82 pSymbol = GetSymbol(@"c:\Program File\ArcGIS\Styles\ESRI.ServerStyle", "Marker Symbols", pFieldValues[i]);
83 // 添加唯一值符号化字段值和相对应的符号
84 pUVRender.AddValue(pFieldValues[i], pFieldValues[i], pSymbol);
85 }
86 // 设置唯一值符号化的字段个数和字段名
87 pUVRender.FieldCount = 1;
88 pUVRender.set_Field(0, "类别");
89
90 IGeoFeatureLayer pGFeatureLyr = pFeatureLayer as IGeoFeatureLayer;
91 // 设置IGeoFeatureLayer的Renderer属性
92 pGFeatureLyr.Renderer = pUVRender as IFeatureRenderer;
93 }
94 catch (Exception)
95 {
96 throw;
97 }
98 }
99
100 // click 事件
101 private void button1_click(object sender, EventArgs e,AxMapControl axMapControl1)
102 {
103 IFeatureLayer pFeatureLaye = axMapControl1.get_Layer(0) as IFeatureLayer;
104 UniqueValueRenderFlyr(pFeatureLaye);
105 axMapControl1.Refresh();
106
107 }
以下是文章中的截图,为了更好的理解以上代码功能,截取出来,放在下面:
图1 : ArcGIS 中自带符号库文件
图2:自行创建mdx文件(注意属性表中字段设置)
图3:功能实现效果
4.9 设计GIS系统符号化模块
4.9.1 通过系统符号化配置表, 存储 图层符号化信息, 符号化图层
就是在数据库中 创建配置表,写进去,什么图层使用什么符号,类似的主外键关系,类似 角色、权限关系
例如表中字段有:图层ID ,符号化类型,符号库ID , 符号名称,符号类型
然后使用AE提供的每种符号化类型的接口对图层进行符号化渲染
4.9.2 通过AE提供的Represatation存储要素符号化
Representation是AG9.3 新特性,能够通过Representation制作精美、更复杂的地图操作过程,Representation 在AG中是工具条。
————————————————
版权声明:本文为CSDN博主「Fredok_915」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kailuan2zhong/article/details/81714083