ArcEngine主要功能源码.docx_第1页
ArcEngine主要功能源码.docx_第2页
ArcEngine主要功能源码.docx_第3页
ArcEngine主要功能源码.docx_第4页
ArcEngine主要功能源码.docx_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

using System;using System.IO;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.DataSourcesFile;using ESRI.ArcGIS.DataSourcesGDB;using ESRI.ArcGIS.DataSourcesRaster;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.SystemUI;namespace MapOperation public partial class FormMain : Form #region 变量定义 /地图导出窗体 private FormExportMap frmExpMap = null; /长度、面积量算 private FormMeasureResult frmMeasureResult = 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; /TOC菜单 IFeatureLayer pTocFeatureLayer = null; /点击的要素图层 private FormAtrribute frmAttribute = null; /图层属性窗体 private ILayer pMoveLayer; /需要调整显示顺序的图层 private int toIndex; /存放拖动图层移动到的索引号 /鹰眼同步 private bool bCanDrag; /鹰眼地图上的矩形框可移动的标志 private IPoint pMoveRectPoint; /记录在移动鹰眼地图上的矩形框时鼠标的位置 private IEnvelope pEnv; /记录数据视图的Extent #endregion #region 初始化 public FormMain() InitializeComponent(); axTOCControl.SetBuddyControl(mainMapControl); EagleEyeMapControl.Extent = mainMapControl.FullExtent; pEnv = EagleEyeMapControl.Extent; DrawRectangle(pEnv); #endregion #region 数据加载 #region LoadMxFile方法加载地图文档文件 private void btnLoadMxFile_Click(object sender, EventArgs e) /加载数据前如果有数据则清空 try OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = 打开地图文档; pOpenFileDialog.Filter = ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf; pOpenFileDialog.Multiselect = false; /不允许多个文件同时选择 pOpenFileDialog.RestoreDirectory = true; /存储打开的文件路径 if (pOpenFileDialog.ShowDialog() = DialogResult.OK) string pFileName = pOpenFileDialog.FileName; if (pFileName = ) return; if (mainMapControl.CheckMxFile(pFileName) /检查地图文档有效性 ClearAllData(); mainMapControl.LoadMxFile(pFileName); else MessageBox.Show(pFileName + 是无效的地图文档!, 信息提示); return; catch (Exception ex) MessageBox.Show(打开地图文档失败 + ex.Message); #endregion #region IMapDocument方法加载Mxd文档文件 private void btnIMapDocument_Click(object sender, EventArgs e) try OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = 打开地图文档; pOpenFileDialog.Filter = ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf; pOpenFileDialog.Multiselect = false; pOpenFileDialog.RestoreDirectory = true; if (pOpenFileDialog.ShowDialog() = DialogResult.OK) string pFileName = pOpenFileDialog.FileName; if (pFileName = ) return; if (mainMapControl.CheckMxFile(pFileName) /检查地图文档有效性 /将数据载入pMapDocument并与Map控件关联 IMapDocument pMapDocument = new MapDocument();/using ESRI.ArcGIS.Carto; pMapDocument.Open(pFileName, ); /获取Map中激活的地图文档 mainMapControl.Map = pMapDocument.ActiveView.FocusMap; mainMapControl.ActiveView.Refresh(); else MessageBox.Show(pFileName + 是无效的地图文档!, 信息提示); return; catch (Exception ex) MessageBox.Show(打开地图文档失败 + ex.Message); #endregion #region ControlsOpenDocCommandClass加载地图 private void btncontrolsOpenDocCommandClass_Click(object sender, EventArgs e) ICommand command = new ControlsOpenDocCommandClass(); command.OnCreate(mainMapControl.Object); command.OnClick(); #endregion #region 加载Shape文件 private void btnAddShapefile_Click(object sender, EventArgs e) /ClearAllData(); try OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = 打开Shape文件; pOpenFileDialog.Filter = Shape文件(*.shp)|*.shp; pOpenFileDialog.ShowDialog(); /获取文件路径 /FileInfo pFileInfo = new FileInfo(pOpenFileDialog.FileName); /string pPath = pOpenFileDialog.FileName.Substring(0, pOpenFileDialog.FileName.Length - pFileInfo.Name.Length); /mainMapControl.AddShapeFile(pPath, pFileInfo.Name); IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; string pFullPath = pOpenFileDialog.FileName; if (pFullPath = ) return; int pIndex = pFullPath.LastIndexOf(); string pFilePath = pFullPath.Substring(0, pIndex); /文件路径 string pFileName = pFullPath.Substring(pIndex + 1); /文件名 /实例化ShapefileWorkspaceFactory工作空间,打开Shape文件 pWorkspaceFactory = new ShapefileWorkspaceFactory(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); /创建并实例化要素集 IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName); pFeatureLayer = new FeatureLayer(); pFeatureLayer.FeatureClass = pFeatureClass; pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; ClearAllData(); /新增删除数据 mainMapControl.Map.AddLayer(pFeatureLayer); mainMapControl.ActiveView.Refresh(); /同步鹰眼 SynchronizeEagleEye(); catch (Exception ex) MessageBox.Show(图层加载失败! + ex.Message); #endregion #region 加载栅格文件 private void btnAddRaster_Click(object sender, EventArgs e) OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = 打开Raster文件; pOpenFileDialog.Filter = 栅格文件 (*.*)|*.bmp;*.tif;*.jpg;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img; pOpenFileDialog.ShowDialog(); string pRasterFileName = pOpenFileDialog.FileName; if (pRasterFileName = ) return; string pPath = System.IO.Path.GetDirectoryName(pRasterFileName); string pFileName = System.IO.Path.GetFileName(pRasterFileName); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pPath, 0); IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName); /影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid; pRasPyrmid = pRasterDataset as IRasterPyramid3; if (pRasPyrmid != null) if (!(pRasPyrmid.Present) pRasPyrmid.Create(); /创建金字塔 IRaster pRaster; pRaster = pRasterDataset.CreateDefaultRaster(); IRasterLayer pRasterLayer; pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; mainMapControl.AddLayer(pLayer, 0); #endregion #region 分图层加载CAD数据 private void btnAddCADByLayer_Click(object sender, EventArgs e) IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureClass pFeatureClass; OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.Filter = CAD(*.dwg)|*.dwg; pOpenFileDialog.Title = 打开CAD数据文件; pOpenFileDialog.ShowDialog(); string pFullPath = pOpenFileDialog.FileName; if (pFullPath = ) return; /获取文件名和文件路径 int pIndex = pFullPath.LastIndexOf(); string pFilePath = pFullPath.Substring(0, pIndex); string pFileName = pFullPath.Substring(pIndex + 1); pWorkspaceFactory = new CadWorkspaceFactory(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); /加载CAD文件中的线文件 pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName + :polyline); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFileName; pFeatureLayer.FeatureClass = pFeatureClass; ClearAllData(); /新增删除数据 mainMapControl.Map.AddLayer(pFeatureLayer); mainMapControl.ActiveView.Refresh(); /同步鹰眼 SynchronizeEagleEye(); #endregion #region 加载整幅CAD图数据 private void btnAddWholeCAD_Click(object sender, EventArgs e) IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.Filter = CAD(*.dwg)|*.dwg; pOpenFileDialog.Title = 打开CAD数据文件; pOpenFileDialog.ShowDialog(); string pFullPath = pOpenFileDialog.FileName; if (pFullPath = ) return; /获取文件名和文件路径 int pIndex = pFullPath.LastIndexOf(); string pFilePath = pFullPath.Substring(0, pIndex); string pFileName = pFullPath.Substring(pIndex + 1); /打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); /using ESRI.ArcGIS.DataSourcesFile; pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); /打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pFileName); /IFeatureClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; ClearAllData(); /新增删除数据 /对CAD文件中的要素进行遍历处理 for (int i = 0; i pFeatClassContainer.ClassCount; i+) IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); /如果是注记,则添加注记层 if (pFeatClass.FeatureType = esriFeatureType.esriFTCoverageAnnotation) pFeatureLayer = new CadAnnotationLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; mainMapControl.Map.AddLayer(pFeatureLayer); else /如果是点、线、面则添加要素层 pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; mainMapControl.Map.AddLayer(pFeatureLayer); mainMapControl.ActiveView.Refresh(); /同步鹰眼 SynchronizeEagleEye(); #endregion #region 把CAD作为栅格地图进行加载 private void btnAddRasterByCAD_Click(object sender, EventArgs e) IWorkspaceFactory pCadWorkspaceFactory; IWorkspace pWorkspace; ICadDrawingWorkspace pCadDrawingWorkspace; ICadDrawingDataset pCadDrawingDataset; ICadLayer pCadLayer; OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.Filter = CAD(*.dwg)|*.dwg; pOpenFileDialog.Title = 打开CAD数据文件; pOpenFileDialog.ShowDialog(); string pFullPath = pOpenFileDialog.FileName; if (pFullPath = ) return; /获取文件名和文件路径 int pIndex = pFullPath.LastIndexOf(); string pFilePath = pFullPath.Substring(0, pIndex); string pFileName = pFullPath.Substring(pIndex + 1); pCadWorkspaceFactory = new CadWorkspaceFactoryClass(); pWorkspace = pCadWorkspaceFactory.OpenFromFile(pFilePath, 0); pCadDrawingWorkspace = (ICadDrawingWorkspace)pWorkspace; /获得CAD文件的数据集 pCadDrawingDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(pFileName); pCadLayer = new CadLayerClass(); pCadLayer.CadDrawingDataset = pCadDrawingDataset; mainMapControl.Map.AddLayer(pCadLayer); mainMapControl.ActiveView.Refresh(); #endregion #region 加载personGeodatabase private void btnAddPersonGeodatabase_Click(object sender, EventArgs e) IWorkspaceFactory pAccessWorkspaceFactory; OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.Filter = Personal Geodatabase(*.mdb)|*.mdb; pOpenFileDialog.Title = 打开PersonGeodatabase文件; pOpenFileDialog.ShowDialog(); string pFullPath = pOpenFileDialog.FileName; if (pFullPath = ) return; pAccessWorkspaceFactory = new AccessWorkspaceFactory(); /using ESRI.ArcGIS.DataSourcesGDB; /获取工作空间 IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(pFullPath, 0); ClearAllData(); /新增删除数据 /加载工作空间里的数据 AddAllDataset(pWorkspace, mainMapControl); #endregion #region 加载文件地理库 private void btnAddFileDatabase_Click(object sender, EventArgs e) IWorkspaceFactory pFileGDBWorkspaceFactory; FolderBrowserDialog dlg = new FolderBrowserDialog(); if (dlg.ShowDialog() != DialogResult.OK) return; string pFullPath = dlg.SelectedPath; if (pFullPath = ) return; pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); /using ESRI.ArcGIS.DataSourcesGDB; ClearAllData(); /新增删除数据 /获取工作空间 IWorkspace pWorkspace = pFileGDBWorkspaceFactory.OpenFromFile(pFullPath, 0); AddAllDataset(pWorkspace, mainMapControl); #endregion #region 加载SDE数据库 / / 服务器连接 / / / private void btnAddSDEByService_Click(object sender, EventArgs e) IWorkspace pWorkspace; pWorkspace = arcSDEWorkspaceOpen(10, esri_sde, sde, sde, , SDE.DEFAULT); /如果工作空间不为空则进行加载 if (pWorkspace != null) AddAllDataset(pWork

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论