1、前言
在GIS
系统的开发过程中,地图符号化
其实是非常重要的一块内容。ArcEngine
为我们提供了很多种符号样式,现在就来介绍一下ArcEngine
中的点状符号。
2、常用的点符号
2.1、简单符号
2.2、箭头符号
2.3、叠加符号
2.4、字符标记符号
2.5、图片符号
3、实现代码
using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using stdole;
namespace Win
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
axMapControl1.AddShapeFile(@"C:\Users\DSF\Desktop\data", @"point.shp");
}
/// <summary>
/// 简单点符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSimpleMarkerSymbol_Click(object sender, EventArgs e)
{
// 点符号颜色
IRgbColor pMarkerSymbolColor = new RgbColor();
pMarkerSymbolColor.Red = 255;
pMarkerSymbolColor.Green = 0;
pMarkerSymbolColor.Blue = 0;
// 轮廓线颜色
IRgbColor pOutlineColor = new RgbColor();
pOutlineColor.Red = 0;
pOutlineColor.Green = 0;
pOutlineColor.Blue = 255;
// 创建符号
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();
pSimpleMarkerSymbol.Angle = 30;
pSimpleMarkerSymbol.Color = pMarkerSymbolColor;
pSimpleMarkerSymbol.Size = 15;
pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSSquare;
pSimpleMarkerSymbol.Outline = true;
pSimpleMarkerSymbol.OutlineColor = pOutlineColor;
pSimpleMarkerSymbol.OutlineSize = 3;
// 设置符号
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
pSimpleRenderer.Symbol = pSimpleMarkerSymbol as ISymbol;
// 刷新地图
axMapControl1.Refresh();
axTOCControl1.Update();
}
/// <summary>
/// 箭头符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnArrowMarkerSymbol_Click(object sender, EventArgs e)
{
// 点符号颜色
IRgbColor pRgbColor = new RgbColor();
pRgbColor.Red = 255;
pRgbColor.Green = 0;
pRgbColor.Blue = 0;
// 创建符号
IArrowMarkerSymbol pArrowMarkerSymbol = new ArrowMarkerSymbol();
pArrowMarkerSymbol.Angle = 0;
pArrowMarkerSymbol.Color = pRgbColor;
pArrowMarkerSymbol.Length = 20;
pArrowMarkerSymbol.Size = 30;
pArrowMarkerSymbol.Style = esriArrowMarkerStyle.esriAMSPlain;
pArrowMarkerSymbol.Width = 20;
// 设置符号
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
pSimpleRenderer.Symbol = pArrowMarkerSymbol as ISymbol;
// 刷新地图
axMapControl1.Refresh();
axTOCControl1.Update();
}
/// <summary>
/// 叠加符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMultiLayerMarkerSymbol_Click(object sender, EventArgs e)
{
// 创建简单符号颜色
IRgbColor pSimpleMarkerSymbolColor = new RgbColor();
pSimpleMarkerSymbolColor.Red = 255;
pSimpleMarkerSymbolColor.Green = 0;
pSimpleMarkerSymbolColor.Blue = 0;
// 创建箭头符号颜色
IRgbColor pArrowMarkerSymbolColor = new RgbColor();
pArrowMarkerSymbolColor.Red = 0;
pArrowMarkerSymbolColor.Green = 255;
pArrowMarkerSymbolColor.Blue = 0;
// 创建简单符号
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();
pSimpleMarkerSymbol.Color = pSimpleMarkerSymbolColor;
pSimpleMarkerSymbol.Size = 30;
pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCross;
// 创建箭头符号
IArrowMarkerSymbol pArrowMarkerSymbol = new ArrowMarkerSymbol();
pArrowMarkerSymbol.Color = pArrowMarkerSymbolColor;
pArrowMarkerSymbol.Length = 20;
pArrowMarkerSymbol.Size = 20;
pArrowMarkerSymbol.Style = esriArrowMarkerStyle.esriAMSPlain;
pArrowMarkerSymbol.Width = 20;
// 创建叠加符号
IMultiLayerMarkerSymbol pMultiLayerMarkerSymbol = new MultiLayerMarkerSymbol();
pMultiLayerMarkerSymbol.AddLayer(pSimpleMarkerSymbol);
pMultiLayerMarkerSymbol.AddLayer(pArrowMarkerSymbol);
// 设置符号
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
pSimpleRenderer.Symbol = pMultiLayerMarkerSymbol as ISymbol;
// 刷新地图
axMapControl1.Refresh();
axTOCControl1.Update();
}
/// <summary>
/// 字符标记符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCharacterMarkerSymbol_Click(object sender, EventArgs e)
{
// 点符号颜色
IRgbColor pRgbColor = new RgbColor();
pRgbColor.Red = 255;
pRgbColor.Green = 0;
pRgbColor.Blue = 0;
// 创建字体
IFontDisp pFontDisp = new StdFont() as IFontDisp;
pFontDisp.Name = "楷体";
pFontDisp.Size = 40;
// 创建符号
ICharacterMarkerSymbol pCharacterMarkerSymbol = new CharacterMarkerSymbol();
pCharacterMarkerSymbol.Angle = 0;
pCharacterMarkerSymbol.CharacterIndex = 10084;
pCharacterMarkerSymbol.Color = pRgbColor;
pCharacterMarkerSymbol.Font = pFontDisp;
pCharacterMarkerSymbol.Size = 40;
// 设置符号
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
pSimpleRenderer.Symbol = pCharacterMarkerSymbol as ISymbol;
// 刷新地图
axMapControl1.Refresh();
axTOCControl1.Update();
}
/// <summary>
/// 图片符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPictureMarkerSymbol_Click(object sender, EventArgs e)
{
// 创建符号
IPictureMarkerSymbol pPictureMarkerSymbol = new PictureMarkerSymbol();
pPictureMarkerSymbol.Angle = 0;
pPictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, @"C:\Users\DSF\Desktop\Driving_Directions32.png");
pPictureMarkerSymbol.Size = 25;
// 设置符号
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
pSimpleRenderer.Symbol = pPictureMarkerSymbol as ISymbol;
// 刷新地图
axMapControl1.Refresh();
axTOCControl1.Update();
}
}
}