地图属性表中只有一列编号FTRID,其相关的其他信息保存在数据库中,根据编号关联
渲染图元时,根据图元的半径绘制其样式,可以直接查询图层对应的图元信息表
遍历此表,根据每个图元的半径,设置其线样式,然后保存到IUniqueValueRenderer对象中,
最后,将图层的Render属性设置为此Render对象即可。
/// <summary> /// 渲染图层 /// </summary> /// <param name="lyr">图层对象</param> /// <param name="lyrDatasetName">图层原始名称</param> private IUniqueValueRenderer RenderLayerFeature(string lyrDatasetName)//渲染图层 { IUniqueValueRenderer ptmpUniqueValueRenderer = new UniqueValueRendererClass(); ptmpUniqueValueRenderer.FieldCount = 1; ptmpUniqueValueRenderer.set_Field(0, "FTRID"); DataTable dtLyrFtrsSection = new DataTable();//查询图层的所有管段 dtLyrFtrsSection =QueryPipeSectionByLyrName(lyrDatasetName) foreach (DataRow dr in dtLyrFtrsSection.Rows) { string ftrID = dr["FTRID"]ToString(); double pipeCalibre = Convert.ToDouble(dr["PIPE_CALIBRE"]); ptmpUniqueValueRenderer.AddValue(ftrID, "FTRID", GetLineSymbolByCalibre(pipeCalibre) as ISymbol); } } return ptmpUniqueValueRenderer;
调用的时候使用如下设置:
(pipeLayer as IGeoFeatureLayer).Renderer = RenderLayerFeature(lyrDatasetName) as IFeatureRenderer;//渲染图层; this.mapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);