关键字:ArcGIS Server 专题图部分渲染、显示部分数据、过滤条件
重点代码为://过滤不需要显示的站点
IDataExclusion dtexc = pChartRender as IDataExclusion;
dtexc.ExclusionClause = "PID not in (" + sitePID + ")";
以下为专题图制作方法:
if (InitialEsriConnection())
{
InitialEsriMap();
InitialEsriFeatureLayer("站位");
if (maoFeatureLayer != null)
{
#region 统计专题图
string[] fields = strfields.Split(',');
//得到设置专题图图层对象
pGeoFeatureLyer = maoLayer as IGeoFeatureLayer;
#region 添加字段
bool havefield = false;
IFields Ifields = pGeoFeatureLyer.FeatureClass.Fields as IFields;
for (int col = 0; col < fields.Length; col++)
{
for (int j = 0; j < Ifields.FieldCount; j++)
{
if (fields[col] == Ifields.get_Field(j).Name)
havefield = true;
}
if (!havefield)
{
IField oField = (IField)mserverContext.CreateObject("esriGeodatabase.Field");
IFieldEdit oFieldEdit = oField as IFieldEdit;
oFieldEdit.Name_2 = fields[col];
oFieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDouble;
pGeoFeatureLyer.FeatureClass.AddField(oFieldEdit);
}
havefield = false;
}
#endregion
#region 设置数值
ESRI.ArcGIS.Geodatabase.IQueryFilter2 queryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilterClass();
queryFilter.WhereClause = "PID in (" + sitePID + ")";
for (int i = 0; i < pGeoFeatureLyer.FeatureClass.FeatureCount(queryFilter); i++)
{
IFeature ifeature = pGeoFeatureLyer.FeatureClass.GetFeature(i);
int pidindex=ifeature.Fields.FindField("PID");
HY_SurveySiteEntity siteen = BusinessFacadeMMFrame.HY_SurveySiteDisp(int.Parse(ifeature.get_Value(pidindex).ToString()));
if (sitePID.Contains(ifeature.get_Value(pidindex).ToString()))
{
for (int col = 0; col < fields.Length; col++)
{
pidindex = ifeature.Fields.FindField(fields[col]);
DataRow dr = dt.Select(" Station='" + siteen.Station + "' and Field='" + fields[col] + "'")[0];
ifeature.set_Value(pidindex,double.Parse(dr[0].ToString()));
ifeature.Store();
}
}
}
#endregion
//设置专题图元素的属性名称
IChartRenderer pChartRender = mserverContext.CreateObject("esriCarto.ChartRenderer") as IChartRenderer;
IRendererFields pRenderFields = pChartRender as IRendererFields;
foreach (string var in fields)
{
pRenderFields.AddField(var, var);
}
//实例化图表对象并取得元素指定属性的最大值
IBarChartSymbol pBarChartSymbol = mserverContext.CreateObject("esriDisplay.BarChartSymbol") as IBarChartSymbol;
IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol;
pChartSymbol.MaxValue = 10;
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 = mserverContext.CreateObject("esriDisplay.SimpleFillSymbol") as IFillSymbol;
pFillSymbol.Color = GetRGB(ranColor.Next(255), ranColor.Next(255), ranColor.Next(255));//看后面GetRGB得到专题图随机颜色函数
pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
}
//应用柱状专题到指定图层
pChartRender.ChartSymbol = pBarChartSymbol as IChartSymbol;
pChartRender.Label = "Test";
pChartRender.UseOverposter = false;
//过滤不需要显示的站点
IDataExclusion dtexc = pChartRender as IDataExclusion;
dtexc.ExclusionClause = "PID not in (" + sitePID + ")";
pGeoFeatureLyer.Renderer = pChartRender as IFeatureRenderer;
//刷新地图显示
Map1.Refresh();
#endregion