『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS Engine 10 开发手册(7-6)ArcGIS Engine中唯一值及调用示例

ArcGIS Engine 10 开发手册(7-6)ArcGIS Engine中唯一值及调用示例
ArcMap 中是如何做的:

     ArcMap中的唯一值

     ArcMap 中是如何做的:


加载要分类渲染的数据

在图层上右键/properties/Symbolygy

Categories 中找到 Unique Values

设置唯一值字段,然后 Add All Values

如如下图:

 

 

和唯一值渲染图相关的接口

IUniqueValueRenderer

 

该接口被 UniqueValueRenderer 对象实现,用来控制唯一值渲染的主要信息,如字段设置,符号等。

 

唯一值渲染代码示例

 

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 ok = 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;

 

}

此图为注释掉的代码,自定义的两种颜色生成生成的专题图:

 

 

 

此图为随机颜色生成的专题图:

 

      京ICP备08100627号-22 京公网安备 11010802030428号