zoukankan      html  css  js  c++  java
  • AE唯一值符号化的流程以及过程

    唯一值符号化的流程以及过程(转)

     

    一、获取ServerStyle库中的符号

      
          Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。 用于获取ServerStyle符号库中的符号主要涉及到以下:
    接口名称 功能描述
    IStyleGallery 用于管理Style Gallery
    IStyleGalleryStorage 管理Style Gallery中的符号库文件
    IStyleGalleryClass 控制符号库中Style Gallery Class
    IEnumStyleGalleryItem 枚举一组Style Gallery items
    IStyleGalleryItem 定义Style Galle ry itme

     

    获取ESRI符号库中名称为Rose的符号的流程:
           1.首先构建一个ServerStyleGallery对象
           2.其次使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件
           3.遍历ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一个可枚举的包含一系列StyleGalleryItem的EnumStyleGalleryItem对象。
           4.遍历EnumServerStyleGalleryItme枚举对象中的StylegalleryItme如果名称是Rose即可获取ESRI符号库中名称为Rose的StylegalleryItme,然后通过IStyleGalleryItem的Item属性即可转换为ISymbol。

         

    ///<summary>
    ///获取符号库中符号
    ///</summary>
    ///<param name="sServerStylePath">符号库全路径名称</param>
    ///<param name="sGalleryClassName">GalleryClass名称</param>
    ///<param name="symbolName">符号名称</param>
    ///<returns>符号</returns>
    
    private ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName)
    {
         try
         {   
         //ServerStyleGallery对象
         IStyleGallery pStyleGaller = new ServerStyleGalleryClass();   
         IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage;
         IEnumStyleGalleryItem pEnumSyleGalleryItem=null;   
         IStyleGalleryItem pStyleGallerItem = null;   
         IStyleGalleryClass pStyleGalleryClass = null;   
         //使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件   
         pStyleGalleryStorage.AddFile(sServerStylePath);
       
         //遍历ServerGallery中的Class
       
         for (int i = 0; i < pStyleGaller.ClassCount; i++)
         {
             pStyleGalleryClass = pStyleGaller.get_Class(i);   
             if (pStyleGalleryClass.Name != sGalleryClassName)
                 continue;
             //获取EnumStyleGalleryItem对象
             pEnumSyleGalleryItem = pStyleGaller.get_Items(sGalleryClassName, sServerStylePath, "");
             pEnumSyleGalleryItem.Reset();   
             //遍历pEnumSyleGalleryItem
             pStyleGallerItem = pEnumSyleGalleryItem.Next();
             while (pStyleGallerItem != null)
             {
                 if (pStyleGallerItem.Name == symbolName)
                 {   
                  //获取符号   
                  ISymbol pSymbol = pStyleGallerItem.Item as ISymbol;   
                  System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);   
                  System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);    
                  return pSymbol;   
                  }   
                pStyleGallerItem = pEnumSyleGalleryItem.Next();   
             }
         }   
         System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);     
         System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);     
         return null;   
       }
       catch (Exception Err)
       {
        MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        return null;
       }
    }

    二、进行唯一值符号化

        1.准备点数据,添加属性字段“类别”;

        2.并为要素“类别”属性值分别设置为“Hospital2”,“School 1”,“Airport”三种属性值。

        3.实现唯一值符号化功能

    ///<summary>
    ///设置要素图层唯一值符号化
    ///</summary>
    ///<param name="pFeatureLayer"></param>
    private void UniqueValueRenderFlyr(IFeatureLayer pFeatureLayer)
    {
       try
        {   
          //创建UniqueValueRendererClass对象   
          IUniqueValueRenderer pUVRender = new UniqueValueRendererClass();   
          List<string> pFieldValues= new List<string>();   
          pFieldValues.Add("Hospital 2");
          pFieldValues.Add("School 1");
          pFieldValues.Add("Airport");   
          for(int i=0;i<pFieldValues.Count;i++)
          {   
            ISymbol pSymbol= new SimpleMarkerSymbolClass();
            pSymbol =GetSymbol(@"C:Program FilesArcGISStylesESRI.ServerStyle","Marker Symbols",pFieldValues(i));   
            //添加唯一值符号化字段值和相对应的符号
            pUVRender.AddValue(pFieldValues,pFieldValues,pSymbol);   
          }
         
         //设置唯一值符号化的字段个数和字段名
          pUVRender.FieldCount = 1;   
          pUVRender.set_Field(0, "类别");   
          IGeoFeatureLayer pGFeatureLyr = pFeatureLayer as IGeoFeatureLayer;   
          //设置IGeofeatureLayer的Renderer属性
          pGFeatureLyr.Renderer = pUVRender as IFeatureRenderer;
        }   
       catch (Exception Err)
       {   
         MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
       }
    }
    private void button1_Click(object sender, EventArgs e)
    {
      IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;
      UniqueValueRenderFlyr(pFeatureLayer);
      this.axMapControl1.Refresh();
    }

    原文章出处:http://www.cnblogs.com/zhangjun1130/archive/2012/04/17/2454035.html

     

  • 相关阅读:
    重构之美之一改造面向过程式设计(转)
    arcgis_server for java的问题
    Using Javascript to display RSS
    JavaScript开发规范要求(转载)
    恭贺今天开张大吉!
    今天为打乙肝疫苗抽血。
    人类登上月球
    c++读写文件流
    检索Repeater中的checkbox
    Z:如何轻松做好网站外链的十大技巧
  • 原文地址:https://www.cnblogs.com/flylong0204/p/3145670.html
Copyright © 2011-2022 走看看