唯一值渲染
/// <summary>
/// 唯一值渲染
/// </summary>
/// <param name="pFeaturelayer">渲染图层</param>
/// <param name="sRenderField">渲染字段</param>
/// <param name="pQueryFilter">渲染过滤器</param>
public static IUniqueValueRenderer FunUniqueValueRender(IFeatureLayer pFeaturelayer, string sRenderField, IQueryFilter pQueryFilter)
{
try
{
IFeatureClass pFeatureClass = null;
IRandomColorRamp pRandomColorRamp = null;
IUniqueValueRenderer pUniqueValueRenderer = null;
IFeatureCursor pFeatureCursor = null;
int iRenderFiledIndex;
int iCount;
if (pQueryFilter == null)
pQueryFilter = new QueryFilterClass();
//获取渲染字段
pFeatureClass = pFeaturelayer.FeatureClass;
iRenderFiledIndex = FunGetFiledIndexByName(pFeatureClass, sRenderField);//返回渲染字段所在的索引值
if (iRenderFiledIndex == -1)
{
MessageBox.Show("字段索引读取错误");
return null;
}
//获取渲染字段的唯一值个数
iCount = pFeatureClass.FeatureCount(pQueryFilter);
if (iCount < 1)
{
MessageBox.Show("计算字段唯一值个数发生错误");
return null;
}
//创建并得到IRandomColorRamp
pRandomColorRamp = new RandomColorRampClass();
pRandomColorRamp.StartHue = 0;
pRandomColorRamp.MinValue = 99;
pRandomColorRamp.MinSaturation = 15;
pRandomColorRamp.EndHue = 360;
pRandomColorRamp.MaxValue = 100;
pRandomColorRamp.MaxSaturation = 30;
pRandomColorRamp.Size = iCount;
bool ok;
pRandomColorRamp.CreateRamp(out ok);
//设置UniqueValueRenderer
pUniqueValueRenderer = new UniqueValueRendererClass();
pUniqueValueRenderer.FieldCount = 1;
pUniqueValueRenderer.set_Field(0, sRenderField);
//遍历所有要素,并添加渲染值
pFeatureCursor = pFeatureClass.Search(pQueryFilter, true);
IEnumColors pEnumColors = pRandomColorRamp.Colors;
pEnumColors.Reset();
IColor pColor;
IFeature pFeature;
string sValue;
for (int index = 0; index < iCount; index++)
{
pColor = pEnumColors.Next();
pFeature = pFeatureCursor.NextFeature();
sValue = Convert.ToString(pFeature.get_Value(iRenderFiledIndex));
bool isHad = false;
for (int i = 0; i < pUniqueValueRenderer.ValueCount; i++)
{
if (sValue == pUniqueValueRenderer.get_Value(i).ToString())
{
isHad = true;
break;
}
}
if (!isHad)
{
if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
{
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
pSimpleFillSymbol.Color = pColor;
pUniqueValueRenderer.AddValue(sValue, sValue, (ISymbol)pSimpleFillSymbol);
}
else if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
{
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
pSimpleMarkerSymbol.Color = pColor;
pSimpleMarkerSymbol.Size = 6;
pUniqueValueRenderer.AddValue(sValue, sValue, (ISymbol)pSimpleMarkerSymbol);
}
}
}
//释放变量
pFeatureCursor = null;
pRandomColorRamp = null;
pFeatureClass = null;
return pUniqueValueRenderer;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
/// <summary>
/// 唯一值渲染
/// </summary>
/// <param name="pFeaturelayer">渲染图层</param>
/// <param name="sRenderField">渲染字段</param>
/// <param name="pQueryFilter">渲染过滤器</param>
public static IUniqueValueRenderer FunUniqueValueRender(IFeatureLayer pFeaturelayer, string sRenderField, IQueryFilter pQueryFilter)
{
try
{
IFeatureClass pFeatureClass = null;
IRandomColorRamp pRandomColorRamp = null;
IUniqueValueRenderer pUniqueValueRenderer = null;
IFeatureCursor pFeatureCursor = null;
int iRenderFiledIndex;
int iCount;
if (pQueryFilter == null)
pQueryFilter = new QueryFilterClass();
//获取渲染字段
pFeatureClass = pFeaturelayer.FeatureClass;
iRenderFiledIndex = FunGetFiledIndexByName(pFeatureClass, sRenderField);//返回渲染字段所在的索引值
if (iRenderFiledIndex == -1)
{
MessageBox.Show("字段索引读取错误");
return null;
}
//获取渲染字段的唯一值个数
iCount = pFeatureClass.FeatureCount(pQueryFilter);
if (iCount < 1)
{
MessageBox.Show("计算字段唯一值个数发生错误");
return null;
}
//创建并得到IRandomColorRamp
pRandomColorRamp = new RandomColorRampClass();
pRandomColorRamp.StartHue = 0;
pRandomColorRamp.MinValue = 99;
pRandomColorRamp.MinSaturation = 15;
pRandomColorRamp.EndHue = 360;
pRandomColorRamp.MaxValue = 100;
pRandomColorRamp.MaxSaturation = 30;
pRandomColorRamp.Size = iCount;
bool ok;
pRandomColorRamp.CreateRamp(out ok);
//设置UniqueValueRenderer
pUniqueValueRenderer = new UniqueValueRendererClass();
pUniqueValueRenderer.FieldCount = 1;
pUniqueValueRenderer.set_Field(0, sRenderField);
//遍历所有要素,并添加渲染值
pFeatureCursor = pFeatureClass.Search(pQueryFilter, true);
IEnumColors pEnumColors = pRandomColorRamp.Colors;
pEnumColors.Reset();
IColor pColor;
IFeature pFeature;
string sValue;
for (int index = 0; index < iCount; index++)
{
pColor = pEnumColors.Next();
pFeature = pFeatureCursor.NextFeature();
sValue = Convert.ToString(pFeature.get_Value(iRenderFiledIndex));
bool isHad = false;
for (int i = 0; i < pUniqueValueRenderer.ValueCount; i++)
{
if (sValue == pUniqueValueRenderer.get_Value(i).ToString())
{
isHad = true;
break;
}
}
if (!isHad)
{
if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
{
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
pSimpleFillSymbol.Color = pColor;
pUniqueValueRenderer.AddValue(sValue, sValue, (ISymbol)pSimpleFillSymbol);
}
else if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
{
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
pSimpleMarkerSymbol.Color = pColor;
pSimpleMarkerSymbol.Size = 6;
pUniqueValueRenderer.AddValue(sValue, sValue, (ISymbol)pSimpleMarkerSymbol);
}
}
}
//释放变量
pFeatureCursor = null;
pRandomColorRamp = null;
pFeatureClass = null;
return pUniqueValueRenderer;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}