当前位置:文档之家› 牟乃夏ArcEngine开发教程:第3章地图操作基本功能

牟乃夏ArcEngine开发教程:第3章地图操作基本功能


1. 空间数据与工作空间
• 1.空间数据
• 在GIS软件中,空间数据有多种不同的存在形式。按照不同的划分标准可 以分为矢量数据和栅格数据、GIS格式的地理数据与非GIS格式的数据 (如CAD格式等)、空间数据库数据(如个人数据库、ArcSDE数据库等) 和文件数据(ShapeFile格式、Coverage格式)等。
核心代码
3.数据加载
• 使用ControlsOpenDocCommandClass加载地图 • 使用ArcGIS Engine中封装好的类库资源 ControlsOpenDocCommandClass实现地图文档的加载的核心代码如 下:
3.数据加载
• 2)加载ShapeFile数据 • ShapeFile文件是目前主流的一种空间数据的文件存储方式,也是 不同GIS软件进行数据格式转换常用的中间格式。加载ShapeFile数 据的方式有两种:
1. 空间数据与工作空间
• 工作空间
• 数据加载需要先打开相对应的工作空间。 • IWorkspace接口:IWorkspace接口定义了访问工作空间各种属性的方法,如工作 空间的连接属性等。通过IWorkspace接口可实例化现有数据集和创建新数据集。 由于WorkSpace是一个普通类,要获得WorkSpace,需要通过工作空间工厂 (WorkspaceFactory)来创建。 • IWorkspaceFactory接口:IWorkspaceFactory接口定义了创建、打开工作空间的方 法和对工作空间工厂信息成员的访问。用户可通过工作空间工厂管理不同类型 的工作空间,所有的工作空间对象都可通过此接口产生。 • IWorkspaceFactory接口的Create方法可产生一个新的工作空间对象,不同类型的 WorkspaceFactory对象,其Create方法产生的工作空间对象是不同的。 • IWorkspaceShapefileFactory接口的Open方法和OpenFromFile方法可以用于打开一 个已经存在的工作空间,Open方法用于打开一个SDE数据库,OpenFromFile方法 用于打开一个文件类型的数据,如*.tif、*.img等。
核心代码
3.数据加载
• 通过MapControl的AddShapeFile方法加载ShapeFile文件
• 用MapControl控件的AddShapeFile方法同样可加载ShapeFile文件,这样省 去了建立工作空间、数据集等步骤。调用该方法需要传入两个参数,分 别是文件路径和不带扩展名的文件名,调用方法如下: • mainMapControl.AddShapeFile(string Path,string fileName);
3.数据加载
• 3)加载栅格数据
• 栅格数据是GIS的数据源之一,主要有卫星影像、航空影像、扫描的地图、 照片等。常见的栅格数据格式有*.bmp、*.tif和*.jpg等,这几种栅格数据 的工作空间是其所在的文件夹。添加栅格数据主要用到IRasterPyramid3、 IRasterLayer等接口。
• IRasterPyramid3接口提供了对栅格数据集的金字塔属性的访问,Present属性用于判 断栅格数据集是否存在金字塔,Create方法用于为栅格数据集创建金字塔。 • IRasterLayer接口继承自ILayer接口,CreateFromDataset方法用于从已有的栅格数据 集对象创建图层;CreateFromRaster方法用于从已有的栅格对象创建图层;Raster属 性用于获取IRasterLayer接口中的Raster对象,DisplayResolutionFactor属性用于设置 栅格数据的分辨率。 • 在加载栅格文件时,需引用ESRI.ArcGIS.DataSourcesRaster命名空间。
2. MapControl控件接口
• 1)IMapControlDefault接口
• IMapControlDefault接口是MapControl控件的缺省接口,是代表当前版本的最新接口,开发环境自动使用这个接口定 义的属性和方法。
• 2)IMapControl2接口
• IMapControl2接口提供了一系列的属性和方法,如设置MapControl控件的显示属性、控件外观、添加和管理数据图层 和地图文档、在控件上绘制图形和返回几何对象等。
• KeyIntercept:返回或设置MapControl控件截取的键盘按键信息。
• Object:返回MapControl控件。 • ShowMapTips:控制是否显示地图的Map Tips。 • TipDelay:设置Map Tips的延迟时间。 • TipStyle:设置Map Tips的显示样式。 • SuppressResizeDrawing::当控件尺寸发生变化时阻止数据实时重绘。
3.数据加载
• 1)加载地图文档的方式有三种:
使用IMapControl接口的LoadMxFile方法加载; 通过IMapDocument接口加载; 使用ArcGIS Engine中封装好的类库资源ControlsOpenDocCommandClass加 载。
3.数据加载
• 使用IMapControl接口的LoadMxFile方法加载地图文档 • 实现思路如下:
• 通过.NET框架类提供的打开文件对话框选择要打开的地图文档; • 用IMapControl接口提供的CheckMxFile方法检查是否为有效的地图文档, 若有效,则调用IMapControl接口提供的LoadMxFile方法进行加载。
核心代码
3.数据加载
• 通过IMapDocument接口加载
• 2.工作空间
• 工作空间(Workspace)对象,在物理级别上相当于地理数据库本身,在 逻辑上是一个包含空间数据集和非空间数据集的数据容器。它包含数据 集(Dataset)、要素类(FeatureClass)、表(Table)等数据。
1. 空间数据与工作空间
常用的工作空间及工作空间对象 工作空间工厂对象 AccessWorkspaceFactor y ArcInfoWorkspaceFacto ry CadWorkspaceFactory OLEDBWorkspaceFactory 工作空间对应类型 描述 esriLocalDatabaseWorkspace 打开Personal GeoDatabase esriFileSystemWorkspace 打开ArcInfo工作空间文件
• 5)IMapControlEvents2接口
• IMapControlEvent2接口为事件接口,它定义了MapControl能够处理的全 部事件,如OnMouseDown、OnMouseMove、OnKeyUp、 OnBeforeScreenDraw、OnAfterDraw、OnExtentUpdated等。
• IMapDocument接口定义了操作和管理地图文档对象的方法和属性。使用 这个对象可以获取、更新一个文档的内容,设置文档文件的属性以及读、 写和保存一个文档文件等。IMapDocument接口同时扮演着数据显示和数 据容器的双重身份,可以通过ActiveView获得Map数据视图,通过 FocusMap属性获得当前正在使用的Map对象的数据容器身份。一个文档 对象可能拥有多个Map对象(相当于ArcGIS中的数据框Data Frame),但 是在同一时刻内只能有一份Map处于使用状态。
esriFileSystemWorkspace
打开CAD文件的工作空间
SdeWorkspaceFactory
ShapefileWorkspaceFac tory TinWorkspaceFactory TextFileWorkspaceFact ory
esriRemoteDatabaseWorkspac 使用OLEDB打开数据库的工作空间文件 e esriRemoteDatabaseWorkspac 打开SDE数据库的工作空间 e esriFileSystemWorkspace 打开ShapeFile文件的工作空间 esriFileSystemWorkspace esriFileSystemWorkspace 打开TIN数据文件的工作空间 打开文本文件的工作空间
通过工作空间加载; 通过IMapControl接口的AddShapeFile方法加载。
3.数据加载
• 通过工作空间加载ShapeFile文件 多图层的集合,就像ArcMap的mxd文档一样,可以包括
Map、Layer、FeatureLayer三者之间的关系:Map是很 很多Layer。Layer 是图层对象,是数据的外壳,必须建 • 通过工作空间加载ShapeFile文件主要用到 IMap 、ILayer、IFeatureLayer和 立在数据的基础上才有意义。FeatureLayer是具体的要素 IFeatureClass四个接口。 图层,需要经过Lay行操作的起点,主要用于管理 Map 对象中的图层对 FeatureLayer、FeatureClass的区别: 象,要素选择集和空间参考等对象。 FeaturLayer是加载在地图文档中的矢量数据层,只是要 • ILayer接口是图层对象的通用接口,它提供了操作图层的属性和方法,可 素类的表现形式。FeatureClass是一组空间实体的集合, 用于所有的图层,例如要素图层( FeatureLayer)、栅格图层 在数据表中存储了统一的属性和行为,每一个 (RasterLayer)和图形图层集合( CompositeGraphicsLayer )等。 FeatureClass 都有一个Geometry类型。 接口继承自ILayer接口,IFeatureClass接口 • IFeatureLayer接口继承自ILayerIFeatureLayer 接口,提供了访问基于矢量数据图层的属 IClass接口; 性和方法,图层的数据可以是继承自 Geodatabase ,ShapeFile或Coverage数据。 FeatureLayer可以创建自己的对象,而FeatureClass不行。 • IFeatureClass接口是获取和设置要素类属性的主要接口。如:获取要素类 的类型,得到满足某个查询条件的要素个数,或在要素类中创建一个新 的功能等。
相关主题