ArcEngine符号化——填充符号

1、前言

这篇博客来介绍一下ArcEngine中的填充符号。填充符号一般有简单填充点填充线填充等等,有一类特殊的点密度填充将在下一篇博客介绍。

2、常用的填充符号

2.1、简单填充符号
ArcEngine符号化——填充符号_第1张图片

2.2、点填充符号
ArcEngine符号化——填充符号_第2张图片

2.3、线填充符号
ArcEngine符号化——填充符号_第3张图片

2.4、叠加填充符号
ArcEngine符号化——填充符号_第4张图片

2.5、图片填充符号
ArcEngine符号化——填充符号_第5张图片

2.6、渐变填充符号ArcEngine符号化——填充符号_第6张图片

3、实现代码

using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using stdole;
using ESRI.ArcGIS.Geodatabase;

namespace Win
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            axMapControl1.AddShapeFile(@"C:\Users\DSF\Desktop\data", @"polygon.shp");
        }

        /// 
        /// 简单填充符号
        /// 
        /// 
        /// 
        private void btnSimpleFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建线符号
            ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
            pSimpleLineSymbol.Color = CreateRgbColor(0, 255, 0);
            pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            pSimpleLineSymbol.Width = 2;

            // 创建填充符号
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbol();
            pSimpleFillSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleFillSymbol.Outline = pSimpleLineSymbol;
            pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pSimpleFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 点填充符号
        /// 
        /// 
        /// 
        private void btnMarkerFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建点符号
            ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();
            pSimpleMarkerSymbol.Angle = 45;
            pSimpleMarkerSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleMarkerSymbol.Size = 15;
            pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCross;

            // 创建填充符号
            IMarkerFillSymbol pMarkerFillSymbol = new MarkerFillSymbol();
            pMarkerFillSymbol.MarkerSymbol = pSimpleMarkerSymbol;
            pMarkerFillSymbol.Style = esriMarkerFillStyle.esriMFSGrid;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pMarkerFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 线填充符号
        /// 
        /// 
        /// 
        private void btnLineFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建线符号
            ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
            pSimpleLineSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            pSimpleLineSymbol.Width = 1;

            // 创建填充符号
            ILineFillSymbol pLineFillSymbol = new LineFillSymbol();
            pLineFillSymbol.Angle = 0;
            pLineFillSymbol.LineSymbol = pSimpleLineSymbol;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pLineFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 叠加填充符号
        /// 
        /// 
        /// 
        private void btnMultiLayerFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建垂直填充符号
            ISimpleFillSymbol pVerticalFillSymbol = new SimpleFillSymbol();
            pVerticalFillSymbol.Color = CreateRgbColor(255, 0, 0);
            pVerticalFillSymbol.Style = esriSimpleFillStyle.esriSFSVertical;

            // 创建水平填充符号
            ISimpleFillSymbol pHorizontalFillSymbol = new SimpleFillSymbol();
            pHorizontalFillSymbol.Color = CreateRgbColor(0, 255, 0);
            pHorizontalFillSymbol.Style = esriSimpleFillStyle.esriSFSHorizontal;

            // 创建叠加填充符号
            IMultiLayerFillSymbol pMultiLayerFillSymbol = new MultiLayerFillSymbol();
            pMultiLayerFillSymbol.AddLayer(pVerticalFillSymbol);
            pMultiLayerFillSymbol.AddLayer(pHorizontalFillSymbol);

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pMultiLayerFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 图片填充符号
        /// 
        /// 
        /// 
        private void btnPictureFillSymbol_Click(object sender, EventArgs e)
        {
            IPictureFillSymbol pPictureFillSymbol = new PictureFillSymbol();
            pPictureFillSymbol.Angle = 0;
            pPictureFillSymbol.CreateFillSymbolFromFile(esriIPictureType.esriIPicturePNG, @"C:\Users\DSF\Desktop\Driving_Directions16.png");

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pPictureFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 渐变填充符号
        /// 
        /// 
        /// 
        private void btnGradientFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建色带
            IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRamp();
            pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicColorRamp.FromColor = CreateRgbColor(255, 0, 0);
            pAlgorithmicColorRamp.ToColor = CreateRgbColor(0, 255, 0);

            // 创建渐变填充符号
            IGradientFillSymbol pGradientFillSymbol = new GradientFillSymbol();
            pGradientFillSymbol.ColorRamp = pAlgorithmicColorRamp;
            pGradientFillSymbol.IntervalCount = 100;
            pGradientFillSymbol.Style = esriGradientFillStyle.esriGFSLinear;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pGradientFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// 
        /// 创建RGB颜色
        /// 
        /// 
        /// 
        /// 
        /// 
        private IRgbColor CreateRgbColor(int R, int G, int B)
        {
            IRgbColor pRgbColor = new RgbColor();
            pRgbColor.Red = R;
            pRgbColor.Green = G;
            pRgbColor.Blue = B;
            return pRgbColor;
        }
    }
}

你可能感兴趣的:(ArcEngine,ArcEngine)