泓泰

Arcengine C#代码第3章

admin
Arcengine C#代码第3章-第1张-游戏信息-泓泰

前言:

如今大家对“carto第三章攻略”可能比较关切,同学们都需要知道一些“carto第三章攻略”的相关资讯。那么小编也在网上汇集了一些有关“carto第三章攻略””的相关内容,希望你们能喜欢,小伙伴们快快来了解一下吧!
3 自己写代码实现   public void SetCurrentDo(ICommand pCommand) //设置当前动作        {            pCommand.OnCreate(this.axMapControl1.Map);            pCommand.OnClick();        }        public void SetCurrentTool(ICommand pCommand) //设置当前工具        {            //MessageBox.Show(tabControl1.SelectedIndex.ToString());            pCommand.OnCreate(this.axMapControl1.Object);            axMapControl1.CurrentTool = pCommand as ITool;        }3.1 常用Command            BeginGroup(); //Separator            AddItem("esriArcMapUI.AddDataCommand");                    AddItem("esriArcMapUI.AddQueryTableCommand");                     AddItem("esriArcMapUI.AttributeSelectCommand");            AddItem("esriArcMapUI.AVImportCommand");            AddItem("esriArcMapUI.BufferSelectionCommand");            BeginGroup(); //Separator            AddItem("esriArcMapUI.CatalogCommand");//arcCatalog            AddItem("esriArcMapUI.CatalogWindowCommand");            AddItem("esriArcMapUI.ChangeLayoutCommand");            AddItem("esriArcMapUI.ConvertGDBAnnoCommand");            AddItem("esriArcMapUI.ExportToMapCommand");                      BeginGroup(); //Separator            AddItem("esriArcMapUI.DataFrameClipCommand");            AddItem("esriArcMapUI.FileNewCommand");            AddItem("esriArcMapUI.FindCommand");            AddItem("esriArcMapUI.GeographicViewCommand");//Dataview            AddItem("esriArcMapUI.IdentifyWindowCommand");            BeginGroup(); //Separator            AddItem("esriArcMapUI.ImportFDPCommand");            AddItem("esriArcMapUI.LabelingOptionsCommand");            AddItem("esriArcMapUI.LayoutPropertiesCommand");            AddItem("esriArcMapUI.LayoutViewCommand");            AddItem("esriArcMapUI.NewMapCommand");            BeginGroup(); //Separator            AddItem("esriArcMapUI.NewMapInsetCommand");            AddItem("esriArcMapUI.OpenTableCommand");            AddItem("esriArcMapUI.OptionsCommand");//arcmap选?项?            AddItem("esriArcMapUI.SelectionOptionsCommand");            AddItem("esriArcMapUI.ShowTOCCommand");//内ú容╕列表括?            BeginGroup(); //Separator            AddItem("esriArcMapUI.ExportFeaturesCommand");            AddItem("esriArcMapUI.ArcGISSearchCommand");3.2 axTOCControl绑定axMapControlthis.axMapControl1.LoadMxFile("..\\..\\..\\..\\..\\data\\china.mxd");            this.axTOCControl1.SetBuddyControl(this.axMapControl1.Object);            this.axTOCControl1.Update();3.3 选择对象  private void btnselect_Click(object sender, EventArgs e) //选择        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsSelectFeaturesTool();            SetCurrentTool(pCommand);        }3.4 放大地图        private void btnZoomin_Click(object sender, EventArgs e)        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapZoomInToolClass();//放大            SetCurrentTool(pCommand);        }3.5 缩小地图        private void btnzoomout_Click(object sender, EventArgs e)        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapZoomOutToolClass();//缩小            SetCurrentTool(pCommand);        }3.6 地图平移ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapPanTool();            SetCurrentTool(pCommand);3.7 查看整个地图    ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapFullExtentCommand();           SetCurrentDo(pCommand);3.8 连续缩放ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapZoomPanTool();            SetCurrentDo(pCommand);3.9 上一视图IExtentStack pMapExtent = this.axMapControl1.ActiveView.ExtentStack;            //判断是否可以回退,第一个视图不可以回退            if (pMapExtent.CanUndo())            {                pMapExtent.Undo();            };3.10 下一视图  IExtentStack pMapExtent = this.axMapControl1.ActiveView.ExtentStack;            //判断是否可以回到下一个视图,最后一个视图没有下一个视图            if (pMapExtent.CanRedo())            {                pMapExtent.Redo();            };3.11 上一个视图和下一视图按钮状态设置  private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)        {            IExtentStack pMapExtent = this.axMapControl1.ActiveView.ExtentStack;            this.btnBack.Enabled = pMapExtent.CanUndo();//上一个视图            this.btnNext.Enabled = pMapExtent.CanRedo();//下一个视图        }3.12 比例尺显示和设置  private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)        {            this.EdtScale.Text = this.axMapControl1.MapScale.ToString();        }        private void EdtScale_SelectedIndexChanged(object sender, EventArgs e)        {            string text = EdtScale.Text;            this.axMapControl1.MapScale = Convert.ToDouble(text);this.axMapControl1.ActiveView.Refresh();        }3.13 测量工具(尺子,面积)        private void btnrule_Click(object sender, EventArgs e)        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapMeasureToolClass();            SetCurrentTool(pCommand); ;        }3.14 增加数据  private void btnAdd_Click(object sender, EventArgs e)        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsAddDataCommandClass();            SetCurrentDo(pCommand);        }3.15 信息查询       private void btninfo_Click(object sender, EventArgs e)        {            ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapIdentifyToolClass();            SetCurrentTool(pCommand);        }3.16 鹰眼代码using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Windows.Forms;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Output;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;namespace ArcGISPub{    public class ArcEagleControl    {        private ESRI.ArcGIS.Controls.AxMapControl MainMap;        private ESRI.ArcGIS.Controls.AxMapControl EagleMap;        public ArcEagleControl(ESRI.ArcGIS.Controls.AxMapControl MainMap, ESRI.ArcGIS.Controls.AxMapControl EagleMap)        {            this.MainMap = MainMap;            this.EagleMap = EagleMap;            MainMap.OnExtentUpdated += MapExtentUpdated;            EagleMap.OnMouseDown += MapOnMouseDown;        }        private void setMap(IMapControlEvents2_OnExtentUpdatedEvent e)        {            // 得到新范围            IEnvelope pEnv = (IEnvelope)e.newEnvelope;            IGraphicsContainer pGra = EagleMap.Map as IGraphicsContainer;            IActiveView pAv = pGra as IActiveView;            //在绘制前,清除axMapControl2中的任何图形元素            pGra.DeleteAllElements();            IRectangleElement pRectangleEle = new RectangleElementClass();            IElement pEle = pRectangleEle as IElement;            pEle.Geometry = pEnv;            //设置鹰眼图中的红线框            IRgbColor pColor = new RgbColorClass();            pColor.Red = 255;            pColor.Green = 0;            pColor.Blue = 0;            pColor.Transparency = 255;            //产生一个线符号对象            ILineSymbol pOutline = new SimpleLineSymbolClass();            pOutline.Width = 2;            pOutline.Color = pColor;            //设置颜色属性            pColor = new RgbColorClass();            pColor.Red = 255;            pColor.Green = 0;            pColor.Blue = 0;            pColor.Transparency = 0;            //设置填充符号的属性            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();            pFillSymbol.Color = pColor;            pFillSymbol.Outline = pOutline;            IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;            pFillShapeEle.Symbol = pFillSymbol;            pGra.AddElement((IElement)pFillShapeEle, 0);            pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);            pAv.Refresh();        }        public void MapExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)        {            setMap(e);        }        public void CopyMap()        {            if (EagleMap.Map.LayerCount != MainMap.LayerCount)            {                EagleMap.Map.ClearLayers();                for (int i = MainMap.LayerCount; i > 0; i--)                {                    EagleMap.Map.AddLayer(MainMap.Map.get_Layer(i - 1));                }            }         }        private void MapOnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)        {            CopyMap();            IRubberBand pBand = new RubberEnvelopeClass();            IGeometry pGeometry = pBand.TrackNew(EagleMap.ActiveView.ScreenDisplay, null);            if (pGeometry.IsEmpty)            {                IPoint pPt = new PointClass();                pPt.PutCoords(e.mapX, e.mapY);                //改变主控件的视图范围                MainMap.CenterAt(pPt);            }            else            {                MainMap.Extent = pGeometry.Envelope;                MainMap.ActiveView.Refresh();            }           // MessageBox.Show("ok");        }    }}调用方法:      //调用鹰眼            ArcGISPub.ArcEagleControl arcEagleControl = new ArcGISPub.ArcEagleControl(this.axMapControl1, this.axMapControl2);            arcEagleControl.CopyMap();            this.axMapControl2.ActiveView.Refresh();事件:   private void Form1_Resize(object sender, EventArgs e)        {            axMapControl2.Extent = axMapControl2.FullExtent;        }3.17 其他3.17.1 度分秒转换为弧度   const Double PI = 3.14159265358979;        public static Double TransDegreeToArc(Double d)        {            return d * PI / 180;        }        /// <summary>        /// 转化弧度为度        /// </summary>        /// <param name="d"></param>        /// <returns></returns>        public static Double TransArcToDegree(Double d)        {            return d * 180 / PI;        }        public static int Substr(string str, int startidx, int len)        {            if (str.Length == 0) return 0;            if (str == "") return 0;            if (str.Length < startidx + len)            {                int num = str.Length;                for (int i = 0; i < startidx + len - num; i++)                {                    str = str + "0";                }            }            return Convert.ToInt16(str.Substring(startidx, len));        }  /// <summary>        /// 度分秒转换为弧度        /// </summary>        /// <param name="d"></param>        /// <returns></returns>        public static Double TransDMSToArc(string d)        {            int p = d.IndexOf(".");            if (p > -1) //存在"."            {                int Degree = Convert.ToInt16(d.Substring(0, p));//度                string str = d.Substring(p + 1);                int M = Convert.ToInt16(Substr(str, 0, 2));//分                int S = Convert.ToInt16(Substr(str, 2, 2));//秒                Double SumDegree = Degree + 1.0 * M / 60 + 1.0 * S / 3600;                return TransDegreeToArc(SumDegree);            }            else            {                return TransDegreeToArc(Convert.ToDouble(d));            }        }3.17.2 将度转换为度分秒/// <summary>        /// 将度转换为度分秒        /// </summary>        /// <param name="d"></param>        /// <returns></returns>        public static string TranDegreeToDMs(Double d)        {            int Degree = Convert.ToInt16(Math.Truncate(d));//度            d = d - Degree;            int M = Convert.ToInt16(Math.Truncate((d) * 60));//分            double S = (d * 60 - M) * 60;            string rstr = Degree.ToString() + ".";            if (M < 10)            {                rstr = rstr + "0" + M.ToString();            }            else            {                rstr = rstr + M.ToString();            }            if (S < 10)            {                rstr = rstr + "0" + S.ToString().Replace(".", "");            }            else            {                rstr = rstr + S.ToString().Replace(".", "");            }            return rstr;        }3.17.3 度分秒转换度//度分秒转换度        public static double DMSToD(string d)        {            int p = d.IndexOf(".");            if (p > -1) //存在"."            {                int Degree = Convert.ToInt16(d.Substring(0, p));//度                string str = d.Substring(p + 1);                int M = Convert.ToInt16(Substr(str, 0, 2));//分                int S = Convert.ToInt16(Substr(str, 2, 2));//秒                Double SumDegree = Degree + 1.0 * M / 60 + 1.0 * S / 3600;                return SumDegree;            }            else            {                return Convert.ToDouble(d);            }        }

标签: #carto第三章攻略