专题地图(Thematic Map)是着重表示一种或数种自然要素特征或社会经济现象的地图

专题地图的内容由两部分构成:

1、专题内容——图上突出表示的自然或社会经济现象及其有关特征

2、地理基础——用以标明专题要素空间位置与地理背景的普通地图内容,主要有经纬网、水系、境界、居民地等。

专题地图制作依据要素的一个或多个不同的属性字段,根据字段值赋予地理对象不同的符号样式或者颜色,以区分不同属性值的地理要素。

ArcGIS Engine提供了8种标准的着色方案,每一种方案都对应了一类特征渲染器(Renderer)

特征渲染器是绘制专题地图的入口。

特征渲染器使用专题地图的一般性表示方法,如质底法、点值法、分级比例法等,以目标要素类图层的某个字段作为渲染依据,合理渲染不同字段值的要素,直至一个要素类中的所有要素都被渲染。完成渲染工作,配上制图要素——比例尺、指北针、图名、图例等后输出,即可完成一幅专题图的制作。其中,IGeoFeatureLayer的Renderer属性提供了专题图渲染的入口。简言之,通过对目标图层的Renderer属性进行渲染即可完成专题图的渲染工作。

下面将介绍五种渲染器的实现方法

1、简单符号法渲染器

2、分等级法渲染器

3、唯一值法渲染器

4、比例符号法渲染器

5、点状密度法渲染器

还剩下三种渲染器以后再实现

6、图表渲染器

7、分级唯一值法渲染器

8、依比例法渲染器

各类专题图均用的函数
getRGB(int r, int g, int b)
getGeoLayer(string layerName)

  1. #region 各类专题图均用的函数
  2. /// <summary>
  3. /// 获得颜色的函数
  4. /// </summary>
  5. /// <param name="r">红色Red</param>
  6. /// <param name="g">绿色Green</param>
  7. /// <param name="b">蓝色Blue</param>
  8. /// <returns>返回颜色</returns>
  9. private IRgbColor getRGB(int r, int g, int b)
  10. {
  11. IRgbColor pColor = new RgbColorClass();
  12. pColor.Red = r;
  13. pColor.Green = g;
  14. pColor.Blue = b;
  15. return pColor;
  16. }
  17. /// <summary>
  18. /// 获取渲染图层
  19. /// </summary>
  20. /// <param name="layerName">图层名字</param>
  21. /// <returns>图层</returns>
  22. private IGeoFeatureLayer getGeoLayer(string layerName)
  23. {
  24. ILayer pLayer; //定义图层
  25. IGeoFeatureLayer pGeoFeatureLayer; //定义要素图层 Geo?
  26. //遍历图层
  27. for (int i = ; i < axMapControl1.LayerCount; i++)
  28. {
  29. pLayer = axMapControl1.get_Layer(i);
  30. //若当前图层不为空且与与layerName的值相同
  31. if (pLayer != null && pLayer.Name == layerName)
  32. {
  33. //强转成IGeoFeatureLayer
  34. pGeoFeatureLayer = pLayer as IGeoFeatureLayer;
  35. //返回pGeoFeatureLayer对象
  36. return pGeoFeatureLayer;
  37. }
  38. }
  39. return null; //返回null
  40. }
  41.  
  42. #endregion

1、简单符号法渲染器

简单符号法渲染(SimpleRenderer), 用同一个符号绘制所有特征
①设置简单填充符号(SimpleFillSymbol)的颜色、样式、外边界线等参数
②设置简单线型符号(SimpleLineSymbol)的样色和样式等参数
③实例化简单渲染(SimpleRender)对象并设置Symbol、Lable、Description等相关参数
④对指定图层的Render属性赋值, 完成专题图制作
⑤刷新主地图

  1. /// <summary>
  2. /// 简单符号法渲染器(SimpleRenderer), 用同一个符号绘制所有特征
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void 简单符号法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
  7. {
  8. //实例化ISimpleFillSysmbol变量, 提供简单的填充符号类型
  9. ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
  10. //设置填充符号的样式——为呈45度的交叉线(xxx)
  11. ///Horizontal and vertical crosshatch ++++++.
  12. pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSCross;
  13. //设置填充符号的颜色——红色
  14. pSimpleFillSymbol.Color = getRGB(, , );
  15. //创建边线符号变量, 提供简单的线条符号类型
  16. ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
  17. //设置线符号样式——线呈交替虚线和双点(_.._.._)
  18. //The line has alternating dashes and double dots _.._.._.
  19. pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot;
  20. //设置线符号颜色——绿色
  21. pSimpleLineSymbol.Color = getRGB(, , );
  22. //设置线符号宽度——1.5
  23. pSimpleLineSymbol.Width = 1.5;
  24. //将线符号强转成ISymbol符号变量
  25. ISymbol pSymbol = pSimpleLineSymbol as ISymbol;
  26. //设置符号属性ROP2为二元栅格esriROPNotXOrPen
  27. pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
  28. //设置填充符号外边界的样式为pSimpleLineSymbol
  29. pSimpleFillSymbol.Outline = pSimpleLineSymbol;
  30. //实例化简单渲染变量
  31. ISimpleRenderer pSimpleRender = new SimpleRendererClass();
  32. //设置pSimpleRender的符号样式
  33. pSimpleRender.Symbol = pSimpleFillSymbol as ISymbol;
  34. //设置标签名称, 用于设置图例
  35. pSimpleRender.Label = "北部湾";
  36. //设置符号描述, 用于设置图例
  37. pSimpleRender.Description = "简单渲染";
  38. //定义IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征渲染的入口, 即Renderer属性
  39. IGeoFeatureLayer pGeoFeatureLayer;
  40. //调用函数获取渲染图层
  41. pGeoFeatureLayer = getGeoLayer("北部湾");
  42. if (pGeoFeatureLayer != null)
  43. {
  44. //调用Renderer属性, 具体说明如何通过图层要素渲染器渲染图层
  45. pGeoFeatureLayer.Renderer = pSimpleRender as IFeatureRenderer;
  46. }
  47. axMapControl1.Refresh(); //刷新axMapControl1
  48. axTOCControl1.Update(); //更新axTOCControl1
  49. }

2、分等级法渲染器

分等级法渲染器(ClassBreakRenderer), 可以用分级的颜色和符号来绘制
①获得目标图层的属性表后赋值到ITableHistogram对象
②利用IBasicHistogram的GetHistogram方法对属性表内数据进行统计
③利用IClassifyGEN分级
④实例化分级渲染器(ClassBreakRenderer),渲染所有地图
⑤赋值目标图层的Renderer, 完成渲染
⑥刷新地图

  1. /// <summary>
  2. /// 分等级法渲染器(ClassBreakRenderer), 可以用分级的颜色和符号来绘制
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void 分等级法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
  7. {
  8. //数据分成10个等级
  9. int classCount = ;
  10. //声明一个ITableHistogram变量
  11. //该变量用于控制从表格中生成的直方图的样式
  12. ITableHistogram pTableHistogram;
  13. //声明一个IBasicHistogram变量
  14. //该变量用于控制从不同数据源中生成的直方图
  15. IBasicHistogram pBasicHistogram;
  16. //实例化表格对象
  17. ITable pTable;
  18. //获取生成分级专题图的目标图层
  19. IGeoFeatureLayer pGeoFeatureLayer;
  20. //获取渲染图层
  21. pGeoFeatureLayer = getGeoLayer("北部湾");
  22. //将pGeoFeatureLayer强转成ILayer
  23. ILayer pLayer = pGeoFeatureLayer as ILayer;
  24. //将目标图层(要素类)的属性表强转成ITable
  25. pTable = pLayer as ITable;
  26. //实例化
  27. //BasicTableHistogram采用表对象输入数据的结构(如自然断点、分位数)生成直方图。
  28. pTableHistogram = new BasicTableHistogramClass();
  29. //赋值pTableHistogram的Table属性字段
  30. pTableHistogram.Table = pTable;
  31. //确定分级字段
  32. pTableHistogram.Field = "年";
  33. //pTableHistogram强制转换为IBasicHistogram
  34. pBasicHistogram = pTableHistogram as IBasicHistogram;
  35. //先统计每个值出现的次数, 输出结果赋予values, frequencys
  36. object values;
  37. object frequencys;
  38. //out参数可以在一个方法中返回多个不同类型的值
  39. pBasicHistogram.GetHistogram(out values, out frequencys);
  40. //创建平均分级对象
  41. IClassifyGEN pClassifyGEN = new QuantileClass();
  42. //用统计结果(values——值, frequences——出现频率)进行分级, 级别数目为classCount
  43. pClassifyGEN.Classify(values, frequencys, ref classCount);
  44. double[] classes;
  45. classes = pClassifyGEN.ClassBreaks as double[];
  46.  
  47. //获得分级结果, 是个双精度类型数组
  48. //注意:获得双精度数组记录条数出现不可修复性错误, 故使用以下代码修复该错误
  49. double[] myclasses;
  50. myclasses = new double[classCount];
  51. //当classes不为null时
  52. if (classes != null)
  53. {
  54. //遍历classes, 从后往前移一位
  55. for (int j = ; j < classCount; j++)
  56. {
  57. myclasses[j] = classes[j + ];
  58. }
  59. }
  60. //定义一个颜色枚举变量, 通过函数获取颜色带
  61. IEnumColors pEnumColors = CreateAlgorithmicColorRamp(myclasses.Length).Colors;
  62. IColor color;
  63. //声明并实例化分级渲染器对象类
  64. //该变量提供成员控制渐变色、渐变符号专题图的制作
  65. IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();
  66. //确定分级渲染的属性字段
  67. classBreaksRenderer.Field = "年";
  68. //分级数量
  69. classBreaksRenderer.BreakCount = classCount;
  70. //指示该专题图是否按升序显示
  71. classBreaksRenderer.SortClassesAscending = true;
  72. //简单填充符号(ISimpleFillSymbol)
  73. //该变量提供对成员的访问, 控制简单的填充符号
  74. ISimpleFillSymbol simpleFillSymbol;
  75. //通过一个循环, 给所有渲染的等级附上渲染颜色
  76. for (int i = ; i < myclasses.Length; i++)
  77. {
  78. color = pEnumColors.Next();
  79. simpleFillSymbol = new SimpleFillSymbolClass();
  80. simpleFillSymbol.Color = color;
  81. //设置填充的样式(Style)为实体填充
  82. simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
  83. //指定分级渲染的符号(Symbol)
  84. classBreaksRenderer.set_Symbol(i, simpleFillSymbol as ISymbol);
  85. //按照分级进行渲染
  86. classBreaksRenderer.set_Break(i, myclasses[i]);
  87. }
  88. if (pGeoFeatureLayer != null)
  89. {
  90. //调用Renderer属性, 具体说明如何通过图层要素渲染器绘制图层
  91. pGeoFeatureLayer.Renderer = classBreaksRenderer as IFeatureRenderer;
  92. }
  93. axMapControl1.Refresh(); //刷新axMapControl1
  94. axTOCControl1.Update(); //更新axTOCControl1
  95.  
  96. }

需要用到的函数:CreateAlgorithmicColorRamp(int count)

  1. /// <summary>
  2. /// 创建规则的颜色带
  3. /// </summary>
  4. /// <param name="count"></param>
  5. /// <returns></returns>
  6. private IColorRamp CreateAlgorithmicColorRamp(int count)
  7. {
  8. //创建一个新渐变色带(AlgorithmicColorRampClass)对象
  9. IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();
  10. IRgbColor fromColor = new RgbColorClass();
  11. IRgbColor toColor = new RgbColorClass();
  12. //创建其实颜色对象, 采用三原色定律
  13. fromColor.Red = ;
  14. fromColor.Green = ;
  15. fromColor.Blue = ;
  16. //创建终止颜色对象
  17. toColor.Red = ;
  18. toColor.Green = ;
  19. toColor.Blue = ;
  20. //设置AlgorithmicColorRampClass的起止颜色属性
  21. algColorRamp.ToColor = toColor;
  22. algColorRamp.FromColor = fromColor;
  23. //设置梯度类型
  24. algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
  25. //设置颜色带颜色数量
  26. algColorRamp.Size = count;
  27. //创建颜色带
  28. bool bture = true;
  29. algColorRamp.CreateRamp(out bture);
  30. return algColorRamp;
  31. }

注:out参数可以在一个方法中返回多个不同类型的值

3、唯一值法渲染器

唯一值法渲染器(UniqueValueRender)——根据特征的某不同属性值来绘制该特征的符号
①遍历要素类
②获得渲染字段下的值
③使用IUniqueValueRenderer所提供的Addvalue方法渲染各个值
④赋值目标图层的Renderer属性, 完成渲染
⑤刷新地图

  1. /// <summary>
  2. /// 唯一值法渲染器(UniqueValueRender)——根据特征的某不同属性值来绘制该特征的符号
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void 唯一值法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
  7. {
  8. //定义IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口
  9. IGeoFeatureLayer geoFeatureLayer = getGeoLayer("北部湾");
  10. //使用查询的方式, 获得参与渲染的记录条数
  11. int get_Count = geoFeatureLayer.FeatureClass.FeatureCount(null);
  12. //提供操作唯一值的相关成员
  13. IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRendererClass();
  14. //设置渲染的字段个数范围:0~3个
  15. //这里仅设置1个字段
  16. uniqueValueRenderer.FieldCount = ;
  17. //设置渲染字段, 并制定到索引处
  18. //索引从0开始; 设定渲染字段为"地市名"
  19. uniqueValueRenderer.set_Field(, "地市名");
  20. //简单填充符号
  21. ISimpleFillSymbol simpleFillSymbol;
  22. //获得指向渲染要素的游标
  23. IFeatureCursor pFtCursor = geoFeatureLayer.FeatureClass.Search(null, false);
  24. IFeature pFeature;
  25. if (pFtCursor != null)
  26. {
  27. //定义枚举颜色带, 调用函数, 生成随机颜色带
  28. IEnumColors enumColors = CreateRandomColorRamp(get_Count).Colors;
  29. //查找到"地市名"字段的索引(index)
  30. int fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField("地市名");
  31. while ((pFeature = pFtCursor.NextFeature()) != null)
  32. {
  33. //获取要素值
  34. string nameValue = pFeature.get_Value(fieldIndex).ToString();
  35.  
  36. //实例化填充符号
  37. //使用填充符号来赋值地图的背景值
  38. simpleFillSymbol = new SimpleFillSymbolClass();
  39. //给要素附上样式
  40. simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
  41. //给要素附上颜色
  42. simpleFillSymbol.Color = enumColors.Next() as IColor;
  43. //值和符号对应
  44. uniqueValueRenderer.AddValue(nameValue, "地市", simpleFillSymbol as ISymbol);
  45. }
  46. }
  47. //赋值目标图层的渲染器属性
  48. geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer;
  49. axMapControl1.Refresh(); //刷新axMapControl1
  50. axTOCControl1.Update(); //更新axTOCControl1
  51. }

需要用到的函数:CreateRandomColorRamp(int Number)

  1. /// <summary>
  2. /// 创建随机的颜色条带
  3. /// </summary>
  4. /// <param name="Number"></param>
  5. /// <returns></returns>
  6. private IColorRamp CreateRandomColorRamp(int Number)
  7. {
  8. //请注意色度、饱和度、最大值、最小值、随机种子数等参数的设定
  9. //参数不同, 所产生的色带也不同
  10. IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();
  11. pRandomColorRamp.StartHue = ; //开始色度
  12. pRandomColorRamp.EndHue = ;
  13. pRandomColorRamp.MinValue = ;
  14. pRandomColorRamp.MaxValue = ;
  15. pRandomColorRamp.MinSaturation = ; //最小饱和度
  16. pRandomColorRamp.MaxSaturation = ; //最大饱和度
  17. pRandomColorRamp.Size = Number; //设置颜色带数量
  18. pRandomColorRamp.Seed = ; //随机数种子
  19. bool bture = true;
  20. pRandomColorRamp.CreateRamp(out bture);
  21. return pRandomColorRamp;
  22. }

4、比例符号法渲染器

比例符号法渲染器(ProportionalSymbolRenderer)——用不同大小的符号绘制要素, 其大小对应某一字段值的比例。
①统计目标字段, 获得相关统计值
②设计标记符号
③补充完整ProportionalSymbolRenderer对象的重要属性值
④赋值目标图层的Renderer属性, 完成渲染
⑤刷新地图

  1. /// <summary>
  2. /// 比例符号法渲染器(ProportionalSymbolRenderer)——用不同大小的符号绘制要素, 其大小对应某一字段值的比例。
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void 比例符号法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
  7. {
  8. //声明IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口
  9. IGeoFeatureLayer geoFeatureLayer;
  10. //声明要素图层
  11. IFeatureLayer pFtLayer;
  12. //声明专题图变量
  13. //在利用该方法进行着色时, 需获得最大和最小标识符号所代表的字段及其各个数值, 还需要确定每个字段数值所匹配的着色符号。
  14. IProportionalSymbolRenderer proportionalSymbolRenderer;
  15. //声明表格
  16. ITable table;
  17. //声明游标
  18. ICursor cursor;
  19. //用于统计变量
  20. IDataStatistics dataStatistics;
  21. //用于存放统计结果
  22. IStatisticsResults statisticsResults;
  23. //声明一个字体对象
  24. stdole.IFontDisp fontDisp;
  25. //获取图层
  26. geoFeatureLayer = getGeoLayer("北部湾");
  27. //强转为要素图层
  28. pFtLayer = geoFeatureLayer as IFeatureLayer;
  29. //图层类型转换成表
  30. table = geoFeatureLayer as ITable;
  31. //获取游标
  32. cursor = table.Search(null, true);
  33. //实例化数据统计对象
  34. dataStatistics = new DataStatisticsClass();
  35. //赋游标给数据统计对象的游标
  36. dataStatistics.Cursor = cursor;
  37. //获取图层要素中进行专题地图制图的字段名称, 此实例中所用的数据中字段名为"年"(2010年GDP增长速率)
  38. dataStatistics.Field = "年";
  39. //存放统计结果为统计对象的统计数据
  40. statisticsResults = dataStatistics.Statistics;
  41. //如果统计结果不为空
  42. if (statisticsResults != null)
  43. {
  44. //简单填充符号
  45. IFillSymbol fillSymbol = new SimpleFillSymbolClass();
  46. //设置颜色
  47. fillSymbol.Color = getRGB(, , );
  48. //设置简单线型符号
  49. ISimpleLineSymbol SLS = new SimpleLineSymbolClass();
  50. SLS.Color = getRGB(, , );//颜色
  51. SLS.Width = 1.5;//宽度
  52. fillSymbol.Outline = SLS;//外边界线
  53. //利用ESRI特殊符号调用成员进行填充
  54. ICharacterMarkerSymbol characterMarkerSymbol = new CharacterMarkerSymbolClass();
  55. fontDisp = new stdole.StdFontClass() as stdole.IFontDisp;
  56. //调用指定子库(ESRI Default Marker是子库名称)
  57. fontDisp.Name = "ESRI Default Marker";
  58.  
  59. //对characterMarkerSymbol的font属性
  60. characterMarkerSymbol.Font = fontDisp;
  61. //特征标记符号(Character Marker Symbol)的索引值
  62. //0xB6是C#特殊的16进制表示方法, 换算为十进制值182
  63. characterMarkerSymbol.CharacterIndex = 0xB6;
  64. //特征标记符号的颜色
  65. characterMarkerSymbol.Color = getRGB(, , );
  66. //设计特征标记符号的尺寸
  67. characterMarkerSymbol.Size = ;
  68. //实例化一个比例符号渲染器
  69. proportionalSymbolRenderer = new ProportionalSymbolRendererClass();
  70. proportionalSymbolRenderer.ValueUnit = esriUnits.esriUnknownUnits;
  71. //获取渲染字段
  72. proportionalSymbolRenderer.Field = "年";
  73. //是否启用颜色补偿(默认为否)
  74. proportionalSymbolRenderer.FlanneryCompensation = false;
  75. //赋值统计数据(比例符号渲染器)
  76. //MinDataValue获取数据中最小值
  77. proportionalSymbolRenderer.MinDataValue = statisticsResults.Minimum;
  78. //获取数据中最大值
  79. proportionalSymbolRenderer.MaxDataValue = statisticsResults.Maximum;
  80. //在多边形特征上绘制比例标记符号时使用的背景填充符号
  81. proportionalSymbolRenderer.BackgroundSymbol = fillSymbol;
  82. //用于绘制具有规格化最小数据值的特征的符号。
  83. proportionalSymbolRenderer.MinSymbol = characterMarkerSymbol as ISymbol;
  84. //目录和图例中显示的符号数为3
  85. proportionalSymbolRenderer.LegendSymbolCount = ;
  86. //创建图例, 设置完所有属性后调用。
  87. proportionalSymbolRenderer.CreateLegendSymbols();
  88. //赋值目标图层的渲染器属性
  89. geoFeatureLayer.Renderer = proportionalSymbolRenderer as IFeatureRenderer;
  90. }
  91. axMapControl1.Refresh(); //刷新axMapControl1
  92. axTOCControl1.Update(); //更新axTOCControl1
  93.  
  94. }

5、点状密度法渲染器

点状密度法渲染器(DotDensityRenderer)——在多边形特征中绘制不同密度的点
①制作点符号
②使用IDotDensityFillSymbo包装制作好的符号
③赋值点密度渲染(dotDensityRenderer)的点密度符号(DotDensitySymbol)属性
④赋值其它参数
⑤赋值目标图层的Renderer属性, 完成渲染
⑥刷新地图

  1. /// <summary>
  2. /// 点状密度法渲染器(DotDensityRenderer)——在多边形特征中绘制不同密度的点
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. private void 点状密度法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
  7. {
  8. //声明IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口
  9. IGeoFeatureLayer geoFeatureLayer;
  10. //定义点密度填充符号变量, 控制点符号的属性
  11. IDotDensityFillSymbol dotDensityFillSymbol;
  12. //定义点密度渲染对象
  13. IDotDensityRenderer dotDensityRenderer;
  14. //获取渲染图层
  15. geoFeatureLayer = getGeoLayer("北部湾");
  16. //实例化点密度渲染对象
  17. dotDensityRenderer = new DotDensityRendererClass();
  18. //强转点密度渲染对象并强转成渲染字段对象
  19. IRendererFields rendererFields = dotDensityRenderer as IRendererFields;
  20. //设置渲染字段
  21. string field1 = "年";
  22. //向渲染器添加字段(字段名、别名)
  23. rendererFields.AddField(field1, field1);
  24. //实例化点密度填充符号
  25. dotDensityFillSymbol = new DotDensityFillSymbolClass();
  26. dotDensityFillSymbol.DotSize = ;//设置点的大小
  27. dotDensityFillSymbol.Color = getRGB(, , );//设置点的颜色
  28.  
  29. //将点密度填充符号强转为符号数组成员
  30. ISymbolArray symbolArray = dotDensityFillSymbol as ISymbolArray;
  31. //实例化简单标记符号
  32. ISimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbolClass();
  33. //设置点的符号为圆圈
  34. simpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
  35. simpleMarkerSymbol.Size = ;//设置大小
  36. simpleMarkerSymbol.Color = getRGB(, , );//设置颜色
  37. //点符号的外边不填充颜色
  38. simpleMarkerSymbol.OutlineColor = getNoRGB();
  39. //将简单标记符号样式增加到符号数组成员中
  40. symbolArray.AddSymbol(simpleMarkerSymbol as ISymbol);
  41. //赋值点密度渲染(dotDensityRenderer)的点密度符号(DotDensitySymbol)属性
  42. dotDensityRenderer.DotDensitySymbol = dotDensityFillSymbol;
  43. //设置渲染密度
  44. dotDensityRenderer.DotValue = 0.003;
  45. //设置点密度填充符号的背景色
  46. dotDensityFillSymbol.BackgroundColor = getRGB(, , );
  47. //创建图例
  48. dotDensityRenderer.CreateLegend();
  49. //赋值目标图层的渲染器属性
  50. geoFeatureLayer.Renderer = dotDensityRenderer as IFeatureRenderer;
  51. axMapControl1.Refresh(); //刷新axMapControl1
  52. axTOCControl1.Update(); //更新axTOCControl1
  53.  
  54. }

需要用到的函数:getNoRGB()

  1. /// <summary>
  2. /// 不填充颜色
  3. /// </summary>
  4. /// <returns></returns>
  5. private IColor getNoRGB()
  6. {
  7. IRgbColor pColor = new RgbColorClass();
  8. //.NullColor指示此颜色是否为空。true表明颜色为空
  9. pColor.NullColor = true;
  10. return pColor;//返回pColor
  11. }

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

ArcGIS Engine专题地图渲染器的实现(入门版)的更多相关文章

  1. ArcGIS Engine要素渲染和专题图制作(转)

    摘要:Feature的常用的绘制方法包括:1.简单绘制:2.唯一值绘制/多字段唯一值绘制:3.点密度/多字段点密度绘制:4.数据分级绘制:5.质量图(饼图/直方图): 6.按比例尺渲染:7.比例符号渲 ...

  2. C#,ArcGIS Engine开发入门教程

    C#,ArcGIS Engine开发入门教程 转自:http://blog.csdn.net/yanleigis/article/details/2233674  目录(?)[+] 五实现 一 加载A ...

  3. ArcGIS Engine开发前基础知识(1)

    ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...

  4. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  5. ArcGIS Engine中的8种数据访问 (转)

    数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种数据格式在ArcGI ...

  6. ArcGIS Engine中的数据访问

    ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...

  7. [转载]ArcGIS Engine 中的多线程使用

    ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写 ...

  8. ArcGIS Engine中的8种数据访问

    数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种数据格式在ArcGI ...

  9. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

随机推荐

  1. Java中的方法和方法重载

    上次我们讲了Java中的一些基本的语法;今天我们就讲一点内容,来说说Java中的方法和方法重载以及需要注意的一些地方; 方法: Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段, ...

  2. 判断java中最多的词组

    其中的难点,是空格,以及如果第一个是空格怎么办,虽然事后看着很简单,但是做的时候却十分的困难! static void Daunyu()throws IOException {     Word wo ...

  3. linux下mysql数据库操作命令

    1:启动服务 service mysqld start (5.0版本是mysqld) service mysql start (5.5.7版本是mysql) 2:停止服务 service mysqld ...

  4. 判断日期是否为法定节假日的API接口与示例函数

    需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http ...

  5. Thinkphp5.0第二篇

    查询构造器 //插入记录 $result=Db::table('think_data')->insert(['name'=>'张三','status'=>1]); //修改数据 $r ...

  6. [Machine learning] Logistic regression

    1. Variable definitions m : training examples' count \(X\) : design matrix. each row of \(X\) is a t ...

  7. CentOS8 yum/dnf 配置国内源

    CentOS8 yum/dnf 配置国内源(临时) CentOS 8更改了软件包的安装程序,取消了 yum 的配置方法,改而使用了dnf 作为安装程序.虽然改变了软件包的安装方式,但是 dnf 还是能 ...

  8. springmvc框架的使用

    1.在idea中新建java web项目,引入spring和springmvc所需jar包,其中 spring-web-3.2.12.RELEASE.jar:在web应用开发时使用spring框架所需 ...

  9. mpvue 图片上传预览组件封装

    <template> <div class="j-pic-upload"> <div class="j-upload-btn" @ ...

  10. 点云之OpenMesh:error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such file or directory

    1.这是一个错误引发的惨案:错误提示如下: 在进行点云程序调试时,出现错误:[error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such fil ...