利用ESRI自带的符号库进行唯一值符号化一图层开发实例
学会开发唯一值符号化要素图层功能
图172.步骤
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, string symbolName)
{
try {
//ServerStyleGallery对象 IStyleGallery pStyleGaller =new ServerStyleGalleryClass(); IStyleGalleryStorage pStyleGalleryStorage = pStyleGalleras 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 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); returnnull;
}
}
///<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)as IFeatureLayer;
UniqueValueRenderFlyr(pFeatureLayer);
this.axMapControl1.Refresh();
}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删