private void ChartRenderer(IFeatureLayer pFeatLyr, Dictionary <string, IRgbColor> dicFieldAndColor) { IChartRenderer chartRenderer = new ChartRendererClass(); IDataStatistics dataSta = new DataStatisticsClass(); dataSta.Field = m_pTarField.Name; dataSta.Cursor = m_pTarFeatureClass.Search(null, false) as ICursor; double max = Double.MinValue; foreach (string fieldName in dicFieldAndColor.Keys) { (chartRenderer as IRendererFields).AddField(fieldName, fieldName); max = max > dataSta.Statistics.Maximum ? max : dataSta.Statistics.Maximum; } IBarChartSymbol barSyb = null; barSyb = new BarChartSymbolClass(); (barSyb as IChartSymbol).MaxValue = max; barSyb.Width = 6; (barSyb as IMarkerSymbol).Size = 30; IFillSymbol barSymbol = new SimpleFillSymbolClass(); barSymbol.Color = m_pFillColor; (barSyb as ISymbolArray).AddSymbol(barSymbol as ISymbol); IFillSymbol baseSymbol = new SimpleFillSymbolClass(); baseSymbol.Color = m_pOutlineColor; chartRenderer.ChartSymbol = barSyb as IChartSymbol; chartRenderer.BaseSymbol = baseSymbol as ISymbol; m_pTarGeoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer; chartRenderer.CreateLegend(); frmMainOper(OperationType.RefreshMapCtrl); frmMainOper(OperationType.UpdateTOCCtrl); }
//创建柱状专题图 public void CreateBarRenderer(int layerID, string[] fields) { // 得到地图服务下的ArcObjects map对象 ESRI.ArcGIS.Server.IServerContext pServerContext = GetServerContext(); ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)pServerContext.ServerObject; ESRI.ArcGIS.Carto.IMapServerObjects2 mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerObjects2)mapServer; string mapName = mapServer.DefaultMapName; ESRI.ArcGIS.Carto.IMap aoMap = mapServerObjects.get_Map(mapName); ESRI.ArcGIS.Carto.ILayer pLayer = aoMap.get_Layer(layerID);//得到图层 ESRI.ArcGIS.Carto.IGeoFeatureLayer pGeoLayer = pLayer as IGeoFeatureLayer; //设置专题图元素的属性名称列表 IChartRenderer pChartRender = pServerContext.CreateObject("esriCarto.ChartRenderer") as IChartRenderer; IRendererFields pRenderFields = pChartRender as IRendererFields; foreach (string var in fields) { pRenderFields.AddField(var, var); } //实例化图表对象并取得元素指定属性的最大值 IBarChartSymbol pBarChartSymbol = pServerContext.CreateObject("esriDisplay.BarChartSymbol") as IBarChartSymbol; IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol; pChartSymbol.MaxValue = GetStaMaxMin(fields, pGeoLayer)[0]; pBarChartSymbol.Width = 8; IMarkerSymbol pMarkerSymbol = pBarChartSymbol as IMarkerSymbol; pMarkerSymbol.Size = 50; //设置柱状图每列填充效果 ISymbolArray pSymbolArray = pBarChartSymbol as ISymbolArray; Random ranColor = new Random(); for (int i = 0; i < fields.Length; i++) { IFillSymbol pFillSymbol = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as IFillSymbol; pFillSymbol.Color = GetRGB(ranColor.Next(255), ranColor.Next(255), ranColor.Next(255), pServerContext); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); } //设置地图图层背景 ESRI.ArcGIS.Display.ISimpleFillSymbol pFSymbol = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as ESRI.ArcGIS.Display.SimpleFillSymbol; pFSymbol.Color = GetRGB(239, 228, 249, pServerContext); pChartRender.BaseSymbol = pFSymbol as ISymbol; //应用柱状专题到指定图层 pChartRender.ChartSymbol = pBarChartSymbol as IChartSymbol; pChartRender.Label = "Test"; pChartRender.UseOverposter = false; pChartRender.CreateLegend(); pGeoLayer.Renderer = pChartRender as IFeatureRenderer; //刷新地图显示图表及图例 mapServerObjects.RefreshServerObjects(); Map1.RefreshResource("MapResourceItem0"); Toc1.BuddyControl = "Map1"; //Toc1.Refresh(); Map1.Refresh(); pServerContext.ReleaseContext(); }