IStyleGallery arcengine (转载)

转自:http://www.cnblogs.com/zhangjun1130/archive/2012/04/17/2454035.html

一、获取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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值