ArcGIS Engine二次开发 |
您所在的位置:网站首页 › 点线面矢量化arcgis › ArcGIS Engine二次开发 |
目录 1 前言 2 准备工作 2.1 License的加入 2.2 ToolStrip控件 2.3 MenuStrip控件 2.4 帮助文档的查看 3 数据加载 3.1 矢量数据的加载 3.2 栅格数据的加载 4 地图浏览功能 1 前言这是一份关于ArcGIS Engine二次开发的一份报告总结,在这份报告中包含了简单的ArcGIS功能。包含的功能如下: 对数据的加载,包括矢量数据和栅格数据地图浏览功能:拉框放大、拉框缩小、平移、全图、逐级放大、逐级缩小、历史视图浏览(撤销、重做)点线面的绘制:点、圆、多边形、矩形,能分别设置颜色、样式、大小及面填充方式; 书签功能 选择要素:拉框选择、按多边形选择、按圆选择、按线选择,并能设置选择颜色; 打开图层属性表 属性查询 2 准备工作在开始正式书写代码之前,我们需要了解一些基本知识。 2.1 License的加入License是进行AE开发必须加入的功能,我们创建一个窗体项目后首先加入 LicenseControl控件,然后在Program.cs中添加如下橙色部分代码(注意不要加错位置): Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Application.Run(new mapForm());ToolStrip控件位于工具箱的菜单和工具栏中,可以添加图中所示的几个功能:Button、Label、SplitButton、DropDownButton、Separator、ComboBox、TextBox、ProgressBar。这里用到了Button功能,前九个功能通过添加Button来完成,图片可以自行添加。 menustrip可以进行下拉菜单的创建,比如查询功能中包含两个功能,一个是属性查询,一个是空间查询,通过menustrip将二者放到一个下拉菜单中,可以保证界面的整洁舒适,以及功能的方便使用。 在开始中找到ArcGIS,找到对应的帮助文档,我的Visual Studio是2012版的,用的是第二个。打开帮助我们可以对需要使用的功能进行查询,比如OpenFileDialog,右边是对其用法的介绍。 首先在ToolStrip中添加一个button,直接点击可进行添加;然后在Image中填充“添加数据”的图片,以便和其它功能进行区分,该图片可自行到ArcGIS中进行截图或在网上寻找相关图像;最后通过ToolTipText可以添加对该按钮的描述,当鼠标停在该按钮上时,显示文字。 双击按钮默认使用click事件,双击按钮,加入以下代码: 注:由于每行代码都有注释,这里不再赘述。 //打开矢量数据 private void btnShpOpen_Click(object sender, EventArgs e) { //实例化一个对象 OpenFileDialog openShipFile = new OpenFileDialog(); //打开窗体名称 openShipFile.Title = "加载矢量数据"; //允许选择多项 openShipFile.Multiselect = true; //过滤选择矢量数据 openShipFile.Filter = "ShapeFile数据|*.shp"; //定义整型intPosition,用于存放位置 int intPosition; //定义字符型stringFilePath和stringFileName,用于存放文件路径和文件名 string stringFilePath, stringFileName; if (openShipFile.ShowDialog() == DialogResult.OK) { //定义字符型file表示打开文件中的文件名,用foreach进行访问 foreach (String file in openShipFile.FileNames) { //将\\的最后一个位置赋予intPosition intPosition = file.LastIndexOf("\\"); //将intPosition前的路径存入stringFilePath中 stringFilePath = file.Substring(0, intPosition); //将intPosition后的文件名存入stringFileName中 stringFileName = file.Substring(intPosition + 1); //显示数据 axMapControl1.AddShapeFile(stringFilePath, stringFileName); //弹框显示数据路径和名称 //MessageBox.Show(stringFilePath, stringFileName); } } } 3.2 栅格数据的加载栅格数据比矢量数据复杂,这里我并没有将栅格数据和矢量数据的加载放在同一个按钮上实现,而是通过一个新的按钮进行添加。 这里对jpg、img、tiff三种格式的栅格数据进行了添加。 双击按钮默认使用click事件,双击按钮,加入以下代码: //打开栅格数据 private void btnRasterOpen_Click(object sender, EventArgs e) { //实例化对象 OpenFileDialog openRaster = new OpenFileDialog(); //命名弹窗名称 openRaster.Title=("加载栅格数据"); //允许选择多项 openRaster.Multiselect = true; //过滤栅格数据 openRaster.Filter = "栅格文件jpg|*.jpg|栅格文件tiff|*.tiff|栅格文件img|*.img"; //定义整型位置intPosition int intPosition; //定义字符型路径stringFilePath和名字stringFileName string stringFilePath, stringFileName; if (openRaster.ShowDialog() == DialogResult.OK) { //foreach访问 foreach (String file in openRaster.FileNames) { //intPosition的1位置在最后一个\\处 intPosition = file.LastIndexOf("\\"); //路径 stringFilePath = file.Substring(0, intPosition); //文件名 stringFileName = file.Substring(intPosition + 1); //IWorkSpace是一个容器,存放空间数据与非空间数据 //如:FeatureClass、RasterDataset、table等 //IWorkSpace有三种类型:FileSystemWorkspace、LocalDatsbaseWorkspace,RemoteDatabaseWorkspace //WorkSpace类不能直接实例化,必须由IWorkSpaceFactory的Create方法创建 //WorkspaceFactory:create workspace //IRasterWorkspace Interfece:provides access to members that control a raster workspace //含OpenRasterDataset:Opens a rasterdataset in the workspace given its name //通过IworkSpaceFactory创建工作空间,将其在RasterWorkspaceFactory中实例化 IWorkspaceFactory prasterWorspaceFactory = new RasterWorkspaceFactory(); //创建一个栅格工作空间,将其在工作空间中的栅格文件在栅格工作空间中打开 IRasterWorkspace rasterWorkSpace = prasterWorspaceFactory.OpenFromFile(stringFilePath, 0) as IRasterWorkspace; //将栅格空间中的空间数据打开 IRasterDataset pRasterDataset = rasterWorkSpace.OpenRasterDataset(stringFileName); //IRasterLayer:provide access to members that create or modify a raster layer //RasterLayerClass:raster layer source and display options IRasterLayer pRasterLayer = new RasterLayerClass(); //在图层中创建栅格数据 pRasterLayer.CreateFromDataset(pRasterDataset); //ILayer:provide access to members that work with all layers //将栅格图层转换为图层形式 ILayer pLayer = pRasterLayer as ILayer; //显示栅格图层 axMapControl1.AddLayer(pLayer); } } }至此便可完成对矢量数据和栅格数据的加载。 4 地图浏览功能地图浏览功能包含:矩形拉框放大、矩形拉框缩小、平移(漫游)、全图显示、逐级放大、逐级缩小、历史视图浏览(撤销、重做) 在ToolStrip中分别八个功能进行添加,分别设置好图片内容和鼠标悬浮显示文字。 双击按钮默认使用click事件,双击按钮,加入以下代码: 注:由于全图显示、逐级放大、逐级缩小、历史视图浏览(撤销、重做)五个功能只需要点击对应按钮,触发Click事件即可实现,因此不对其进行功能标识;而矩形拉框放大、矩形拉框缩小、平移(漫游)在触发Click事件之后还要在axMapControl1中进行鼠标点击以实现功能,故需通过flag对其进行标识。 //地图浏览 int flag; //放大 private void enLarge_Click(object sender, EventArgs e) { flag = 1; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomIn; } //缩小 private void Suoxiao_Click(object sender, EventArgs e) { flag = 2; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomOut; } //平移 private void Pingyi_Click(object sender, EventArgs e) { flag = 3; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan; } //逐级放大 private void EnlargeByStep_Click(object sender, EventArgs e) { IEnvelope yEnvelop = axMapControl1.Extent; yEnvelop.Expand(0.5, 0.5, true); axMapControl1.Extent = yEnvelop; axMapControl1.ActiveView.Refresh(); } //逐级缩小 private void SuoxiaoBystep_Click(object sender, EventArgs e) { IEnvelope yEnvelop = axMapControl1.Extent; yEnvelop.Expand(2, 2, true); axMapControl1.Extent = yEnvelop; axMapControl1.ActiveView.Refresh(); } //全图显示 private void Entire_Click(object sender, EventArgs e) { axMapControl1.Extent = axMapControl1.FullExtent; } IExtentStack yExtentStack; //上一级视图 private void before_Click(object sender, EventArgs e) { yExtentStack = axMapControl1.ActiveView.ExtentStack; //判断是否可返回 if (yExtentStack.CanUndo()) { yExtentStack.Undo(); before.Enabled = true; if (!yExtentStack.CanUndo()) { before.Enabled = false; } } axMapControl1.ActiveView.Refresh(); } //下一级视图 private void after_Click(object sender, EventArgs e) { yExtentStack = axMapControl1.ActiveView.ExtentStack; if (yExtentStack.CanRedo()) { yExtentStack.Redo(); after.Enabled = true; if (!yExtentStack.CanRedo()) { after.Enabled = false; } } axMapControl1.ActiveView.Refresh(); }在axMapControl1_OnMouseDown中加入以下代码: *地图浏览 //激活 IActiveView yActiveView = axMapControl1.ActiveView; //框架 IEnvelope yEnvelope = new EnvelopeClass(); switch (flag) { case 1: //框架为矩形 yEnvelope = axMapControl1.TrackRectangle(); //视图范围为框架选择范围 yActiveView.Extent = yEnvelope; //刷新 yActiveView.Refresh(); break; case 2: //框架为矩形缩小 yEnvelope = axMapControl1.TrackRectangle(); //两倍缩小 yEnvelope.Expand(2, 2, true); //视图范围为框架范围 yActiveView.Extent = yEnvelope; //刷新 yActiveView.Refresh(); break; case 3: //漫游 axMapControl1.Pan(); break; default: break; }至此便可实现地图浏览的“矩形拉框放大、矩形拉框缩小、平移(漫游)、全图显示、逐级放大、逐级缩小、历史视图浏览(撤销、重做)”八个功能。 持续更新中。。。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |