ArcGIS Engine开发教程之图层符号化(五)——利用ESRI自带的符号库进行唯一值符号化

利用ESRI自带的符号库进行唯一值符号化一图层开发实例
        学会开发唯一值符号化要素图层功能
    

1 5


16

17

2.步骤
1.准备点数据,添加属性字段“类别”;
2.并为要素“类别”属性值分别设置为“Hospital2”,“School 1”,“Airport”三种属性值。
3.实现唯一值符号化功能
4.运行程序实现效果

3.功能开发
实现唯一值符号化功能代码如下:

///<summary>

///获取符号库中符号

///</summary>

///<param name="sServerStylePath">符号库全路径名称</param>

///<param name="sGalleryClassName">GalleryClass名称</param>

///<param name="symbolName">符号名称</param>

///<returns>符号</returns>

privateISymbol GetSymbol(string sServerStylePath,string sGalleryClassName, stringsymbolName)
{

try

{

//ServerStyleGallery对象

IStyleGallery pStyleGaller =new ServerStyleGalleryClass();

IStyleGalleryStorage pStyleGalleryStorage = pStyleGallerasIStyleGalleryStorage;

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 asISymbol;

        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;

}

}


///<summary>

///设置要素图层唯一值符号化

///</summary>

///<param name="pFeatureLayer"></param>

privatevoid 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 Files\ArcGIS\Styles\ESRI.ServerStyle","MarkerSymbols",pFieldValues【i】);

//添加唯一值符号化字段值和相对应的符号
pUVRender.AddValue(pFieldValues,pFieldValues,pSymbol);

}

//设置唯一值符号化的字段个数和字段名
pUVRender.FieldCount = 1;

pUVRender.set_Field(0,"类别");

IGeoFeatureLayer pGFeatureLyr = pFeatureLayeras IGeoFeatureLayer;

//设置IGeofeatureLayer的Renderer属性
pGFeatureLyr.Renderer = pUVRender 
asIFeatureRenderer;
    }

    catch (Exception Err)
    {

MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }

}
privatevoid button1_Click(object sender,EventArgs e)
{

    IFeatureLayer pFeatureLayer =this.axMapControl1.get_Layer(0)asIFeatureLayer;

    UniqueValueRenderFlyr(pFeatureLayer);

    this.axMapControl1.Refresh();

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮紫月升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值