方向:根据属性字段设置点图层中每个要素的符号方向和大小,
在图层属性---符号系统---单一符号中进行设置,首先设置符号,在后面的【高级】选项按钮中分别设置【旋转】和【大小】
【旋转】下拉框中选择对应字段,以及旋转方式,确定即可
【大小】下拉框中选择对应符号大小的字段,确认即可
图层属性中设置唯一值渲染,根据字段值得不同选择不同的符号,并在【高级】选项中设置【旋转】和【大小】,方法同上
比如
IRotationRenderer pRotationRender = pSimRender as IRotationRenderer;
pRotationRender.RotationField = "ANGEL";
pRotationRender.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic;
ISizeRenderer pSizeRender = pSimRender as ISizeRenderer;
pSizeRender.SizeRendererFlags = (int)esriSizeRendererFlags.esriSizeRendererUseExpression;
pSizeRender.SizeRendererExpression = "[SIZE]";
简单渲染
/// <summary>
/// 单一符号化
/// </summary>
/// <param name="pFeatLyr">渲染图层</param>
/// <param name="pRgbColor">渲染颜色</param>
private void SimpleRenderer(IFeatureLayer pFeatLyr, IMarkerSymbol markerSymbol)
{
try
{
esriGeometryType type = pFeatLyr.FeatureClass.ShapeType;
ISimpleRenderer pSimRender = new SimpleRendererClass();
IColor pColor = this.GetColor(255, 0, 0);
if (type == esriGeometryType.esriGeometryPoint)
{
markerSymbol.Color = pColor;
markerSymbol.Size = 50;
pSimRender.Symbol = markerSymbol as ISymbol;
IRotationRenderer pRotationRender = pSimRender as IRotationRenderer;
pRotationRender.RotationField = "ANGEL";
pRotationRender.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic;
ISizeRenderer pSizeRender = pSimRender as ISizeRenderer;
pSizeRender.SizeRendererFlags = (int)esriSizeRendererFlags.esriSizeRendererUseExpression;
pSizeRender.SizeRendererExpression = "\[SIZE\]";
}
IGeoFeatureLayer pGeoFeatLyr = pFeatLyr as IGeoFeatureLayer;
pGeoFeatLyr.Renderer = pSimRender as IFeatureRenderer;
this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
this.axTOCControl1.Update();
}
catch (Exception ex)
{
}
}
唯一值渲染
/// <summary>
/// 多符号
/// </summary>
/// <param name="pFeaLyr"></param>
/// <param name="fieldname"></param>
private void UniqueValueRender(IFeatureLayer pFeaLyr, string fieldname)
{
IGeoFeatureLayer pGeoFeatLyr = pFeaLyr as IGeoFeatureLayer;
ITable pTable = pFeaLyr as ITable;
IUniqueValueRenderer pUniqueValueRender = new UniqueValueRendererClass();
int intFieldNumber = pTable.FindField(fieldname);
pUniqueValueRender.FieldCount = 1;//设置唯一值符号化的关键字段为一个
pUniqueValueRender.set\_Field(0, fieldname);//设置唯一值符号化的第一个关键字段
//根据渲染字段的值的个数,设置一组随机颜色,如某一字段有5个值,则创建5个随机颜色与之匹配
IQueryFilter pQueryFilter = new QueryFilterClass();
bool bSuccess = false;
IColor pNextUniqueColor = this.GetColor(255, 0, 0);
//查询字段的值
pQueryFilter = new QueryFilterClass();
pQueryFilter.AddField(fieldname);
ICursor pCursor = pTable.Search(pQueryFilter, true);
IRow pNextRow = pCursor.NextRow();
int codeValue = 0;
IRowBuffer pNextRowBuffer = null;
while (pNextRow != null)
{
pNextRowBuffer = pNextRow as IRowBuffer;
codeValue = Convert.ToInt32(pNextRowBuffer.get\_Value(intFieldNumber));//获取渲染字段的每一个值
IMarkerSymbol pMarkerSymbol = null;
switch (pGeoFeatLyr.FeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPoint:
{
string symbolname = "";
switch (codeValue)
{
case 1:
symbolname = "飞机场";
break;
case 2:
symbolname = "箭头";
break;
case 3:
symbolname = "房屋";
break;
}
pMarkerSymbol = ServerSymbolUtilty.GetItemFromServerStyle(symbolFile, "Marker Symbols", symbolname).Item as IMarkerSymbol;
pMarkerSymbol.Color = pNextUniqueColor;
pUniqueValueRender.AddValue(codeValue.ToString(), "", pMarkerSymbol as ISymbol);//添加渲染字段的值和渲染样式
pNextRow = pCursor.NextRow();
break;
}
}
}
IRotationRenderer pRotationRender = pUniqueValueRender as IRotationRenderer;
pRotationRender.RotationField = "ANGEL";
pRotationRender.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic;
ISizeRenderer pSizeRender = pUniqueValueRender as ISizeRenderer;
pSizeRender.SizeRendererFlags = (int)esriSizeRendererFlags.esriSizeRendererUseExpression;
pSizeRender.SizeRendererExpression = "\[SIZE\]";
pGeoFeatLyr.Renderer = pUniqueValueRender as IFeatureRenderer;
axMapControl1.Refresh();
axTOCControl1.Update();
}
这里仅是点符号的渲染,其他渲染类似,代码比较乱,仅供参考,
手机扫一扫
移动阅读更方便
你可能感兴趣的文章