ArcEngine符号化——点符号

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();
        }
    }
}
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对选中要素进行符号化,可以使用ArcEngine中的以下步骤: 1. 获取选中的要素集合: 首先,使用ISelectionEnvironment接口获取当前的选择环境。然后,使用ISelectionSet接口获取选中的要素集合。 2. 创建要素渲染器: 使用IFeatureRenderer接口创建一个新的要素渲染器对象(如SimpleRenderer、UniqueValueRenderer等)。 3. 设置要素符号: 根据需求,为要素渲染器设置相应的要素符号。可以使用ISymbol接口创建符号(如SimpleMarkerSymbol、PictureMarkerSymbol等)。 4. 应用符号化: 使用IFeatureLayer接口获取要素图层对象。然后,将刚刚创建的要素渲染器赋值给图层的Renderer属性。最后,调用IActiveView接口的PartialRefresh方法刷新地图视图。 下面是一个示例代码片段,演示了如何对选中要素进行符号化: ```csharp // 获取当前选择环境 ISelectionEnvironment selectionEnvironment = new SelectionEnvironmentClass(); ISelectionSet selectionSet = selectionEnvironment.Catalog.SelectionSet; // 创建要素渲染器 ISimpleRenderer simpleRenderer = new SimpleRendererClass(); ISymbol symbol = new SimpleMarkerSymbolClass(); simpleRenderer.Symbol = symbol; // 设置要素符号 // ... // 应用符号化 IFeatureLayer featureLayer = (IFeatureLayer)mapLayer; featureLayer.Renderer = (IFeatureRenderer)simpleRenderer; IActiveView activeView = (IActiveView)mapControl.Map; activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); ``` 请根据实际需求,根据ArcEngine的API文档进一步调整和完善代码。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值