Presentation is loading. Please wait.

Presentation is loading. Please wait.

ArcObject应用开发 ——课程实践.

Similar presentations


Presentation on theme: "ArcObject应用开发 ——课程实践."— Presentation transcript:

1 ArcObject应用开发 ——课程实践

2 内容简介 ArcGIS产品介绍 结合ArcGIS软件介绍系统开发方式 COM编程基础 ArcObject简介 如何阅读OMD
简单的AO开发实例

3 ArcGIS介绍 ArcGIS概述 统一的地理信息系统平台 灵活性 信息技术标准 功能强大 ArcGIS由三个重要部分组成
ArcGIS 桌面软件 ,一个一体化的高级的GIS应用 ArcSDE通路,一个用数据库管理系统管理空间数据库的接口 ArcIMS软件,基于Internet的分布式数据和服务的GIS

4 ArcGIS桌面软件 ArcView ArcEditor ArcInfo

5 ArcSDE 是在数据库管理系统中存储和管理多用户空间数据库的通路。ArcGIS Desktop通过它来应用和管理Geodatabase数据。 ArcIMS 为ArcGIS系统增加了Internet地图服务能力 所有的ArcGIS桌面客户端可以通过Web从ArcIMS服务器动态地获取矢量数据流。

6 ArcGIS桌面系统 ArcMap ArcCatalog ArcToolBox

7 系统开发方式 自主开发:从底层做起 二次开发:利用专业软件提供的开发工具 组件式开发:针对功能生成动态链接库或控件
软件成本低,独立性强,但耗时耗力 软件成本高,独立性弱,开发周期短 4 可重用,针对具体应用需作相应修改

8 组件接口设计

9 ArcGIS开发方式 VBA+ ArcGIS(8.0)

10 ArcGIS开发方式 VBA+ ArcGIS(8.0) VB、VC+ArcObject VB、 VC+ArcEngine 7

11 ArcObject简介 ArcObject是一套ArcGIS的可重用的通用的二次开发组件集 ArcGIS ArcObject

12 ArcObject发展历程 1999年:ArcInfo8 2001年:ArcGIS8.1 2004年:ArcGIS9
ArcGIS Engine是嵌入式GIS产品 它将ArcObject中的一些组件单独打包出来,灵活性高,费用低 AO是指ArcGIS Desktop版本的组件集ArcObject,即ArcObject Desktop Development Kit(最完整版) fyuuijijklllkl

13 ArcObject对象模型图 ArcGIS9.0的Desktop版本中AO的枚举对象是647个,结构对象是35个
3073个接口,组件类2389个 一共是6144个对象,而且随着新版本的出现在不断增加

14

15 AO编程基础 基于接口的编程,基础是COM
COM(Component Object Model)不是接口也不是类,而是一种二进制基本的组件通信标准,因此它是语言独立的。COM组件间所有通讯都通过组件的接口实现,一旦一个接口被添加,就不能被删除。 什么是接口?为什么要使用接口? 过程、函数 类 接口

16 接口和类 接口是一种用来定义程序的协定。它可以包含方法、属性和事件,但它本身并不提供它所定义的成员的实现,而只是指定实现该接口的类或接口必须提供的成员。 接口可以看作是一个特殊的类形式,除了不能被实例化为一个对象外,它可以实现类能够完成的任何任务,如声明对象为某种接口类型,接口也可以继承等。

17 接口和类的关系 Class Properties and Methods Interfaces DOG IDog Color Bark
Growl Color CallPet Name IPet IDog Class Properties and Methods Interfaces

18 对象模型图的标记 组件类 抽象类 例化 类 继承 关联 组成 方法 属性 通过赋值来给对象属性分配一个值 通过引用设置对象的属性 Bird
Chicken Nest Feather Wing Egg 2 *

19 对象模型图中的类 在OMD中有三类class,分别是抽象类(AbstractClass)、组件类(CoClass)和普通类(Class)。抽象类的主要目的是为它的子类定义公共接口,一个抽象类将把它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。一个组件类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以作为其它类的一个属性或者从其它类的实例化来创建。 Dim pFeatureClass As IFeatureClass Set pFeatureClass = pFeatureLayer.FeatureClass Dim pMap As IMap Set pMap = pMxDoc.FocusMap

20 类的实例化 A和B为普通类对象,C为组件类对象,D为一普通类,如下面代码: A = B.writeA() A = C.writeA()
A = New D X 普通类不能通过New方法产生 A的生命周期是由产生它的对象B和C控制的

21 类的继承 接口类型继承,并非继承其实现

22 接口继承和调用 父类接口所具有的方法和属性对派生接口都有效 IFeatureClass继承IClass接口
Inherit 父类接口所具有的方法和属性对派生接口都有效 IFeatureClass继承IClass接口 一个类同时支持这两个接口,则接口之间可相互调用

23 类和接口的关系 接口和类的关系 一个类可以支持多个接口,一个接口也可以由多个类实现。在接口中仅定义了接口需要实现的属性和方法,属性和方法的具体实现是在类中完成的。 查询接口:是指在同一个对象上使用附加的接口 Polygon类支持IPolygon和IArea接口,通过IPolygon接口中的Length属性可以得到其周长,通过IArea接口的Area属性可以得到其面积。 set pArea=New Polygon (X) set pArea=pPolygon (√)

24 用VB和ESRI Map Control开发初步
显示包含多个图层的地图 控制图层的漫游和放大 创建工具条 根据设置的比例尺范围显示地图 完成空间和属性查询 通过编程实现图层的加载

25 在VB中加载 Map Control控件

26 引用相应的类库 为了保证能使用所有可用的ArcObject组件,必须添加对相应类库的引用

27 使用Map control控件 2. 向Map control地图中添加数据 4. 保存工程,检查运行效果
3. 设置图层显示属性

28 实现漫游和放大功能 添加漫游功能 添加全景按钮

29 添加工具条 1. 在窗体中添加Toolbar和ImageList控件 2. 向ImageList控件中添加图片(ArcGIS\bin)
5. 修改MouseDown事件 6. 响应Toolbar的ButtonClick事件

30 添加属性查询工具 1. 在窗体中添加Label和Textbox控件 2. 在Textbox的KeyPress事件中添加代码
If KeyAscii = vbKeyReturn Then ' Find the States layer Dim i As Integer Dim pFeatLyr As IFeatureLayer For i = 0 To MapControl1.LayerCount - 1 Set pFeatLyr = MapControl1.Layer(i) If pFeatLyr.Name = "states" Then ' Found it and exit loop Exit For End If Next i ' Create a string to use in the query Dim queryStr As String queryStr = "STATE_NAME = '" & Text1.Text & "'" ' Create the query filter Dim pQueryFltr As IQueryFilter Set pQueryFltr = New QueryFilter pQueryFltr.WhereClause = queryStr ' Perform the selection Dim pFeatSeln As IFeatureSelection ' QI for IFeatureSelection from the ' IFeatureLayer Set pFeatSeln = pFeatLyr pFeatSeln.SelectFeatures _ 添加属性查询工具 pQueryFltr, esriSelectionResultNew, False ' Get the selection set Dim pSelSet As ISelectionSet Set pSelSet = pFeatSeln.SelectionSet ' Get the cursor from the selection set Dim pFeatCursor As IFeatureCursor pSelSet.Search Nothing, True, pFeatCursor ' Assume only one feature Dim pFeature As IFeature Set pFeature = pFeatCursor.NextFeature If Not pFeature Is Nothing Then ' Get the extent of the selected feature Dim pExtent As IEnvelope Set pExtent = pFeature.Shape.Envelope ' And set the Map control's extent MapControl1.Extent = pFeature.Shape.Envelope End If End Sub 1. 在窗体中添加Label和Textbox控件 2. 在Textbox的KeyPress事件中添加代码

31 设置图层显示的比例尺范围 1. 在Map control属性页中添加图层,调整图层显示顺序 2. 根据指定字段值渲染图层
Dim pLayer As ILayer Dim i As Integer ' Iterate through all layers For i = 0 To MapControl1.LayerCount - 1 Set pLayer = MapControl1.Layer(i) ' Note case sensitivity If UCase(pLayer.Name) = "COUNTIES" Then pLayer.MaximumScale = 0 pLayer.MinimumScale = ElseIf UCase(pLayer.Name) = "STATES" Then pLayer.MaximumScale = pLayer.MinimumScale = 0 End If Next i 1. 在Map control属性页中添加图层,调整图层显示顺序 2. 根据指定字段值渲染图层 3. 在Form_Load事件中设置图层显示比例尺范围

32 实现空间查询功能 在Map control的Mouse Down事件中添加代码 With Toolbar1.Buttons
If .Item("Zoom").Value = tbrPressed Then MapControl1.Extent = MapControl1.TrackRectangle ElseIf .Item("Pan").Value = tbrPressed Then MapControl1.Pan ElseIf .Item("SelectByPolygon").Value = tbrPressed Then Dim pSearchShape As IPolygon ' Create the search shape Set pSearchShape = MapControl1.TrackPolygon ' Do the actual selection With MapControl1 .Map.ClearSelection .Refresh esriViewGeoSelection .Map.SelectByShape pSearchShape, Nothing, False ' And refresh the map End With End If 在Map control的Mouse Down事件中添加代码

33 通过编程实现图层加载 AddLayerFromFile:layer文件(.lyr) AddShapeFile:Shapefile文件
' Change the paths to reflect your installation Dim pFactory As IWorkspaceFactory Dim pWorkspace As IFeatureWorkspace Dim pFeatLayer As IFeatureLayer ' Create a new ShapefileWorkspaceFactory object Set pFactory = New ShapefileWorkspaceFactory Set pWorkspace = pFactory.OpenFromFile("C:\Data\USA", 0) ' Create a new FeatureLayer and assign a shapefile to it Set pFeatLayer = New FeatureLayer Set pFeatLayer.FeatureClass = pWorkspace.OpenFeatureClass("States") pFeatLayer.Name = pFeatLayer.FeatureClass.AliasName ' Add the FeatureLayer to the map With MapControl1 .AddLayer pFeatLayer .AddShapeFile "C:\Data\USA", "counties" .AddShapeFile "C:\Data\USA", "USHigh" End With AddLayerFromFile:layer文件(.lyr) AddShapeFile:Shapefile文件 AddLayer:Coverages, TIN, Raster, or ArcSDE

34 利用Catalog实现数据处理 建立所需数据库 在数据库中创建新图层 设置图层相应属性 图层导入导出

35 ArcCatalog树状视图 文件和文件夹 * 地图、图层和图形 Feature Dataset GeoDatabase 1
Feature Class * 地图、图层和图形

36 数据组织

37 创建新图层


Download ppt "ArcObject应用开发 ——课程实践."

Similar presentations


Ads by Google