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

本文目录
  • 正文

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;

}

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

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

ArcGIS Engine 10 开发手册全集

ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群(一):291616564(满) 麻辣GIS

本站QQ群(二):166408035(新) 麻辣GIS(二)

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论