AE+C#+符号化-唯一值渲染
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地图属性表中只有一列编号FTRID,其相关的其他信息保存在数据库中,根据编号关联
渲染图元时,根据图元的半径绘制其样式,可以直接查询图层对应的图元信息表
遍历此表,根据每个图元的半径,设置其线样式,然后保存到IUniqueValueRenderer对象中,
最后,将图层的Render属性设置为此Render对象即可。
///
/// 渲染图层
///
/// 图层对象
/// 图层原始名称
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);
或者使用如下方法
public UniqueValueRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer,int pCount, string pFieldName)
{
IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer;
IUniqueValueRenderer pUnique = new UniqueValueRendererClass();
pUnique.FieldCount = 1;
pUnique.set_Field(0, pFieldName);
ISimpleFillSymbol pSimFill = new SimpleFillSymbolClass();
//给颜色
IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);
IFeature pFt = pFtCursor.NextFeature();
IFillSymbol pFillSymbol1;
////添加第一个符号
//pFillSymbol1 = new SimpleFillSymbolClass();
//pFillSymbol1.Color = GetRGBColor(103, 252, 179) as IColor;
////添加第二个符号
//IFillSymbol pFillSymbol2 = new SimpleFillSymbolClass();
//pFillSymbol2.Color = GetRGBColor(125, 155, 251) as IColor;
//创建并设置随机色谱从上面的的图可以看出我们要给每一个值定义一种颜
色,我们可以创建色谱,但是色谱的这些参数
//我调不好这个没,因此掠过则个步骤,我重新定义了两个符号。
IRandomColorRamp pColorRamp = new RandomColorRampClass();
pColorRamp.StartHue = 0;
pColorRamp.MinValue = 20;
pColorRamp.MinSaturation = 15;
pColorRamp.EndHue = 360;
pColorRamp.MaxValue = 100;
pColorRamp.MaxSaturation = 30;
pColorRamp.Size = pCount ;
//pColorRamp.Size = pUniqueValueRenderer.ValueCount;
bool k = true;
pColorRamp.CreateRamp(out ok);
IEnumColors pEnumRamp = pColorRamp.Colors;
//IColor pColor = pEnumRamp.Next();
int pIndex =pFt.Fields.FindField(pFieldName);
//因为我只有24条记录,所以改变这些,这些都不会超过255或者为负数.求余
int i = 0;
while (pFt != null)
{
IColor pColor = pEnumRamp.Next();
if(pColor ==null)
{
pEnumRamp.Reset();
pColor = pEnumRamp.Next();
}
//if (i % 2 == 0)
//{
// pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol1 as ISymbol);
//}
//else
//{
// pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol2 as ISymbol);
//}
//i++;
pFillSymbol1 = new SimpleFillSymbolClass();
pFillSymbol1.Color = pColor;
pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol1 as ISymbol);
pFt = pFtCursor.NextFeature();
// pColor = pEnumRamp.Next();
}
pGeoFeaturelayer.Renderer = pUnique as IFeatureRenderer;
pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}
private IRgbColor GetRGBColor(int R, int G, int B)//子类赋给父类
{
IRgbColor pRGB;
pRGB = new RgbColorClass();
pRGB.Red = R;
pRGB.Green = G;
pRGB.Green = B;
return pRGB;
}
}