ArcGIS Engine 10.0 for.NET开发学习笔记(四)
来源:互联网 发布:来看星软件 编辑:程序博客网 时间:2024/05/13 16:34
【地图的基本操作】
一、加载栅格数据栅格数据是GIS的数据源之一,主要有卫星影像、航空影像、扫描的地图和照片等。常见的栅格数据格式有*.bmp、*.tif和*.jpg等。添加栅格数据主要用到IRasterPyramid3、IRasterLayer等接口。实现思路:
1、用IWorkspaceFactory接口的OpenFromFile方法获得栅格文件的工作区。
2、用IRasterWorkspace接口的OpenRasterDataset方法获得栅格文件的数据集,实例化栅格文件对象,并对栅格数据集是否具有金字塔进行判断(这里栅格文件如果不具有金字塔则创建金字塔,可以提高大数据量图像的显示效率)。
3、创建RasterLayer类的实例pRasterLayer,并定义其数据集。
4、使用MapControl控件的AddLayer方法将pRasterLayer添加至当前地图。
以下是核心代码:
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); }
二、加载CAD数据
对于ArcGIS Engine来说,有两种不同的方式使用CAD数据:一是作为要素图层,以矢量数据来使用;二是作为地图背景,以栅格数据来使用。对于前者,ArcGIS Engine使用与FeatureLayer一样的方法来管理,对于后者则采用CadLayer对象来管理。
1、CAD文件作为矢量图层加载
当一个CAD文件被看作是矢量图层时,表现为四种要素类型,即点、线、多边形和注记。点、线和多边形作为要素数据时,可以使用FeatureLayer对象,但CAD文件中的文字标注需要使用一个专门的注记图层(Annotation),而不是要素图层。
CAD作为矢量加载时有分图层加载和整幅图加载两种模式。
(1)分图层加载。实现思路:①CAD图可以分为点、线、面、标注,他们可以分别被加载到MapControl中。与加载其他数据一样,首先定义一个工作空间,用CadWorkspaceFactoryClass实例化工作空间,并打开相应的工作空间。②创建FeatureLayer的实例,定义数据集,使用IMap接口的AddLayer方法将要素图层添加至当前地图。
核心代码如下:
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(); }
(2)整幅图加载。实现思路:将CAD作为整幅图加载时,在得到相应的工作空间之后对CAD文件中的要素进行遍历,并判断是否为注记图层,如果是注记则需使用CadAnnotationLayer对象。
核心代码如下:
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(); }
2、CAD文件作为栅格图层加载
很多情况下CAD数据仅仅用作背景显示而不参与矢量分析,这时候将CAD文件以栅格图层的方式加载,需要使用ICadLayer和ICadDrawingDataset两个接口。
(1)接口
①ICadLayer接口主要提供对CAD文件属性信息的访问。
②ICadDrawingDataset接口提供了对CAD数据集成员的访问。
(2)实现思路
①用IWorkspaceFactory接口的OpenFromFile方法获得CAD文件的工作区。
②用ICadDrawingWorkspace接口的OpenCadDrawingDataset方法获得CAD文件的数据集,并将其赋值给CadLayerClass类的实例对象pCadLayer的CadDrawingDataset属性。
③使用IMap接口的AddLayer方法将pCadLayer添加至当前地图。
核心代码如下:
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(); }
0 0
- ArcGIS Engine 10.0 for.NET开发学习笔记(四)
- ArcGIS Engine 10.0 for.NET开发学习笔记(一)
- ArcGIS Engine 10.0 for.NET开发学习笔记(二)
- ArcGIS Engine 10.0 for.NET开发学习笔记(三)
- ArcGIS Engine 10.0 for.NET开发学习笔记(五)
- ArcGIS Engine 10.0 for.NET开发学习笔记(六)
- ArcGIS Engine 10.0 for.NET开发学习笔记(七)
- ArcGIS Engine 10.0 for.NET开发学习笔记(八)
- ArcGIS Engine 10.0 for.NET开发学习笔记(九)
- arcgis engine开发学习
- Arcgis Engine Runtime开发笔记
- ArcGIS Engine开发Geodatabase代码(四)——Join
- Arcgis Engine for java 10 开发环境配置 (eclipse)
- ArcGIS Runtime for .Net Quartz开发探秘(四):加载本地文件
- ArcGIS Engine学习(1)
- Arcgis for iOS开发笔记(一)
- 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word
- 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能
- 【精】Linux磁盘I/O性能监控之iostat详解
- 解决win7提示不是正版的问题
- Java面向对象
- 线程—synchronized、volatile
- 计蒜客-程序设计竞赛入门
- ArcGIS Engine 10.0 for.NET开发学习笔记(四)
- 手游中的纹理压缩
- 借助finalReport实现excel转换成cpt格式进行文档实现在线
- Android系统集成第三方pre-build库和程序(转)
- os.walk处理路径&&lda初级使用
- react-native--生命周期
- 把汉字转换成拼音(全拼)
- 网址链接收藏
- WebApp开发入门必备知识