麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

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 开发手册

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)