在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → Engine二次开发

Engine二次开发

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:34.79M
  • 下载次数:98
  • 浏览次数:1066
  • 发布时间:2018-12-03
  • 实例类别:C#语言基础
  • 发 布 人:龙普成
  • 文件格式:.7z
  • 所需积分:2
 相关标签: 开发

实例介绍

【实例简介】ArcGIS二次开发实例

【实例截图】

from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard


from clipboard

【核心代码】


#region using引用
using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using System.IO;
using ESRI.ArcGIS.SystemUI;
using AddData;
using MapOperation;
using QueryAndStatistics;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geoprocessor;
using 测量;
using 打印;
using _17;
using _23;
using HunanForestsInformation;
using System.Collections.Generic;
using EngineWindowsApplication2;
using 符号化.Class;
using ESRI.ArcGIS.DataSourcesFile;
#endregion

namespace 课设
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        #region 变量定义
        private string sMxdPath = Application.StartupPath;
        private IMap pMap = null;
        private IActiveView pActiveView = null;
        private List<ILayer> plstLayers = null;
        private IFeatureLayer pCurrentLyr = null;
        private IEngineEditor pEngineEditor = null;
        private IEngineEditTask pEngineEditTask = null;
        private IEngineEditLayers pEngineEditLayers = null;

        #endregion

        #region 获取路径
        public string getPath(string path)
        {
            int t;
            for (t = 0; t < path.Length; t  )
            {
                if (path.Substring(t, 7) == "设计类综合实习")
                {
                    break;
                }
            }
            string name = path.Substring(0, t   7);
            return name;
        }
        #endregion

        #region 主地图控件
        /// <summary>
        /// 主地图控件OnMapReplaced事件
        ///当主地图显示控件的地图更换时,鹰眼中的地图也跟随更换
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buju()
        {
            //axMapControl3.SpatialReference = axMapControl1.SpatialReference;
            for (int i = axMapControl1.LayerCount - 1; i >= 0; i--)
            {
                //使鹰眼视图与数据视图的图层上下顺序保持一致
                ILayer pLayer = axMapControl1.get_Layer(i);
                if (pLayer is IGroupLayer || pLayer is ICompositeLayer)
                {
                    ICompositeLayer pCompositeLayer = (ICompositeLayer)pLayer;
                    for (int j = pCompositeLayer.Count - 1; j >= 0; j--)
                    {
                        ILayer pSubLayer = pCompositeLayer.get_Layer(j);
                        IFeatureLayer pFeatureLayer = pSubLayer as IFeatureLayer;
                        //if (pFeatureLayer != null)
                        //{
                        //    //由于鹰眼地图较小,所以过滤点图层不添加
                        //    if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint
                        //        && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint)
                        //    {
                        //        axMapControl2.AddLayer(pLayer);
                        //    }
                        //}
                    }
                }
                else
                {
                    IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                    if (pFeatureLayer != null)
                    {
                        if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint
                            && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint)

                            axMapControl2.AddLayer(pLayer);

                    }
                }
            }
        }

        private void SynchronizeEagleEye()
        {
            if (axMapControl2.LayerCount > 0)
            {
                axMapControl2.ClearLayers();
            }
            //设置鹰眼和主地图的坐标系统一致
            axMapControl2.SpatialReference = axMapControl1.SpatialReference;
            for (int i = axMapControl1.LayerCount - 1; i >= 0; i--)
            {
                //使鹰眼视图与数据视图的图层上下顺序保持一致
                ILayer pLayer = axMapControl1.get_Layer(i);
                if (pLayer is IGroupLayer || pLayer is ICompositeLayer)
                {
                    ICompositeLayer pCompositeLayer = (ICompositeLayer)pLayer;
                    for (int j = pCompositeLayer.Count - 1; j >= 0; j--)
                    {
                        ILayer pSubLayer = pCompositeLayer.get_Layer(j);
                        IFeatureLayer pFeatureLayer = pSubLayer as IFeatureLayer;
                        if (pFeatureLayer != null)
                        {
                            //由于鹰眼地图较小,所以过滤点图层不添加
                            if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint
                                && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint)
                            {
                                axMapControl2.AddLayer(pLayer);
                            }
                        }
                    }
                }
                else
                {
                    IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                    if (pFeatureLayer != null)
                    {
                        if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint
                            && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint)

                            axMapControl2.AddLayer(pLayer);

                    }
                }
                //设置鹰眼地图全图显示  
                axMapControl2.Extent = axMapControl1.FullExtent;
                pEnv = axMapControl1.Extent as IEnvelope;
                DrawRectangle(pEnv);
                axMapControl2.ActiveView.Refresh();
            }
        }

        #endregion

        #region 鹰眼地图控件
        /// <summary>
        /// 初始化鹰眼地图控件
        /// </summary>
        //private void axmp3()
        //{
        //    axMapControl3.Extent = axMapControl1.Extent;
        //    pEnv1 = axMapControl3.Extent;
        //    DrawRectangle(pEnv1);
        //}
        private void InitEagleEyeMap()
        {
            axMapControl2.Extent = axMapControl1.FullExtent;

            pEnv = axMapControl2.Extent;
            DrawRectangle(pEnv);
        }
        /// <summary>
        /// 鹰眼地图控件OnMouseDown事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void axMapControl2_OnMouseDown_1(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
                if (axMapControl2.Map.LayerCount > 0)
            {
                //按下鼠标左键移动矩形框
                if (e.button == 1)
                {
                    //如果指针落在鹰眼的矩形框中,标记可移动
                    if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax)
                    {
                        bCanDrag = true;
                    }
                    pMoveRectPoint = new PointClass();
                    pMoveRectPoint.PutCoords(e.mapX, e.mapY);  //记录点击的第一个点的坐标
                }
                //按下鼠标右键绘制矩形框
                else if (e.button == 2)
                {
                    IEnvelope pEnvelope = axMapControl2.TrackRectangle();

                    IPoint pTempPoint = new PointClass();
                    pTempPoint.PutCoords(pEnvelope.XMin   pEnvelope.Width / 2, pEnvelope.YMin   pEnvelope.Height / 2);
                    axMapControl1.Extent = pEnvelope;
                    //矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心调整
                    axMapControl1.CenterAt(pTempPoint);
                }
            }
        }
        /// <summary>
        /// 鹰眼地图控件OnMouseMove事件,移动矩形框
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void axMapControl2_OnMouseMove_1(object sender, IMapControlEvents2_OnMouseMoveEvent e)
        {
            if (axMapControl1.LayerCount != 0)
            {
                if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax)
                {
                    //如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动
                    axMapControl2.MousePointer = esriControlsMousePointer.esriPointerHand;
                    if (e.button == 2)  //如果在内部按下鼠标右键,将鼠标演示设置为默认样式
                    {
                        axMapControl2.MousePointer = esriControlsMousePointer.esriPointerDefault;
                    }
                }
                else
                {
                    //在其他位置将鼠标设为默认的样式
                    axMapControl2.MousePointer = esriControlsMousePointer.esriPointerDefault;
                }

                if (bCanDrag)
                {
                    double Dx, Dy;  //记录鼠标移动的距离
                    Dx = e.mapX - pMoveRectPoint.X;
                    Dy = e.mapY - pMoveRectPoint.Y;
                    pEnv.Offset(Dx, Dy); //根据偏移量更改 pEnv 位置
                    pMoveRectPoint.PutCoords(e.mapX, e.mapY);
                    DrawRectangle(pEnv);
                    axMapControl1.Extent = pEnv;
                }

            }
        }
        /// <summary>
        /// 设置地图控件中心点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void axMapControl2_OnMouseUp_1(object sender, IMapControlEvents2_OnMouseUpEvent e)
        {
            if (e.button == 1 && pMoveRectPoint != null)
            {
                if (e.mapX == pMoveRectPoint.X && e.mapY == pMoveRectPoint.Y)
                {
                    axMapControl1.CenterAt(pMoveRectPoint);
                }
                bCanDrag = false;
            }

        }
        /// <summary>
        /// 在鹰眼地图上面画矩形框
        /// </summary>
        /// <param name="pEnvelope"></param>
        private void DrawRectangle(IEnvelope pEnvelope)
        {
            //在绘制前,清除鹰眼中之前绘制的矩形框
            IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;
            //IGraphicsContainer pGC = axMapControl3.Map as IGraphicsContainer;
            IActiveView pActiveView = pGraphicsContainer as IActiveView;
            pGraphicsContainer.DeleteAllElements();
            //得到当前视图范围
            IRectangleElement pRectangleElement = new RectangleElementClass();
            IElement pElement = pRectangleElement as IElement;
            pElement.Geometry = pEnvelope;
            //设置矩形框(实质为中间透明度面)
            IRgbColor pColor = new RgbColorClass();
            pColor = GetRgbColor(255, 0, 0);
            pColor.Transparency = 255;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();
            pOutLine.Width = 2;
            pOutLine.Color = pColor;

            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            pColor = new RgbColorClass();
            pColor.Transparency = 0;
            pFillSymbol.Color = pColor;
            pFillSymbol.Outline = pOutLine;
            //向鹰眼中添加矩形框
            IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;
            pFillShapeElement.Symbol = pFillSymbol;
            pGraphicsContainer.AddElement((IElement)pFillShapeElement, 0);
            //刷新
            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }

        /// <summary>
        /// 获取RGB颜色
        /// </summary>
        /// <param name="intR">红</param>
        /// <param name="intG">绿</param>
        /// <param name="intB">蓝</param>
        /// <returns></returns>
        private IRgbColor GetRgbColor(int intR, int intG, int intB)
        {
            IRgbColor pRgbColor = null;
            if (intR < 0 || intR > 255 || intG < 0 || intG > 255 || intB < 0 || intB > 255)
            {
                return pRgbColor;
            }
            pRgbColor = new RgbColorClass();
            pRgbColor.Red = intR;
            pRgbColor.Green = intG;
            pRgbColor.Blue = intB;
            return pRgbColor;
        }
        #endregion

        #region 鹰眼代码

        private bool bCanDrag;           //鹰眼地图上的矩形框可移动的标志
        private IPoint pMoveRectPoint;    //记录在移动鹰眼地图上的矩形框时鼠标的位置
        private IEnvelope pEnv;         //记录数据视图的Extent

        private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
        {
            EagleEye eagleEye = new EagleEye(axMapControl1,axMapControl2,axPageLayoutControl1);
            if (e.TabPage.Name == "地图")
                eagleEye.ActiveMapControl();
            else
                eagleEye.ActivePageLayouControl();
        }

        private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
        {
            SynchronizeEagleEye();
            //comboBox1.Items.Clear();
            //for (int i = 0; i < axMapControl1.LayerCount; i  )
            //{
            //    ILayer pLayer = axMapControl1.get_Layer(i);
            //    comboBox1.Items.Add(pLayer.Name);
            //}
        }

        private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
        {
            //得到当前视图范围
            pEnv = (IEnvelope)e.newEnvelope;
            DrawRectangle(pEnv);
        }

        private void tabPage2_Click(object sender, EventArgs e)
        {
            IObjectCopy pOC = new ObjectCopyClass();
            object copyFormMap = axMapControl1.Map;
            object copiedMap = pOC.Copy(copyFormMap);//复制地图到copiedMap中
            object copyToMap = axPageLayoutControl1.ActiveView.FocusMap;
            pOC.Overwrite(copiedMap, ref copyToMap);//复制地图
            axPageLayoutControl1.ActiveView.Refresh();
        }

        private void axMapControl1_OnAfterScreenDraw(object sender, IMapControlEvents2_OnAfterScreenDrawEvent e)
        {
            IActiveView pAV = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;
            IDisplayTransformation dTf = pAV.ScreenDisplay.DisplayTransformation;
            dTf.VisibleBounds = axMapControl1.Extent;
            axPageLayoutControl1.ActiveView.Refresh();
            EagleEye eagleEye = new EagleEye(axMapControl1, axMapControl2, axPageLayoutControl1);
            eagleEye.CopyToPageLayout();
        }

        #endregion

        #region 测量代码

        #region 量测
        //长度、面积量算
        private Form3 frmMeasureResult = null;   //量算结果窗体
        string pMouseOperate = null;
        private INewLineFeedback pNewLineFeedback;           //追踪线对象
        private INewPolygonFeedback pNewPolygonFeedback;     //追踪面对象
        private IPoint pPointPt = null;                      //鼠标点击点
        private IPoint pMovePt = null;                       //鼠标移动时的当前点
        private double dToltalLength = 0;                    //量测总长度
        private double dSegmentLength = 0;                   //片段距离
        private IPointCollection pAreaPointCol = new MultipointClass();  //面积量算时画的点进行存储;  

        private string sMapUnits = "未知单位";             //地图单位变量
        private object missing = Type.Missing;

        bool measure = false;
        private void 测量ToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void 距离测量ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            measure = true;
            axMapControl1.CurrentTool = null;
            pMouseOperate = "MeasureLength";
            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
            if (frmMeasureResult == null || frmMeasureResult.IsDisposed)
            {
                frmMeasureResult = new Form3();
                frmMeasureResult.frmClosed  = new Form3.FormClosedEventHandler(frmMeasureResult_frmColsed);
                frmMeasureResult.label2.Text = "";
                frmMeasureResult.Text = "距离量测";
                frmMeasureResult.Show();
            }
            else
            {
                frmMeasureResult.Activate();
            }
        }

        //测量结果窗口关闭响应事件
        private void frmMeasureResult_frmColsed()
        {
            //清空线对象
            if (pNewLineFeedback != null)
            {
                pNewLineFeedback.Stop();
                pNewLineFeedback = null;
            }
            //清空面对象
            if (pNewPolygonFeedback != null)
            {
                pNewPolygonFeedback.Stop();
                pNewPolygonFeedback = null;
                pAreaPointCol.RemovePoints(0, pAreaPointCol.PointCount); //清空点集中所有点
            }
            //清空量算画的线、面对象
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
            //结束量算功能
            pMouseOperate = string.Empty;
            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;
        }

        private void 面积测量ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            measure = true;
            axMapControl1.CurrentTool = null;
            pMouseOperate = "MeasureArea";
            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
            if (frmMeasureResult == null || frmMeasureResult.IsDisposed)
            {
                frmMeasureResult = new Form3();
                frmMeasureResult.frmClosed  = new Form3.FormClosedEventHandler(frmMeasureResult_frmColsed);
                frmMeasureResult.label2.Text = "";
                frmMeasureResult.Text = "面积量测";
                frmMeasureResult.Show();
            }
            else
            {
                frmMeasureResult.Activate();
            }
        }

        #endregion

        private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
            if (export)
            {
                axMapControl1.ActiveView.GraphicsContainer.DeleteAllElements();
                axMapControl1.ActiveView.Refresh();
                IPolygon pPolygon = DrawPolygon(axMapControl1);
                if (pPolygon == null) return;
                ExportMap.AddElement(pPolygon, axMapControl1.ActiveView);
                if (fm2 == null || fm2.IsDisposed)
                {
                    fm2 = new FormExportMap(axMapControl1);
                }
                fm2.IsRegion = true;
                fm2.GetGeometry = pPolygon as IGeometry;
                fm2.Show();
                fm2.Activate();
                export = false;
            }
            if (measure)
            {
                //屏幕坐标点转化为地图坐标点
                pPointPt = (axMapControl1.Map as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);

                if (e.button == 1)
                {
                    IActiveView pActiveView = axMapControl1.ActiveView;
                    IEnvelope pEnvelope = new EnvelopeClass();

                    switch (pMouseOperate)
                    {
                        #region 距离量算
                        case "MeasureLength":
                            //判断追踪线对象是否为空,若是则实例化并设置当前鼠标点为起始点
                            if (pNewLineFeedback == null)
                            {
                                //实例化追踪线对象
                                pNewLineFeedback = new NewLineFeedbackClass();
                                pNewLineFeedback.Display = (axMapControl1.Map as IActiveView).ScreenDisplay;
                                //设置起点,开始动态线绘制
                                pNewLineFeedback.Start(pPointPt);
                                dToltalLength = 0;
                            }
                            else //如果追踪线对象不为空,则添加当前鼠标点
                            {
                                pNewLineFeedback.AddPoint(pPointPt);
                            }
                            //pGeometry = m_PointPt;
                            if (dSegmentLength != 0)
                            {
                                dToltalLength = dToltalLength   dSegmentLength;
                            }
                            break;
                        #endregion
                        #region 面积量算
                        case "MeasureArea":
                            if (pNewPolygonFeedback == null)
                            {
                                //实例化追踪面对象
                                pNewPolygonFeedback = new NewPolygonFeedback();
                                pNewPolygonFeedback.Display = (axMapControl1.Map as IActiveView).ScreenDisplay;
                                ;
                                pAreaPointCol.RemovePoints(0, pAreaPointCol.PointCount);
                                //开始绘制多边形
                                pNewPolygonFeedback.Start(pPointPt);
                                pAreaPointCol.AddPoint(pPointPt, ref missing, ref missing);
                            }
                            else
                            {
                                pNewPolygonFeedback.AddPoint(pPointPt);
                                pAreaPointCol.AddPoint(pPointPt, ref missing, ref missing);
                            }
                            break;
                        #endregion
                    }
                }
            }
        }

        private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
        {
            try
            {
                double Lpdx = e.mapX;
                double Lpdy = e.mapY;
                string strCoordinate = "X = "   Lpdy.ToString()   ";  "   "Y = "   Lpdx.ToString();
                toolStripStatusLabel_Coordinate.Text = strCoordinate;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            if (measure)
            {
                sMapUnits = GetMapUnit(axMapControl1.Map.MapUnits);
                pMovePt = (axMapControl1.Map as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                #region 长度量算
                if (pMouseOperate == "MeasureLength")
                {
                    if (pNewLineFeedback != null)
                    {
                        pNewLineFeedback.MoveTo(pMovePt);
                    }
                    double deltaX = 0; //两点之间X差值
                    double deltaY = 0; //两点之间Y差值

                    if ((pPointPt != null) && (pNewLineFeedback != null))
                    {
                        deltaX = pMovePt.X - pPointPt.X;
                        deltaY = pMovePt.Y - pPointPt.Y;
                        dSegmentLength = Math.Round(Math.Sqrt((deltaX * deltaX)   (deltaY * deltaY)), 3);
                        dToltalLength = dToltalLength   dSegmentLength;
                        if (frmMeasureResult != null)
                        {
                            frmMeasureResult.label2.Text = String.Format(
                                "当前线段长度:{0:.###}{1};\r\n总长度为: {2:.###}{1}",
                                dSegmentLength, sMapUnits, dToltalLength);
                            dToltalLength = dToltalLength - dSegmentLength; //鼠标移动到新点重新开始计算
                        }
                        frmMeasureResult.frmClosed  = new Form3.FormClosedEventHandler(frmMeasureResult_frmColsed);
                    }
                }
                #endregion

                #region 面积量算
                if (pMouseOperate == "MeasureArea")
                {
                    if (pNewPolygonFeedback != null)
                    {
                        pNewPolygonFeedback.MoveTo(pMovePt);
                    }

                    IPointCollection pPointCol = new Polygon();
                    IPolygon pPolygon = new PolygonClass();
                    IGeometry pGeo = null;

                    ITopologicalOperator pTopo = null;
                    for (int i = 0; i <= pAreaPointCol.PointCount - 1; i  )
                    {
                        pPointCol.AddPoint(pAreaPointCol.get_Point(i), ref missing, ref missing);
                    }
                    pPointCol.AddPoint(pMovePt, ref missing, ref missing);

                    if (pPointCol.PointCount < 3) return;
                    pPolygon = pPointCol as IPolygon;

                    if ((pPolygon != null))
                    {
                        pPolygon.Close();
                        pGeo = pPolygon as IGeometry;
                        pTopo = pGeo as ITopologicalOperator;
                        //使几何图形的拓扑正确
                        pTopo.Simplify();
                        pGeo.Project(axMapControl1.Map.SpatialReference);
                        IArea pArea = pGeo as IArea;

                        frmMeasureResult.label2.Text = String.Format(
                            "总面积为:{0:.####}平方{1};\r\n总长度为:{2:.####}{1}",
                            pArea.Area, sMapUnits, pPolygon.Length);
                        pPolygon = null;
                    }
                }
                #endregion
            }
        }

        private string GetMapUnit(esriUnits _esriMapUnit)
        {
            string sMapUnits = string.Empty;
            switch (_esriMapUnit)
            {
                case esriUnits.esriCentimeters:
                    sMapUnits = "厘米";
                    break;
                case esriUnits.esriDecimalDegrees:
                    sMapUnits = "十进制";
                    break;
                case esriUnits.esriDecimeters:
                    sMapUnits = "分米";
                    break;
                case esriUnits.esriFeet:
                    sMapUnits = "尺";
                    break;
                case esriUnits.esriInches:
                    sMapUnits = "英寸";
                    break;
                case esriUnits.esriKilometers:
                    sMapUnits = "千米";
                    break;
                case esriUnits.esriMeters:
                    sMapUnits = "米";
                    break;
                case esriUnits.esriMiles:
                    sMapUnits = "英里";
                    break;
                case esriUnits.esriMillimeters:
                    sMapUnits = "毫米";
                    break;
                case esriUnits.esriNauticalMiles:
                    sMapUnits = "海里";
                    break;
                case esriUnits.esriPoints:
                    sMapUnits = "点";
                    break;
                case esriUnits.esriUnitsLast:
                    sMapUnits = "UnitsLast";
                    break;
                case esriUnits.esriUnknownUnits:
                    sMapUnits = "未知单位";
                    break;
                case esriUnits.esriYards:
                    sMapUnits = "码";
                    break;
                default:
                    break;
            }
            return sMapUnits;
        }

        private void axMapControl1_OnDoubleClick(object sender, IMapControlEvents2_OnDoubleClickEvent e)
        {
            if (measure)
            {
                #region 长度量算
                if (pMouseOperate == "MeasureLength")
                {
                    if (frmMeasureResult != null)
                    {
                        frmMeasureResult.label2.Text = "线段总长度为:"   dToltalLength   sMapUnits;
                    }
                    if (pNewLineFeedback != null)
                    {
                        pNewLineFeedback.Stop();
                        pNewLineFeedback = null;
                        //清空所画的线对象
                        (axMapControl1.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
                    }
                    dToltalLength = 0;
                    dSegmentLength = 0;
                    measure = false;
                }
                #endregion

                #region 面积量算
                if (pMouseOperate == "MeasureArea")
                {
                    if (pNewPolygonFeedback != null)
                    {
                        pNewPolygonFeedback.Stop();
                        pNewPolygonFeedback = null;
                        //清空所画的线对象
                        (axMapControl1.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
                    }
                    pAreaPointCol.RemovePoints(0, pAreaPointCol.PointCount); //清空点集中所有点
                    measure = false;
                }
                #endregion
            }
        }

        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {
            CenterToScreen();
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool", -1, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);

        }

        #region 数据操作

        #region 加载地图
        private void 加载PersonGeodatabase数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddPersonGeodatabase();
        }

        private void 加载MXDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.LoadMxFile();
        }

        private void 加载shape文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddShapefile();
        }

        private void 加载raster数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddRaster();
        }

        private void 加载CAD数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddCADByLayer();
        }

        private void 加载FileGeodatabase数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddFileDatabase();
        }

        private void 加载ArcSED数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.AddSDEByDirect();
        }
        #endregion

        private void 保存文档ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.SaveMap();
            MessageBox.Show("保存成功!");
        }

        private void 文档另存为ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LoadDataClass ldc = new LoadDataClass(axMapControl1);
            ldc.SaveAsMap();
            MessageBox.Show("另存成功!");
        }
        
        #region 导出地图
        FormExportMap fm2 = null;
        //string pMouseOperate = null;
        bool export = false;

        public IPolygon DrawPolygon(AxMapControl mapCtrl)
        {
            IGeometry pGeometry = null;
            if (mapCtrl == null) return null;
            IRubberBand rb = new RubberPolygonClass();
            pGeometry = rb.TrackNew(mapCtrl.ActiveView.ScreenDisplay, null);
            return pGeometry as IPolygon;
        }

        private void 导出地图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }

        private void 全域导出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            export = true;
            if (fm2 == null || fm2.IsDisposed)
            {
                fm2 = new FormExportMap(axMapControl1);
            }
            fm2.IsRegion = false;
            fm2.GetGeometry = axMapControl1.ActiveView.Extent;
            fm2.Show();
            fm2.Activate();
            export = false;
        }

        private void 区域导出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            export = true;
            axMapControl1.CurrentTool = null;
            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
            pMouseOperate = "ExportRegion";
        }
        #endregion

        #endregion

        private void 清除选择ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IActiveView pActiveView = axMapControl1.ActiveView;
            pActiveView.FocusMap.ClearSelection();
            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, pActiveView.Extent);
        }

        #region 空间查询
        bool query = false;
        private void 属性查询ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            query = true;
            //新创建属性查询窗体
            FormQueryByAttribute formQueryByAttribute = new FormQueryByAttribute();
            //将当前主窗体中MapControl控件中的Map对象赋值给FormQueryByAttribute窗体的CurrentMap属性
            formQueryByAttribute.CurrentMap = axMapControl1.Map;
            //显示属性查询窗体
            formQueryByAttribute.Show();
        }
        
        private void 空间查询ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            query = true;
            //新创建空间查询窗体
            FormQueryBySpatial formQueryBySpatial = new FormQueryBySpatial();
            //将当前主窗体中MapControl控件中的Map对象赋值给FormSelection窗体的CurrentMap属性
            formQueryBySpatial.CurrentMap = axMapControl1.Map;
            //显示空间查询窗体
            formQueryBySpatial.Show();
        }
        private void 缩放至要素ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (query)
            {
                IRgbColor rgb;
                ISymbol pSymbol = null;
                ISelectionEnvironment iSelectionEnvironment = new SelectionEnvironmentClass();
                iSelectionEnvironment.DefaultColor = new RgbColorClass() { Red = 255, Blue = 0, Green = 0 };
                System.Windows.Forms.Application.DoEvents();
                ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsZoomToSelectedCommandClass();
                pCommand.OnCreate(axMapControl1.Object);
                pCommand.OnClick();
                axMapControl1.ActiveView.ScreenDisplay.UpdateWindow();
                ISelection selection = axMapControl1.Map.FeatureSelection;
                IEnumFeature enumFeature = (IEnumFeature)selection;
                enumFeature.Reset();
                IFeature pFeature = enumFeature.Next();
                //ArrayClass array = new ArrayClass();
                //while (pFeature != null)
                //{
                //    array.Add(pFeature);
                //    pFeature = enumFeature.Next();
                //}
                switch (pFeature.Shape.GeometryType)
                {
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                        ISimpleFillSymbol pfillSymbol = new SimpleFillSymbol();
                        rgb = new RgbColorClass() { Red = 255, Blue = 0, Green = 0 };
                        pfillSymbol.Color = rgb;
                        pSymbol = pfillSymbol as ISymbol;
                        break;
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                        ISimpleLineSymbol plineSymbol = new SimpleLineSymbol();
                        rgb = new RgbColorClass() { Red = 255, Blue = 0, Green = 0 };
                        plineSymbol.Color = rgb;
                        pSymbol = plineSymbol as ISymbol;
                        break;
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                        ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol();
                        rgb = new RgbColorClass() { Red = 255, Blue = 0, Green = 0 };
                        pMarkerSymbol.Color = rgb;
                        pSymbol = pMarkerSymbol as ISymbol;
                        break;
                    default:
                        break;
                }
                axMapControl1.FlashShape(pFeature.Shape, 5, 1000, pSymbol);
                query = false;
                //IActiveView.Refresh()并不会立刻启动 redraw 方法来重新绘制窗口,要想立刻绘制,需要显式调用ScreenDIsplay.UpdateWindow()方法。
            }
            else
                MessageBox.Show("请先选择查询方式选择要素。");
        }

        #endregion

        #region 打印
        frmPrintPreview print;
        public bool printf = false;
        private void 打印ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            printf = true;
            print = new frmPrintPreview(axPageLayoutControl1);
            print.fm1 = this;
            print.ShowDialog();
        }
        #endregion

        #region GP工具
        bool GP=false;
        private void 添加shp图层ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            GP = true;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = true; 
            ofd.CheckFileExists = true;
            ofd.Title = "打开图片";
            ofd.Filter = "*.shp|*.shp";
            ofd.ShowDialog();
            if (ofd.FileName == "") return;
            int Index = ofd.FileName.LastIndexOf("\\");
            string pFilePath = ofd.FileName.Substring(0, Index);
            string pFileName = ofd.FileName.Substring(Index   1);

            IMap map = new Map();
            map.Name = "shp";
            axMapControl1.DocumentFilename = string.Empty;
            axMapControl1.Map = map;
            axMapControl1.AddShapeFile(pFilePath, pFileName);
            
            axMapControl1.ActiveView.Refresh();
        }

        private void 缓冲区分析ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (GP)
            {
                try
                {
                    //缓冲区分析-GP工具调用
                    Geoprocessor gp = new Geoprocessor();
                    gp.OverwriteOutput = true;
                    ESRI.ArcGIS.AnalysisTools.Buffer pBuffer = new ESRI.ArcGIS.AnalysisTools.Buffer();
                    //获取缓冲区分析图层
                    ILayer pLayer = this.axMapControl1.get_Layer(0);
                    IFeatureLayer featLayer = pLayer as IFeatureLayer;
                    pBuffer.in_features = featLayer;
                    string filepath = @"E:\";
                    //设置生成结果存储路径
                    pBuffer.out_feature_class = filepath   "\\"   pLayer.Name   ".shp";
                    //设置缓冲区距离
                    pBuffer.buffer_distance_or_field = "5000 Meters";
                    pBuffer.dissolve_option = "ALL";
                    //执行缓冲区分析
                    gp.Execute(pBuffer, null);
                    //将生成结果添加到地图中
                    this.axMapControl1.AddShapeFile(filepath, pLayer.Name);
                    MessageBox.Show("缓冲区已生成,文件保存至路径'E\'");
                    this.axMapControl1.MoveLayerTo(1, 0);
                }
                catch (Exception ex)
                {
                    //MessageBox.Show("请输入有效数据");
                    MessageBox.Show(ex.Message);
                }
            }
            else
                MessageBox.Show("请先添加.shp图层。");
        }

        private void shape转CADToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (GP)
            {
                FrmShapeToCAD pFrmShapeToCAD = new FrmShapeToCAD(this.axMapControl1);
                pFrmShapeToCAD.ShowDialog();
                if (pFrmShapeToCAD.DialogResult == DialogResult.OK)
                {
                    this.axMapControl1.Refresh();
                    this.axTOCControl1.Refresh();
                }
            }
            else
                MessageBox.Show("请先添加.shp图层。");
        }

        private void shp导入GeodatabaseToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            //首先打开ShapeFile数据
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "ShapeFile(*.shp)|*.shp";
            openFileDialog1.Multiselect = false;
            DialogResult pDialogResult = openFileDialog1.ShowDialog();
            if (pDialogResult != DialogResult.OK)
                return;
            string pPath = openFileDialog1.FileName;
            string pFolder = System.IO.Path.GetDirectoryName(pPath);
            string pFileName = System.IO.Path.GetFileName(pPath);
            //获得ShapeFile数据的工作空间
            IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass();
            sourceWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";
            sourceWorkspaceName.PathName = pFolder;
            IName sourceWorkspaceIName = (IName)sourceWorkspaceName;
            IWorkspace sourceWorkspace = (IWorkspace)sourceWorkspaceIName.Open();
            // 打开目标存储File GeodataBase然后并打开此文件数据库工作空间
            IWorkspaceName targetWorkspaceName = new WorkspaceNameClass
            {
                WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory",
                PathName = pFolder   @"\FileGDB.gdb"
            };
            IName targetWorkspaceIName = (IName)targetWorkspaceName;
            IWorkspace targetWorkspace = null;
            try
            {
                targetWorkspace = (IWorkspace)targetWorkspaceIName.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "未能正确读取目标工作空间,请确保读取ShapeFile数据路径下有FileGDB.gdb空间数据库(直接将数据压缩文件解压即可)!", "运行提示");
            }

            // 将ShapeFile数据转化为IDatasetName数据集
            IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
            IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
            sourceDatasetName.Name = pFileName.Split('.')[0];
            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            // 为目标转化图层创建数据集
            IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
            IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
            targetDatasetName.Name = pFileName.Split('.')[0];
            targetDatasetName.WorkspaceName = targetWorkspaceName;
            // 打开源ShapeFile数据获得IFeatureClass
            IName sourceName = (IName)sourceFeatureClassName;
            IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();
            // 获得源ShapeFile数据的所有字段
            IFieldChecker fieldChecker = new FieldCheckerClass();
            IFields sourceFields = sourceFeatureClass.Fields;
            IFields targetFields = null;
            IEnumFieldError enumFieldError = null;
            // 设置字段检验参数
            fieldChecker.InputWorkspace = sourceWorkspace;
            fieldChecker.ValidateWorkspace = targetWorkspace;
            // 检验字段集合是否符合转换要求
            fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields);
            if (enumFieldError != null)
            {
                MessageBox.Show("数据在进行字段转换过程中出现错误!");
            }
            // 获ShapeFile数据图形要素字段
            String shapeFieldName = sourceFeatureClass.ShapeFieldName;
            int shapeFieldIndex = sourceFeatureClass.FindField(shapeFieldName);
            IField shapeField = sourceFields.get_Field(shapeFieldIndex);
            // 进行图形要素克隆
            IGeometryDef geometryDef = shapeField.GeometryDef;
            IClone geometryDefClone = (IClone)geometryDef;
            IClone targetGeometryDefClone = geometryDefClone.Clone();
            IGeometryDef targetGeometryDef = (IGeometryDef)targetGeometryDefClone;
            // 利用IGeometryDefEdit进行目标要素图层属性设置
            IGeometryDefEdit targetGeometryDefEdit = (IGeometryDefEdit)targetGeometryDef;
            targetGeometryDefEdit.GridCount_2 = 1;
            targetGeometryDefEdit.set_GridSize(0, 0.75);
            // 选择特定条件要素
            IQueryFilter queryFilter = new QueryFilterClass();
            queryFilter.WhereClause = "PROVINCE = 37";
            queryFilter.SubFields = "*";
            // 通过IFeatureDataConverter进行数据转换
            try
            {
                IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();
                IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass
                    (sourceFeatureClassName, queryFilter, null, targetFeatureClassName,
                    targetGeometryDef, targetFields, "", 1000, 0);    // Check for errors.
                IInvalidObjectInfo invalidObjectInfo = null;
                enumInvalidObject.Reset();
                while ((invalidObjectInfo = enumInvalidObject.Next()) != null)
                {
                    //输出转换过程日志
                    MessageBox.Show("数据在进行"   invalidObjectInfo.InvalidObjectID   "要素转换过程中出现错误!");
                }
                MessageBox.Show("转换成功结束!");
            }
            catch
            {
                MessageBox.Show("在目标文件夹中存在同名称图层,请先删除!", "消息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
        }

        #endregion

        #region contextMenuScript

        private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
        {
            ESRI.ArcGIS.Geometry.Point pMoveLayerPoint = new ESRI.ArcGIS.Geometry.Point();//鼠标在TOC中左键按下时点的位置
            ILayer pLyr = null;
            System.Object pIndex = null;
            IBasicMap pMap = null;
            System.Object pOther = null;
            esriTOCControlItem pItem = new esriTOCControlItem();
            try
            {
                //调用HitTest方法()
                axTOCControl1.HitTest(e.x, e.y, ref pItem, ref pMap, ref pLyr, ref pOther, ref pIndex);
                if (e.button == 1)
                {
                    switch (pItem)//pItem是判断鼠标点击部位的关键
                    {
                        case esriTOCControlItem.esriTOCControlItemLayer:
                            if (pLyr == null)
                                return;//如果没有点击到图层
                            else if (pLyr is IAnnotationSublayer)//如果点击的是注记层,则退出
                                return;
                            else
                            {
                                pMoveLayerPoint.PutCoords(e.x, e.y);
                                axMapControl1.CustomProperty = pLyr;
                            }

                            //if (pLyr is IFeatureLayer) ;//矢量图层
                            //if (pLyr is IRasterLayer) ;//栅格图层
                            //MessageBox.Show("您点击了图层\""   pLyr.Name   "\"的名称");

                            break;
                        case esriTOCControlItem.esriTOCControlItemLegendClass:
                            MessageBox.Show("您点击了图层\""   pLyr.Name   "\"的图例");
                            break;
                        case esriTOCControlItem.esriTOCControlItemMap:
                            MessageBox.Show("您点击了名称为\""   pMap.Name   "\"的Map"  
                            "对象的名称,它包含\""   pMap.LayerCount   "\"个图层");
                            break;
                        case esriTOCControlItem.esriTOCControlItemNone:
                            MessageBox.Show("您点击了TocControl控件的空白处。");
                            break;
                        default:
                            break;
                    }
                }
                else if (e.button == 2)
                {
                    axMapControl1.CustomProperty = pLyr;

                    if (pLyr != null && pItem == esriTOCControlItem.esriTOCControlItemLayer)
                        contextMenuStrip1.Show(axTOCControl1, e.x, e.y);

                    //if (pItem == esriTOCControlItem.esriTOCControlItemMap)
                    //    contextMenuStrip1.Show(axTOCControl1, e.x, e.y);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private ESRI.ArcGIS.Geometry.Point pMoveLayerPoint = new ESRI.ArcGIS.Geometry.Point();//鼠标在TOC中左键按下时点的位置
        private FormAttribute frmAttribute = null;        //图层属性窗体

        private void 属性表ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IFeatureLayer pFeatureLayer = axMapControl1.CustomProperty as IFeatureLayer;
            if (pFeatureLayer == null)
                return;

            if (frmAttribute == null || frmAttribute.IsDisposed)
                frmAttribute = new FormAttribute();

            frmAttribute.CurFeatureLayer = pFeatureLayer;
            frmAttribute.InitUI();
            frmAttribute.ShowDialog();
        }

        private void 缩放到图层ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ILayer pLayer = axMapControl1.CustomProperty as ILayer;
            if (pLayer == null) return;

            (axMapControl1.Map as IActiveView).Extent = pLayer.AreaOfInterest;
            (axMapControl1.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }

        private void 删除图层ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                ILayer pLayer = axMapControl1.CustomProperty as ILayer;
                if (pLayer == null) return;

                DialogResult result = MessageBox.Show("是否删除["   pLayer.Name   "]图层", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                if (result == DialogResult.OK)
                    axMapControl1.Map.DeleteLayer(pLayer);

                axMapControl1.ActiveView.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void 统计ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormStatistics fm = new FormStatistics();
            //将当前主窗体中MapControl控件中的Map对象赋值给FormStatistics窗体的CurrentMap属性
            fm.CurrentMap = axMapControl1.Map;
            //显示统计窗体
            fm.Show();
        }

        #region 标注
        private frmAnnotation frmAnnotation = null;  // 注记
        private OperateMap m_OperateMap = new OperateMap();
        private void 图层标注ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (frmAnnotation == null || frmAnnotation.IsDisposed)
                {
                    frmAnnotation = new frmAnnotation();
                    frmAnnotation.Annotation  = new frmAnnotation.AnnotationEventHandler(frmAnnotation_Annotation);
                }
                frmAnnotation.Map = axMapControl1.Map;
                frmAnnotation.InitUI();
                frmAnnotation.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        void frmAnnotation_Annotation(string sFeatClsName, string sFieldName)
        {
            IFeatureLayer pFeatLyr = m_OperateMap.GetFeatLyrByName(axMapControl1.Map, sFeatClsName);
            Annotation(pFeatLyr, sFieldName);
        }
        /// <summary>
        /// 注记
        /// </summary>
        /// <param name="pFeatLyr">注记图层名称</param>
        /// <param name="sFieldName">注记字段</param>
        private void Annotation(IFeatureLayer pFeatLyr, string sFieldName)
        {
            try
            {
                IGeoFeatureLayer pGeoFeatLyer = pFeatLyr as IGeoFeatureLayer;
                IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatLyer.AnnotationProperties;
                pAnnoProps.Clear();
                //设置标注记体格式                                                                     
                ITextSymbol pTextSymbol = new TextSymbolClass();
                stdole.StdFont pFont = new stdole.StdFontClass();
                pFont.Name = "verdana";
                pFont.Size = 10;
                pTextSymbol.Font = pFont as stdole.IFontDisp;
                //设置注记放置格式
                ILineLabelPosition pPosition = new LineLabelPositionClass();
                pPosition.Parallel = false;
                pPosition.Perpendicular = true;
                ILineLabelPlacementPriorities pPlacement = new LineLabelPlacementPrioritiesClass();
                IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();
                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                pBasic.LineLabelPlacementPriorities = pPlacement;//设置标注文本摆设路径权重
                pBasic.LineLabelPosition = pPosition;//控制文本的排放位置
                ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();
                pLableEngine.Symbol = pTextSymbol;
                pLableEngine.BasicOverposterLayerProperties = pBasic;//设置标注文本的放置方式,以及处理文字间冲突的处理方式等
                pLableEngine.Expression = "["   sFieldName   "]";//输入VBScript或JavaScript语言,设置要标注的字段
                IAnnotateLayerProperties pAnnoLayerProps = pLableEngine as IAnnotateLayerProperties;
                pAnnoProps.Add(pAnnoLayerProps);
                pGeoFeatLyer.DisplayAnnotation = true;
                axMapControl1.Refresh(esriViewDrawPhase.esriViewBackground, null, null);
                axMapControl1.Update();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            
        }

       
        #endregion

        #region 符号化

        private OperateMap_1 m_OperateMap_1 = null;
        public string filepath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

        #region 点状要素符号化

        private void 简单类型符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol();
                pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSSquare;//设置点符号样式为方形
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(225, 100, 100);
                pMarkerSymbol.Color = pRgbColor;//设置点符号颜色
                ISymbol pSymbol = (ISymbol)pMarkerSymbol;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pSymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void 箭头类型符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                IArrowMarkerSymbol pArrowMarkerSymbol = new ArrowMarkerSymbolClass();
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(255, 100, 0);
                pArrowMarkerSymbol.Angle = 90;
                pArrowMarkerSymbol.Color = pRgbColor;
                pArrowMarkerSymbol.Length = 20;//设置简单顶点到底边的距离
                pArrowMarkerSymbol.Width = 10;//设置箭头底边宽度
                pArrowMarkerSymbol.XOffset = 0;
                pArrowMarkerSymbol.YOffset = 0;
                pArrowMarkerSymbol.Style = esriArrowMarkerStyle.esriAMSPlain;//设置点符号样式
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pArrowMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void 字符型点符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                ICharacterMarkerSymbol pCharacterMarkerSymbol = new CharacterMarkerSymbol();
                stdole.IFontDisp pFontDisp = (stdole.IFontDisp)(new stdole.StdFontClass());
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(255, 0, 0);
                pFontDisp.Name = "arial";//设置字体样式          
                pFontDisp.Italic = true;//设置是否采用斜体字符

                pCharacterMarkerSymbol.Angle = 0;
                pCharacterMarkerSymbol.CharacterIndex = 65;
                pCharacterMarkerSymbol.Color = pRgbColor;
                pCharacterMarkerSymbol.Font = pFontDisp;
                pCharacterMarkerSymbol.Size = 10;
                pCharacterMarkerSymbol.XOffset = 3;
                pCharacterMarkerSymbol.YOffset = 3;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pCharacterMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void 图片型点符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号           
                IPictureMarkerSymbol pPictureMarkerSymbol = new PictureMarkerSymbolClass();

                string fileName = filepath   "city.bmp";
                pPictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);//图片类型和图片来源               
                pPictureMarkerSymbol.Angle = 0;
                pPictureMarkerSymbol.Size = 10;
                pPictureMarkerSymbol.XOffset = 0;
                pPictureMarkerSymbol.YOffset = 0;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pPictureMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void 叠加型点符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                IMultiLayerMarkerSymbol pMultiLayerMarkerSymbol = new MultiLayerMarkerSymbolClass();
                IPictureMarkerSymbol pPictureMarkerSymbol = new PictureMarkerSymbolClass();
                ICharacterMarkerSymbol pCharacterMarkerSymbol = new CharacterMarkerSymbol();
                stdole.IFontDisp fontDisp = (stdole.IFontDisp)(new stdole.StdFontClass());
                IRgbColor pGgbColor = new RgbColor();
                pGgbColor = GetRgbColor(0, 0, 0);
                fontDisp.Name = "arial";
                fontDisp.Size = 12;
                fontDisp.Italic = true;
                //创建字符符号
                pCharacterMarkerSymbol.Angle = 0;
                pCharacterMarkerSymbol.CharacterIndex = 97;//字母a
                pCharacterMarkerSymbol.Color = pGgbColor;
                pCharacterMarkerSymbol.Font = fontDisp;
                pCharacterMarkerSymbol.Size = 24;
                //创建图片符号           
                string fileName = filepath   "city.bmp";
                pPictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);
                pPictureMarkerSymbol.Angle = 0;
                pPictureMarkerSymbol.BitmapTransparencyColor = pGgbColor;
                pPictureMarkerSymbol.Size = 10;
                //添加图片、字符符号到组合符号中
                pMultiLayerMarkerSymbol.AddLayer(pCharacterMarkerSymbol);
                pMultiLayerMarkerSymbol.AddLayer(pPictureMarkerSymbol);
                pMultiLayerMarkerSymbol.Angle = 0;
                pMultiLayerMarkerSymbol.Size = 20;
                pMultiLayerMarkerSymbol.XOffset = 5;
                pMultiLayerMarkerSymbol.YOffset = 5;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pMultiLayerMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        #endregion

        #region 线状要素符号化

        private void 简单线符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(3);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置线符号
                ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
                simpleLineSymbol.Width = 0;//定义线的宽度 
                simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSInsideFrame; //定义线的样式                               
                simpleLineSymbol.Color = GetRgbColor(255, 100, 0);//定义线的颜色
                ISymbol symbol = simpleLineSymbol as ISymbol;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = symbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch (Exception ex)
            {

            }
        }

        private void 制图线符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(3);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置线符号
                ICartographicLineSymbol pCartographicLineSymbol = new CartographicLineSymbolClass();
                pCartographicLineSymbol.Cap = esriLineCapStyle.esriLCSRound;//设置线要素首尾端点形状为圆形
                pCartographicLineSymbol.Join = esriLineJoinStyle.esriLJSRound; //设置线要素转折点出的样式为圆滑    
                pCartographicLineSymbol.Width = 2;
                //设置线要素符号模板
                ILineProperties pLineProperties;
                pLineProperties = pCartographicLineSymbol as ILineProperties;
                pLineProperties.Offset = 0;
                double[] dob = new double[6];
                dob[0] = 0;
                dob[1] = 1;
                dob[2] = 2;
                dob[3] = 3;
                dob[4] = 4;
                dob[5] = 5;
                ITemplate pTemplate = new TemplateClass();
                pTemplate.Interval = 1;
                for (int i = 0; i < dob.Length; i  = 2)
                {
                    pTemplate.AddPatternElement(dob[i], dob[i   1]);
                }
                pLineProperties.Template = pTemplate;
                IRgbColor pRgbColor = GetRgbColor(0, 255, 0);
                pCartographicLineSymbol.Color = pRgbColor;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pCartographicLineSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch
            { }
        }

        private void 多图层线符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(3);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置线符号
                IMultiLayerLineSymbol pMultiLayerLineSymbol = new MultiLayerLineSymbolClass();
                ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
                pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot;
                pSimpleLineSymbol.Width = 2;
                IRgbColor pRgbColor = GetRgbColor(255, 0, 0);
                pSimpleLineSymbol.Color = pRgbColor;
                //ISymbol pSymbol = pSimpleLineSymbol as ISymbol;
                //pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen; //设置线要素的颜色为

                ICartographicLineSymbol pCartographicLineSymbol = new CartographicLineSymbolClass();
                pCartographicLineSymbol.Cap = esriLineCapStyle.esriLCSRound;
                pCartographicLineSymbol.Join = esriLineJoinStyle.esriLJSRound;
                pCartographicLineSymbol.Width = 2;
                ILineProperties pLineProperties;
                pLineProperties = pCartographicLineSymbol as ILineProperties;
                pLineProperties.Offset = 0;
                double[] dob = new double[6];
                dob[0] = 0;
                dob[1] = 1;
                dob[2] = 2;
                dob[3] = 3;
                dob[4] = 4;
                dob[5] = 5;
                ITemplate pTemplate = new TemplateClass();
                pTemplate.Interval = 1;
                for (int i = 0; i < dob.Length; i  = 2)
                {
                    pTemplate.AddPatternElement(dob[i], dob[i   1]);
                }
                pLineProperties.Template = pTemplate;

                pRgbColor = GetRgbColor(0, 255, 0);
                pCartographicLineSymbol.Color = pRgbColor;
                pMultiLayerLineSymbol.AddLayer(pSimpleLineSymbol);
                pMultiLayerLineSymbol.AddLayer(pCartographicLineSymbol);
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pMultiLayerLineSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 图片线符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(3);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置线符号
                IPictureLineSymbol pictureLineSymbol = new PictureLineSymbolClass();
                //创建图片符号                                
                string fileName = filepath   "city.bmp";
                pictureLineSymbol.CreateLineSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);
                IRgbColor rgbColor = GetRgbColor(255, 0, 0);
                pictureLineSymbol.Color = rgbColor;
                pictureLineSymbol.Offset = 0;
                pictureLineSymbol.Width = 3;
                pictureLineSymbol.Rotate = false;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pictureLineSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 离散型符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(3);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置线符号
                IHashLineSymbol pHashLineSymbol = new HashLineSymbolClass();
                ILineProperties pLineProperties = pHashLineSymbol as ILineProperties;
                pLineProperties.Offset = 0;
                double[] dob = new double[6];
                dob[0] = 0;
                dob[1] = 1;
                dob[2] = 2;
                dob[3] = 3;
                dob[4] = 4;
                dob[5] = 5;
                ITemplate pTemplate = new TemplateClass();
                pTemplate.Interval = 1;
                for (int i = 0; i < dob.Length; i  = 2)
                {
                    pTemplate.AddPatternElement(dob[i], dob[i   1]);
                }
                pLineProperties.Template = pTemplate;
                pHashLineSymbol.Width = 2;
                pHashLineSymbol.Angle = 45;//设置单一线段的倾斜角度
                IRgbColor pColor = new RgbColor();
                pColor = GetRgbColor(0, 0, 255);
                pHashLineSymbol.Color = pColor;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pHashLineSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        #endregion

        #region 面状要素符号化

        private void 简单填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置面填充符号           
                ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
                pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSVertical;//设置面填充为垂直线填充
                pSimpleFillSymbol.Color = GetRgbColor(150, 150, 150);
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pSimpleFillSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 线填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置面填充符号                       
                ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
                pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot; //定义线的样式             
                pSimpleLineSymbol.Width = 2;//定义线的宽度
                IRgbColor pRgbColor = GetRgbColor(255, 0, 0);
                pSimpleLineSymbol.Color = pRgbColor;//定义线的颜色         
                ILineFillSymbol pLineFillSymbol = new LineFillSymbol();
                pLineFillSymbol.Angle = 45;
                pLineFillSymbol.Separation = 10;
                pLineFillSymbol.Offset = 5;
                pLineFillSymbol.LineSymbol = pSimpleLineSymbol;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pLineFillSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 点填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置面填充符号          
                IArrowMarkerSymbol pArrowMarkerSymbol = new ArrowMarkerSymbolClass();//设置填充点点符号样式
                IRgbColor pRgbColor = GetRgbColor(255, 0, 0);
                pArrowMarkerSymbol.Color = pRgbColor as IColor;
                pArrowMarkerSymbol.Length = 2;
                pArrowMarkerSymbol.Width = 2;
                pArrowMarkerSymbol.Style = esriArrowMarkerStyle.esriAMSPlain;

                IMarkerFillSymbol pMarkerFillSymbol = new MarkerFillSymbolClass();
                pMarkerFillSymbol.MarkerSymbol = pArrowMarkerSymbol;
                pRgbColor = GetRgbColor(255, 0, 0);
                pMarkerFillSymbol.Color = pRgbColor;
                pMarkerFillSymbol.Style = esriMarkerFillStyle.esriMFSGrid;

                IFillProperties pFillProperties = pMarkerFillSymbol as IFillProperties;
                pFillProperties.XOffset = 2;
                pFillProperties.YOffset = 2;
                pFillProperties.XSeparation = 5;
                pFillProperties.YSeparation = 5;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pFillProperties as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }

        }

        private void 渐变色填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置面填充符号          
                IGradientFillSymbol pGradientFillSymbol = new GradientFillSymbolClass();
                IAlgorithmicColorRamp pAlgorithcColorRamp = new AlgorithmicColorRampClass();//设置颜色带
                pAlgorithcColorRamp.FromColor = GetRgbColor(255, 0, 0);//颜色带的起始颜色
                pAlgorithcColorRamp.ToColor = GetRgbColor(0, 255, 0);//颜色带的终点颜色
                pAlgorithcColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
                pGradientFillSymbol.ColorRamp = pAlgorithcColorRamp;//填充颜色带
                pGradientFillSymbol.GradientAngle = 90;//设置填充方向
                pGradientFillSymbol.GradientPercentage = 1;//控制色彩饱和度
                pGradientFillSymbol.IntervalCount = 5;//设置填充颜色带的数目
                pGradientFillSymbol.Style = esriGradientFillStyle.esriGFSLinear;//设置颜色填充带样式为线性填充
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pGradientFillSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 图片填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置面填充符号          
                IPictureFillSymbol pictureFillSymbol = new PictureFillSymbolClass();
                string fileName = filepath   "states.bmp";
                pictureFillSymbol.CreateFillSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);

                ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
                simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot;
                simpleLineSymbol.Color = GetRgbColor(255, 0, 0);
                ISymbol symbol = pictureFillSymbol as ISymbol;

                pictureFillSymbol.Outline = simpleLineSymbol;//设置面要素边线颜色
                pictureFillSymbol.Angle = 0;//设置图片显示方向
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pictureFillSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        private void 多层填充符号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = axMapControl1.get_Layer(5);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置渐变色填充面符号    
                IMultiLayerFillSymbol pMultiLayerFillSymbol = new MultiLayerFillSymbolClass();
                IGradientFillSymbol pGradientFillSymbol = new GradientFillSymbolClass();
                IAlgorithmicColorRamp pAlgorithcColorRamp = new AlgorithmicColorRampClass();
                pAlgorithcColorRamp.FromColor = GetRgbColor(255, 0, 0);
                pAlgorithcColorRamp.ToColor = GetRgbColor(0, 255, 0);
                pAlgorithcColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
                pGradientFillSymbol.ColorRamp = pAlgorithcColorRamp;
                pGradientFillSymbol.GradientAngle = 45;
                pGradientFillSymbol.GradientPercentage = 0.9;
                pGradientFillSymbol.Style = esriGradientFillStyle.esriGFSLinear;
                //设置线填充面符号
                ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
                pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot;
                pSimpleLineSymbol.Width = 2;
                IRgbColor pRgbColor = GetRgbColor(255, 0, 0);
                pSimpleLineSymbol.Color = pRgbColor;
                ILineFillSymbol pLineFillSymbol = new LineFillSymbol();
                pLineFillSymbol.Angle = 45;
                pLineFillSymbol.Separation = 10;
                pLineFillSymbol.Offset = 5;
                pLineFillSymbol.LineSymbol = pSimpleLineSymbol;
                //组合填充符号
                pMultiLayerFillSymbol.AddLayer(pGradientFillSymbol);
                pMultiLayerFillSymbol.AddLayer(pLineFillSymbol);
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pMultiLayerFillSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                axMapControl1.Refresh();
                axTOCControl1.Update();
            }
            catch { }
        }

        #endregion

        
        #endregion
        private void 导出为shp格式ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            if (DialogResult.OK == dlg.ShowDialog())
            {
                string file = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf("\\"));
                if (!System.IO.Directory.Exists(file))
                {
                    System.IO.Directory.CreateDirectory(file);
                }
                try
                {
                    ILayer pLayer = axMapControl1.Map.get_Layer(0);
                    if (pLayer != null)
                    {
                        IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                        if (pFeatureLayer.Visible)
                        {
                            ExportFeature(pFeatureLayer.FeatureClass,dlg.FileName);
                        }
                    }
                    MessageBox.Show("导出成功");
                }
                catch
                {
                    MessageBox.Show("导出失败!");
                }
            }

        }

        private void ExportShp()
        {
            SaveFileDialog dlg = new SaveFileDialog();
            if (DialogResult.OK == dlg.ShowDialog())
            {
                string file = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf("\\"));
                if (!System.IO.Directory.Exists(file))
                {
                    System.IO.Directory.CreateDirectory(file);
                }
                try
                {
                    ILayer pLayer = axMapControl1.Map.get_Layer(1);
                    if (pLayer != null)
                    {
                        IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                        if (pFeatureLayer.Visible)
                        {
                            ExportFeature(pFeatureLayer.FeatureClass, dlg.FileName);
                        }
                    }
                    MessageBox.Show("导出成功");
                }
                catch
                {
                    MessageBox.Show("导出失败!");
                }
            }
        }

        public void ExportFeature(IFeatureClass pInFeatureClass,string pPath)
        {
            // create a new Access workspace factory        
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            string parentPath=pPath.Substring(0, pPath.LastIndexOf("\\"));
            string fileName= pPath.Substring(pPath.LastIndexOf("\\")   1, pPath.Length - pPath.LastIndexOf("\\") - 1);
            IWorkspaceName pWorkspaceName = pWorkspaceFactory.Create(parentPath,fileName, null, 0);
            // Cast for IName        
            IName name = (IName)pWorkspaceName;
            //Open a reference to the access workspace through the name object        
            IWorkspace pOutWorkspace = (IWorkspace)name.Open();

            IDataset pInDataset = pInFeatureClass as IDataset;
            IFeatureClassName pInFCName = pInDataset.FullName as IFeatureClassName;
            IWorkspace pInWorkspace = pInDataset.Workspace;
            IDataset pOutDataset = pOutWorkspace as IDataset;
            IWorkspaceName pOutWorkspaceName = pOutDataset.FullName as IWorkspaceName;
            IFeatureClassName pOutFCName = new FeatureClassNameClass();
            IDatasetName pDatasetName = pOutFCName as IDatasetName;
            pDatasetName.WorkspaceName = pOutWorkspaceName;
            pDatasetName.Name = pInFeatureClass.AliasName;
            IFieldChecker pFieldChecker = new FieldCheckerClass();
            pFieldChecker.InputWorkspace = pInWorkspace;
            pFieldChecker.ValidateWorkspace = pOutWorkspace;
            IFields pFields = pInFeatureClass.Fields;
            IFields pOutFields;
            IEnumFieldError pEnumFieldError;
            pFieldChecker.Validate(pFields, out pEnumFieldError, out pOutFields);
            IFeatureDataConverter pFeatureDataConverter = new FeatureDataConverterClass();
            pFeatureDataConverter.ConvertFeatureClass(pInFCName, null, null, pOutFCName, null, pOutFields, "", 100, 0);
        }

    }
}


标签: 开发

实例下载地址

Engine二次开发

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警