ArcGis Engine编程之图层渲染与输入坐标画要素

实验:符号化元素和图层
使用c#+ArcGIS Engine开发一个界面,点击菜单,调用shapefile文件。
图层渲染
要求,点击不同的图层,渲染方式不同。
林班分布图:简单渲染,颜色为红色,斜纹填充。
小班分布图:ValueMapRenerer,按LBH字段渲染
等高线:ClassBreakRender,分级渲染,按ID字段分级渲染,分成5级。

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;

//        Form2.Designer.cs中class Form2改变private成public
//        public ESRI.ArcGIS.Controls.AxMapControl axMapControl1;
//        public ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1;
//        public ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1;
//        public ESRI.ArcGIS.Controls.AxToolbarControl axToolbarControl1;
namespace 实验四
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void 林班分布图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.axMapControl1.AddShapeFile(Application.StartupPath+"\\实验四数据","林班分布图");
            form2.Show();
            form2.axTOCControl1.SetBuddyControl(form2.axMapControl1);
            IFeatureLayer pFeatureLayer;
            pFeatureLayer = form2.axMapControl1.get_Layer(0) as IFeatureLayer;
            IGeoFeatureLayer pGeoFeatureLayer;
            pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer; //qi
            ISimpleFillSymbol pSimpleFillSymbol=new SimpleFillSymbol();
            pSimpleFillSymbol.Style=esriSimpleFillStyle.esriSFSCross;
            IRgbColor pRgbColor = new RgbColorClass();
            pRgbColor.Red = 255;
            pSimpleFillSymbol.Color = pRgbColor;
            ISimpleRenderer pSimpleRender = new SimpleRendererClass();
            pSimpleRender.Symbol = pSimpleFillSymbol as ISymbol;
            pGeoFeatureLayer.Renderer = pSimpleRender as IFeatureRenderer;

        }

        private void 小班分布图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.axMapControl1.AddShapeFile(Application.StartupPath + "\\实验四数据", "小班分布图");
            form2.Show();
            form2.axTOCControl1.SetBuddyControl(form2.axMapControl1);

            IFeatureLayer pFeaturelayer;
            pFeaturelayer = form2.axMapControl1.get_Layer(0) as IFeatureLayer;
            IGeoFeatureLayer pGeofeaturelayer;
            pGeofeaturelayer = pFeaturelayer as IGeoFeatureLayer;
            IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass();
            ITable pTable = pFeaturelayer as ITable;
            int fieldnumber = pTable.FindField("LBH");
            pUniqueValueRenderer.FieldCount = 1;
            pUniqueValueRenderer.set_Field(0, "LBH");
            IQueryFilter pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField("LBH");
            ICursor pCursor;
            pCursor = pTable.Search(pQueryFilter, true);
            IRow pRow;
            pRow = pCursor.NextRow();
            IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();
            pRandomColorRamp.StartHue = 0;
            pRandomColorRamp.EndHue = 360;
            pRandomColorRamp.MinSaturation = 0;
            pRandomColorRamp.MaxSaturation = 100;
            pRandomColorRamp.MinValue = 0;
            pRandomColorRamp.MaxValue = 100;
            pRandomColorRamp.Size = 100;
            Boolean btrue = true;
            pRandomColorRamp.CreateRamp(out btrue);
            IEnumColors pEnumColors;
            pEnumColors = pRandomColorRamp.Colors;
            IColor pColor;
            pColor = pEnumColors.Next();
            while (pRow != null)
            {
                IRowBuffer pRowBuffer = pRow as IRowBuffer;
                string codevalue = pRowBuffer.get_Value(fieldnumber).ToString();
                pColor = pEnumColors.Next();
                if (pColor == null)
                {
                    pEnumColors.Reset();
                    pColor = pEnumColors.Next();
                }
                ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
                pSimpleFillSymbol.Color = pColor;
                pUniqueValueRenderer.AddValue(codevalue, "林班号", pSimpleFillSymbol as ISymbol);
                pRow = pCursor.NextRow();
                pGeofeaturelayer.Renderer = pUniqueValueRenderer as IFeatureRenderer;
            }
        }

        private void 等高线ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.axMapControl1.AddShapeFile(Application.StartupPath + "\\实验四数据", "等高线");
            form2.Show();
            form2.axTOCControl1.SetBuddyControl(form2.axMapControl1);

            IGeoFeatureLayer pGeoFeatureLayer;
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            pFeatureLayer = form2.axMapControl1.Map.get_Layer(0) as IFeatureLayer;
            pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
            ITable pTable;
            pTable = pGeoFeatureLayer as ITable;
            string classBreaksField = "ID";//要渲染的字段名称
            object dataValues;
            object dataFrequency;
            ITableHistogram tableHistogram = new BasicTableHistogramClass();
            IBasicHistogram basicHistogram = (IBasicHistogram)tableHistogram;
            tableHistogram.Field = classBreaksField;
            tableHistogram.Table = pTable;
            basicHistogram.GetHistogram(out dataValues, out dataFrequency);
            int classesNumber = 5;
            IClassifyGEN classifyGEN = new EqualIntervalClass();
            classifyGEN.Classify(dataValues, dataFrequency, ref classesNumber);

            double[] classes = (double[])classifyGEN.ClassBreaks;
            int classCount = classes.GetUpperBound(0);
            //设置着色对象的分级数据
            IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();
            classBreaksRenderer.Field = "ID";
            classBreaksRenderer.BreakCount = classCount;
            classBreaksRenderer.SortClassesAscending = true;
            //产生分级着色需要的颜色带对象的起止颜色对象
            IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass();
            pColorRamp.FromColor = GetHSV(60, 100, 96);
            pColorRamp.ToColor = GetHSV(0, 100, 96);
            pColorRamp.Size = classCount;
            pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
            bool aaa = true;
            pColorRamp.CreateRamp(out aaa);
            //获得颜色
            IEnumColors pEnumColors;
            pEnumColors = pColorRamp.Colors;
            pEnumColors.Reset();
            IColor pColor;
            ISimpleLineSymbol pLineSymbol;
            int breakIndex;
            //需要注意的是分级着色对象中的symbol和break的下标都是从0开始
            for (breakIndex = 0; breakIndex < classCount - 1; breakIndex++)
            {
                pColor = pEnumColors.Next();
                pLineSymbol = new SimpleLineSymbolClass();
                pLineSymbol.Color = pColor;
                pLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
                classBreaksRenderer.set_Symbol(breakIndex, pLineSymbol as ISymbol);

                classBreaksRenderer.set_Break(breakIndex, classes[breakIndex]);
                pGeoFeatureLayer.Renderer = classBreaksRenderer as IFeatureRenderer;
            }
        }
        private IHsvColor GetHSV(int r, int g, int b)
        {
            IHsvColor pColor;
            pColor = new HsvColorClass();
            pColor.Hue = r;
            pColor.Saturation = g;
            pColor.Value = b;
            return pColor;
        }

    }
}

Form1:

ArcGis Engine编程之图层渲染与输入坐标画要素_第1张图片

Form2.cs[设计]:

ArcGis Engine编程之图层渲染与输入坐标画要素_第2张图片

运行:
ArcGis Engine编程之图层渲染与输入坐标画要素_第3张图片

实验:使用输入坐标点画要素
从用户输入的点创建要素,输入四个点,画一个网格多边形。
(每产生一个点,我们可以在dbf文件中查看多了部分记录)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;

namespace shiyan5_2
{
    public partial class Form1 : Form
    {
        IScreenDisplay m_pSDisplay;
        ISimpleFillSymbol pSym;
        IRgbColor pColor;
        IPointCollection m_pPointCol;
        IPoint m_pPoint;  

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            axMapControl1.AddShapeFile(Application.StartupPath, "\\wind");
            m_pSDisplay = axMapControl1.ActiveView.ScreenDisplay;
            m_pPointCol = new PolygonClass();
            pSym = new SimpleFillSymbolClass();
            pColor = new RgbColorClass();
            pColor.Red = 255;
            pSym.Style = esriSimpleFillStyle.esriSFSCross;
            pSym.Color = pColor;
            m_pSDisplay.SetSymbol(pSym as ISymbol);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_pPoint = new PointClass();
            object missing1 = Type.Missing;
            object missing2 = Type.Missing;
            m_pPoint.X = double.Parse(textBox1.Text);
            m_pPoint.Y = double.Parse(textBox2.Text);
            m_pPointCol.AddPoint(m_pPoint, missing1, missing2);
            textBox1.Text = null;
            textBox2.Text = null;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            m_pSDisplay.StartDrawing(m_pSDisplay.hDC, (short)esriScreenCache.esriNoScreenCache);
            m_pSDisplay.SetSymbol(pSym as ISymbol);
            m_pSDisplay.DrawPolygon(m_pPointCol as IGeometry);
            m_pSDisplay.FinishDrawing();

        }

    }
}

ArcGis Engine编程之图层渲染与输入坐标画要素_第4张图片

你可能感兴趣的:(编程,C#,arcgis)