前言:
如今大家对“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第三章攻略