• 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

  • 相关阅读:
    zookeeper与activemq最新存储replicatedLevelDB整合
    MySQL分表的3种方法
    mycat 从入门到放弃 (转)
    centos 7 忘记密码
    java内存溢出的情况解决方法
    跨域问题的产生及解决方法
    一次jvm调优过程
    2019年总结
    Jenkinsfile与Json的转换
    DevOps平台
  • 原文地址:https://www.cnblogs.com/gisoracle/p/15630014.html
Copyright © 2020-2023  润新知