学会开发唯一值符号化要素图层功能
图1 5
图16
图17
2.步骤1.准备点数据,添加属性字段“类别”;
2.并为要素“类别”属性值分别设置为“Hospital2”,“School 1”,“Airport”三种属性值。
3.实现唯一值符号化功能
4.运行程序实现效果
3.功能开发
实现唯一值符号化功能代码如下:
privateISymbol GetSymbol(string sServerStylePath,string sGalleryClassName, stringsymbolName)///<summary>
///获取符号库中符号
///</summary>
///<param name="sServerStylePath">符号库全路径名称</param>
///<param name="sGalleryClassName">GalleryClass名称</param>
///<param name="symbolName">符号名称</param>
///<returns>符号</returns>
{
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();
}