地图基本操作——有关接口的解释和实现思路(持续更新)

来源:互联网 发布:java dll 反编译工具 编辑:程序博客网 时间:2024/05/16 08:24

      刚开始学ArcEngine没几天,有很多接口的作用和属性之类的都不懂,最近看了一份牟乃夏老师的资料感觉很有用,就整理了一下记录下来。

      基本为概念和方法,没有代码演示,像学习笔记一样的记录,持续学习持续更新。

      以下主要内容。

1、IWorksapce接口,定义访问工作空间各种属性的方法

2、IWorkspaceFactory接口,定义创建、打开工作空间的方法和对工作空间工厂信息成员的访问

      Create方法,创建新的工作空间对象

      Open方法,打开SDE数据库

      OpenFromFile方法,打开文件类型的数据

////////////////////////////////////////////////////////////////////////////////////////////////////////

MapControl控件实现的接口有5种:IMapControlDefault接口、IMapControl2接口、IMapControl3接口、IMapControl4接口、IMapControlEnvent2接口

1、IMapControlDefaul接口是MapControl控件的默认接口,代表当前版本的最新接口,开发环境会自动使用这个接口定义的属性和方法

2、IMapControl2接口

      1)定义控件外观的属性:Apperance、BorderStyle、BaceColor

      2)添加、移动、删除图层的方法:AddLayer、MoveLayerTo、Pan、ClearLayers

      3)绘制图形的方法:DrawShape、DrawText

      4)返回几何对象的方法:TrackLine、TrackPolygon

3、IMapControl3接口。在继承IMapControl2的基础上,添加了9种属性和方法:

     1)CustonProperty:设置自定义控件属性

     2)DocumentFilename:返回地图文档的文件名

     3)DocumentMap:返回地图名称

     4)KeyIntercept:返回或设置截取的键盘按键信息

     5)Object:返回MpaControl控件

     6)ShowMapTips:控制MapTips的显示

     7)TipDelay:设置MapTips的延迟时间

     8)TipStyle:设置MapTips的显示样式

     9)SuppressTesizeDrawing:当尺寸控件发生变化时阻止数据实时重绘

4、IMapControl4接口。在继承IMapControl3接口的基础上,增加了两个属性:

      1)AutoKeyboardScrolling:确定键盘滚动轮的可用性

      2)AutoMouseWheel:确定鼠标滚轮的可用性

5、IMapControlEvent2接口

定义MapControl能够处理的全部事件,如:OnMouseDown、OnMouseMove、OnKeyUp、OnBeforeScreenDraw、OnAfterDraw、OnExtentUpdata等。


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


一、加载地图文档的方式有3种:

1、使用IMapControl接口的LoadMxFile方法

2、使用IMapDocument接口

3、ControlsDocCommandClass类库资源(ICommand接口)

二、加载Shapefile数据方式有2种:

1、使用工作空间

需要用到以下4个接口:

       1)IMap接口:是对地图进行操作的起点,用于管理Map对象中的图层对象、要素选择集和空间参考等对象

       2)ILayer接口:是图层对象的通用接口,提供操作图层的属性和方法,可用于所有的图层。

       3)IFeatureLayer接口:继承自ILayer接口,提供访问基于适量数据图层的属性和方法

       4)IFeatureClass接口:是获取和设置要素类属性的主要接口


Map/Layer/FeatureLayer的关系:Map>Layer>FeatureLayer

【FeatureLayer和FeatureClass的区别:

1)FeatureLayer是加载在地图文档中的矢量数据层,只是要素类的表现形式。FeatureClass是一组空间实体的集合,在数据表中存储了统一的属性和行为,每一个FeatureClass都有一个Geometry类型

2)IFeatureLayer接口继承自ILayer接口,IFeatureClass接口继承自IClass接口

3)FeatureLayer可以创建自己的对象,而FeatureClass不行。】

2、使用MapControl空间的AddShapefile方法

(Shapefile文件是一种空间数据的文件存储方式,是不同GIS软件进行数据格式转换的常用的中间格式)


三、加载栅格数据

【实现思路:

     1、使用OpenFromFile方法获得栅格文件的工作区(IWorkspace和IWorkspaceFactory接口)

     2、使用OpenRasterDataset方法获得栅格文件的数据集 

     3、判断栅格数据集是否有金字塔(没有则创建一个)

     4、创建pRasterLayer,并定义数据集 

     5、使用AddLayer方法加载数据

主要用到2两个接口:

1、IRasterPyramid3接口:提供对栅格数据集的金字塔属性的访问

       Present属性:判断栅格数据集是否存在金字塔

       Create方法:为栅格数据集创建金字塔

2、IRasterLayer接口:继承自ILayer接口

      CreateFromDataset方法:从已有的栅格数据集对象创建图层

      CreateFromRaster方法:从已有的栅格对象创建图层

      Raster属性:获取IRasterLayer接口中的Raster对象

      DisplayResolutionFactor属性:设置栅格数据的分辨率


四、加载CAD数据

【整幅图加载(作为矢量图层加载)_实现思路:                            作为栅格图层加载_实现思路:

    1、定义工作区间                                                                                    1、获取CAD文件的工作区  

    2、遍历CAD文件中的要素,判断是否为注记图层                            2、获取CAD文件的数据集,并将其赋值给CadDrawingDataset属性

    3、分别加载注记与其他图层                                                                3、使用AddLayer方法加载数据】

作为要素图层,以矢量数据来使用,管理方法同FeatureLayer

作为栅格图层,以栅格数据来使用,使用CadLayer对象来管理,需要用到2个接口:

1、ICadLayer接口:提供对CAD文件属性信息的访问,如图名(Name)、可见性(Visible)等

2、ICadDrawingDataset接口:提供对CAD数据集成员的访问,可以通过ICadLayer接口的CadDrawingDataset属性获取CAD的数据集


五、加载个人数据库数据

需要用到2个接口:

1、IFeatureDataset接口:继承自IDataset接口,在其基础上增加一个创建要素类的功能CreateFeatureClass

2、IEnumDataset接口:访问个人数据库中的所有数据集成员,有Reset和Next两个方法:

     1)Reset方法:重置数据集序列,使指针位于第一个数据集之前。

     2)Next方法:获取枚举序列的下一个数据集


【总结:加载空间数据一般具有以下5个步骤

1、创建数据对应的工作空间工厂(WorkspaceFactory)

2、使用WorkspaceFactory创建要加载数据的工作空间(Workspace)

3、使用Workspace打开并得到图层的数据集DataSet

4、将DataSet复制给新建图层的数据源

5、添加图层到MapControl中进行显示】


六、拉框放大/拉框缩小

用的是Extent方法和TrackRectangle方法。

事件发生在axMapControl的OnMouseDown事件中。


七、漫游

调用MapControl的Pan()方法来实现漫游效果。

在MapControl的OnMouseDown事件中触发。



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





原创粉丝点击