地理信息系统基本功能开发技术介绍PPT

简介 相关

截图

地理信息系统基本功能开发技术介绍PPT
地理信息系统基本功能开发技术介绍PPT

简介

这是一个关于地理信息系统基本功能开发技术介绍PPT,这节课主要是了解ArcGIS开发平台介绍 ArcGIS Engine的组件 GIS基本功能开发 信息检索功能的设计与实现等介绍。地理信息系统有时又称为“地学信息系统”或“资源与环境信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。地理信息系统是一门综合性学科,结合地理学与地图学,已经广泛的应用在不同的领域,是用于输入、存储、查询、分析和显示地理数据的计算机系统,也有称GIS为“地理信息科学”,欢迎点击下载地理信息系统基本功能开发技术介绍PPT哦。

地理信息系统基本功能开发技术介绍PPT是由红软PPT免费下载网推荐的一款地理课件PPT类型的PowerPoint.

GIS设计与开发Ey0红软基地
第二章GIS基本功能开发技术Ey0红软基地
主要内容Ey0红软基地
ArcGIS开发平台介绍Ey0红软基地
ArcGIS Engine的组件Ey0红软基地
GIS基本功能开发Ey0红软基地
信息检索功能的设计与实现Ey0红软基地
1,ArcGIS 产品组成Ey0红软基地
四个关键部分:Ey0红软基地
1,ArcGIS 9产品组成Ey0红软基地
2,ArcObjects与ArcGIS产品Ey0红软基地
2,ArcObjects与ArcGIS产品Ey0红软基地
3,ArcObjects组件库Ey0红软基地
ArcObjects组件库有3000多个对象可供开发人员调用,其中有细粒度的小对象,例如:Geometry对象,也有粗粒度的大对象,例如:Map对象Ey0红软基地
可以通过ArcObjects来扩展ArcGIS Desktop,定制ArcGIS Engine应用,使用ArcGIS Server实现企业级GIS应用Ey0红软基地
采用ArcObjects可以在多种编程环境中开发,包括C++、支持COM的编程语言、.NET、Java等Ey0红软基地
3,ArcObjects组件库Ey0红软基地
可以应用ArcGIS Desktop SDK来扩展ArcGIS Desktop的功能,如添加新的工具、定制用户界面、增加新的扩展模块等,甚至对ArcGIS Desktop应用程序进行完全扩展以提高专业GIS生产能力Ey0红软基地
ArcGIS Server实现了一套标准的Web GIS服务,支持企业级应用,可以建立集中式的GIS服务器来实现GIS功能,发布基于Web的GIS应用,执行分布式GIS运算等Ey0红软基地
2.1.2 ArcGIS的开发方式Ey0红软基地
1)VBA开发Ey0红软基地
VBA自动包含了ESRI对象库参考,用户可以编写并调试在ArcMap或ArcCatalog中使用的VB宏以及ESRI的对象库,宏命令可以将VB的功能和GIS的功能集成起来。Ey0红软基地
可以使用ArcObjects的所有组;Ey0红软基地
其运行离不开ArcGIS系统框架;Ey0红软基地
2.1.2 ArcGIS的开发方式Ey0红软基地
2)插件开发Ey0红软基地
采用COM技术开发基于AE的标准DLLEy0红软基地
3)基于COM的可执行应用程序开发Ey0红软基地
2.1.3 ArcGIS Engine简介Ey0红软基地
ArcGIS Engine是一个简单的、独立于应用程序的ArcObjects编程环境。其SDK提供了一系列嵌入式、应用于ArcGIS Desktop应用程序框架之外的ArcGIS组件。Ey0红软基地
ArcGIS Engine是开发人员用于建立自定义应用程序的嵌入式GIS组件的一个完整类库Ey0红软基地
一,ArcGIS Engine的功能Ey0红软基地
分图层显示专题图,如:道路,河流,行政边界等Ey0红软基地
浏览、缩放地图Ey0红软基地
查看地图上特征要素的信息Ey0红软基地
在地图上显示文本注记Ey0红软基地
在地图上叠加卫星影像或航摄影像Ey0红软基地
在地图上绘制点、线、面几何体Ey0红软基地
通过矩形、圆形或多边形选中地图上的要素Ey0红软基地
通过SQL语句查找要素Ey0红软基地
用各种渲染方式绘制图层,如分级渲染、柱状图渲染、点密度渲染、按比例尺渲染等Ey0红软基地
动态绘制实时数据Ey0红软基地
转换空间数据的坐标系Ey0红软基地
编辑空间数据Ey0红软基地
空间建模与分析Ey0红软基地
二,ArcGIS Engine的组成Ey0红软基地
基本服务-几乎所有GIS应用程序都需要的GIS核心模块ArcObjects构成,如几何要素和显示Ey0红软基地
数据存取-可以对栅格和矢量格式,包括Geodatabase进行数据的存取操作Ey0红软基地
地图表达-创建和显示带有符号、注记的地图和专题图Ey0红软基地
开发组件-快速开发应用程序的界面控件Ey0红软基地
扩展模块-ArcGIS Engine运行时,可以与标准功能或其他高级功能一起部署Ey0红软基地
二,ArcGIS Engine的组成Ey0红软基地
ArcGIS Engine Developer KitEy0红软基地
是一个基于组件的开发产品,主要面向开发人员,能与开发环境集成,提供了开发帮助、类库对象模型以及代码示例等Ey0红软基地
ArcGIS Engine的另一个组件就是其运行时。在部署应用程序时,必须安装相应版本的ArcGIS Engine运行时Ey0红软基地
二,ArcGIS Engine的组成Ey0红软基地
ArcGIS Engine的授权文件Ey0红软基地
*.ecp文件Ey0红软基地
授权文件控制用户可以使用哪些功能Ey0红软基地
例如:编辑空间数据Ey0红软基地
ArcGIS Engine开发包使得用户可以创建、修改或者删除在Geodatabase或者shapefile中的矢量要素。Ey0红软基地
标准ArcGIS Engine Runtime可以编辑shapefile和简单的Personal Geodatabase要素,若需要编辑Enterprise Geodatabase数据,则应使用Geodatabase Update扩展Ey0红软基地
第二节,ArcGIS Engine的组件Ey0红软基地
一,ArcGIS Engine包含的主要控件:Ey0红软基地
MapControlEy0红软基地
PageLayoutControlEy0红软基地
SceneControlEy0红软基地
GlobeControlEy0红软基地
ToolbarControlEy0红软基地
TOCControlEy0红软基地
SymbologyControlEy0红软基地
LicenseControlEy0红软基地
ToolbarControlEy0红软基地
二,组件的加载Ey0红软基地
示例:Ey0红软基地
如何使用MapControl, ToolbarControl, TOCControlEy0红软基地
如何向工具栏添加ArcGIS Engine内置的工具和命令Ey0红软基地
三,MapControl控件Ey0红软基地
MapControl的功能Ey0红软基地
管理控件的外观、显示属性和地图属性Ey0红软基地
添加并管理控件中的数据层Ey0红软基地
装载Map文档(mxd)到控件中Ey0红软基地
从其他应用程序拖放数据到控件中Ey0红软基地
显示绘制图形Ey0红软基地
实现的主要接口Ey0红软基地
IMapControlDefaultEy0红软基地
IMapControl2Ey0红软基地
IMapControl3Ey0红软基地
IMapControlEvents2(事件接口)Ey0红软基地
三,MapControl控件Ey0红软基地
IMapControlDefault接口Ey0红软基地
该接口是地图控件的缺省接口,多数开发环境自动使用这个接口定义的属性、方法,这个接口也代表了控件最新版本的接口Ey0红软基地
如果需要使用这个接口,则用如下代码:Ey0红软基地
IMapControlDefault pMapControl;Ey0红软基地
pMapControl = axMapControl1.Object as IMapControlDefault;Ey0红软基地
三,MapControl控件Ey0红软基地
IMapControl2接口Ey0红软基地
这个接口是任何一个与MapControl相关的任务的出发点,如设置控件外观,设置Map对象或控件的显示属性,添加或者管理数据图层、地图文档,在控件上绘制图形和返回Geometry等Ey0红软基地
控制控件外观界面的属性:Ey0红软基地
Appearance、BorderStyle、BackColorEy0红软基地
方法:Ey0红软基地
获取Geometry对象:TrackLine, TrackPolygon, TrackRectangle, TrackCircleEy0红软基地
在控件上绘制图形:DrawShape,DrawTextEy0红软基地
三,MapControl控件Ey0红软基地
IMapControl3接口Ey0红软基地
该接口继承于IMapControl2,增加了8个属性和1个方法Ey0红软基地
CustomProperty:设置自定义控件属性Ey0红软基地
DocumentFilename:返回MapControl装入的地图文档的文件名Ey0红软基地
DocumentMap:返回MapControl最后装入的地图名称Ey0红软基地
KeyIntercept:返回或设置MapControl截取键盘按键的信息Ey0红软基地
Object:返回潜在的MapControl控件Ey0红软基地
三,MapControl控件Ey0红软基地
当使用IMapControl2接口时:Ey0红软基地
 IMapControl2 pMapControl;Ey0红软基地
 pMapControl = axMapControl1.Object as IMapControl2;Ey0红软基地
Ey0红软基地
 pMapControl = axMapControl1.GetOcx() as IMapControl2;Ey0红软基地
三,MapControl控件Ey0红软基地
ShowMapTips:确定是否显示地图的Map TipsEy0红软基地
TipDelay:设置Map Tips的延迟时间Ey0红软基地
TipStyle:设置Map Tips的显示样式Ey0红软基地
SuppressResizeDrawing():当控件尺寸发生变化时组织数据实时重绘Ey0红软基地
三,MapControl控件Ey0红软基地
IMapControlEvents2接口Ey0红软基地
事件接口,定义了MapControl能够处理的全部事件,如OnMouseDown, OnAfterDraw, OnMouseMove等,其他如OnAfterscreenDraw是绘屏结束后触发的事件,OnExtentUpdated是地图的Extent属性发生变化时触发的事件Ey0红软基地
四,PageLayoutControl控件Ey0红软基地
1)Page对象Ey0红软基地
---管理PageLayout对象中页面Ey0红软基地
2)SnapGrid对象Ey0红软基地
---用于摆放元素而设置的辅助点,便于使用者对齐元素Ey0红软基地
3)RulerSettings对象Ey0红软基地
---辅助尺Ey0红软基地
4)MapSurround对象Ey0红软基地
五,ToolbarControl控件Ey0红软基地
主要用于提供操作地图对象的工具条,是一个集成多种控制地图操作的控件。Ey0红软基地
ToolbarControl上添加工具Ey0红软基地
1)通过向导添加;Ey0红软基地
2)通过代码添加; Ey0红软基地
五,ToolbarControl控件Ey0红软基地
主要接口:IToolbarControl,Ey0红软基地
IToolbarControlDefaultEy0红软基地
IToolbarControlEventsEy0红软基地
ToolbarControl上可以驻留三类命令:Ey0红软基地
1)实现了Icommand的单击命令;Ey0红软基地
2)实现了ICommand和ITool的命令工具;Ey0红软基地
3)实现了ICommand和IToolControl接口的工具控件,用户界面组件;Ey0红软基地
六,TOCControl控件Ey0红软基地
 是一个集成图层控制操作的控件,一般是通过与其他几个地图显示控件相互关联一起工作。Ey0红软基地
SetBuddyControl(object obj)Ey0红软基地
TOCControl通过上述函数来关联其他控件。Ey0红软基地
string strToolID = "";Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomInTool";Ey0红软基地
 this.axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomOutTool";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomInFixedCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomOutFixedCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapPanTool";Ey0红软基地
this.axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapFullExtentCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomToLastExtentBackCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomToLastExtentForwardCommand";Ey0红软基地
 axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
第二节,ArcGIS Engine的组件Ey0红软基地
2.2.7控件之间的关联Ey0红软基地
1)通过向导关联Ey0红软基地
2)通过代码关联 Ey0红软基地
七,控件之间的关联Ey0红软基地
示例1:Ey0红软基地
1)通过向导关联Ey0红软基地
七,控件之间的关联Ey0红软基地
示例2:Ey0红软基地
2)通过代码关联Ey0红软基地
SetBuddyControl(Object 被关联控件);Ey0红软基地
第三节 GIS基本功能的设计开发Ey0红软基地
2.3.1图层的加载Ey0红软基地
 在ArcEngine中需要使用MapControl来显示地理数据,用TOCControl进行图层操作。Ey0红软基地
 MapControl控件中可以添加各种常用数据格式,如:SHP、mdb、CAD数据、Coverage数据、TIN数据等。Ey0红软基地
Shapefile数据是一种比较常用的,而且是容易获得(从其他格式的数据转换而来)的文件数据格式。Ey0红软基地
 Shapefile采用早期的dBase数据的管理模式,即以文件夹作为数据库,文件夹下的文件组成了数据库中的表,对于Shapefile文件来说就是图层。Ey0红软基地
 一个Shapefile图层至少需要三个文件:*.SHP,*.SHX,*.DBF,它们分别用于存储空间数据、空间索引信息和属性数据。Ey0红软基地
使用属性向MapControl中添加图层Ey0红软基地
 在窗体上添加MapControl控件成功后,在控件上点击右击查看其属性框。打开属性对话框的”Map”选项卡,点击   按钮可以任意加载几个图层。Ey0红软基地
使用程序动态地添加图层Ey0红软基地
 图层的常规加载方法Ey0红软基地
首先向工程里添加如下引用:Ey0红软基地
ESRI.ArcGIS.DataSourcesFile;Ey0红软基地
ESRI.ArcGIS.GeoDataBase;Ey0红软基地
ESRI.ArcGIS.Carto;Ey0红软基地
打开图层的常用步骤:Ey0红软基地
1.创建一个类工厂Ey0红软基地
2.使用类工厂创建一个要使用的工作区Ey0红软基地
3.使用工作区打开并得到图层的datasetEy0红软基地
4.把dataset装入到新建的图层实例Ey0红软基地
5.把图层加载到MapControl控件Ey0红软基地
涉及的类和接口Ey0红软基地
相关类说明Ey0红软基地
WorkSpace类Ey0红软基地
 WorkSpace类是一个包含空间数据集和非空间数据集的数据容器。根据数据集的物理存储形式可以分为三种类型:Ey0红软基地
1) 基于文件形式的FileSystemWorkspaceEy0红软基地
2) 基于本地数据库文件形式的LocalDatabaseWorkspaceEy0红软基地
3) 基于远程数据库管理系统(RDBMS)并通过ArcSDE访问的RemoteDatabaseWorkspaceEy0红软基地
WorkSpaceFactory类Ey0红软基地
 WorkSpaceFactory是工作空间分配者,用户进行相应的属性设置并通过它来连接各种工作空间。从该类中派生出了很多其他的类,如用于连接本地shp格式数据的ShapeFileWorkspaceFactory,以及用于连接远程SDE数据的SdeWorkspaceFactory还有:Ey0红软基地
RasterWorkspaceFactoryEy0红软基地
AccessWorkspaceFactoryEy0红软基地
CadWorkspaceFactoryEy0红软基地
ArcinfoWorkspaceFactoryEy0红软基地
TinWorkspaceFactory等。Ey0红软基地
IWorkspaceFactory接口Ey0红软基地
      该接口主要用于打开和创建工作空间,并提供Workspace的相关信息。该接口共提供了1种属性和11种方法。下面介绍其中两种方法。Ey0红软基地
Open方法Ey0红软基地
 该方法通过连接属性打开工作空间,其形式为:Ey0红软基地
 IWorkspace Open(IPropertySet propSet, int hWnd ); Ey0红软基地
 参数:Ey0红软基地
  propSet—连接属性,IPropertySet对象。Ey0红软基地
 hWnd—整型变量,一般为0。Ey0红软基地
OpenFromFile方法Ey0红软基地
 通过文件路径和名称打开指定的本地工作空间,其形式为:Ey0红软基地
 IWorkspace OpenFromFile (string fileName,int hWnd ); Ey0红软基地
 参数:Ey0红软基地
 fileName—表示所要打开工作空间的路径文件名称。Ey0红软基地
 hWnd—整型变量,一般为0。Ey0红软基地
IPropertySet接口Ey0红软基地
 该接口提供了1种属性和7种方法来管理连接属性。常见属性和方法有:Ey0红软基地
 SetProperty方法Ey0红软基地
该方法用于设置指定的连接属性值。Ey0红软基地
 GetProperty方法Ey0红软基地
返回指定连接属性值。Ey0红软基地
IFeatureWorkspace:Ey0红软基地
提供创建和打开各种数据集等有关的功能。Ey0红软基地
OpenFeatureClass:打开一个要素类,就是存在于FeatureWorkspace里面的一个FeatureClassEy0红软基地
AddLayer:地图空间上添加指定图层。Ey0红软基地
用法:AddLayer (pLayer )Ey0红软基地
pLayer:是一个图层对象Ey0红软基地
AddLayerFromFile:将图层文件加载到地图控件上指定的位置。这里的位置是各图层在Mapcontrol上的Index。Ey0红软基地
用法: Ey0红软基地
MapControl1.AddLayerFromFile ("C:\Temp\myLayer.lyr“,2 );Ey0红软基地
“C:\Temp\myLayer.lyr“:图层文件路径名称;Ey0红软基地
2:是在MapControl上的图层的显示指数;Ey0红软基地
IWorkspaceFactory wsf = new ShapefileWorkspaceFactory();Ey0红软基地
IWorkspace ws=  wsf.OpenFromFile(@"E:\博湖县表三移动", 2);Ey0红软基地
      IFeatureWorkspace fws = ws as IFeatureWorkspace;Ey0红软基地
      IFeatureClass fc= fws.OpenFeatureClass("博湖县调查点.shp");Ey0红软基地
      IFeatureLayer fl = new FeatureLayerClass();Ey0红软基地
      fl.FeatureClass = fc;Ey0红软基地
      ILayer lyr = fl as ILayer;Ey0红软基地
      lyr.Name = fc.AliasName;Ey0红软基地
      this.axMapControl1.Map.AddLayer(lyr);Ey0红软基地
上面演示的是图层的常规加载方法,但是Shapefile作为一种应用非常广泛的地理数据格式,MapControl控件提供了更方便的加载方法,省去了建工作区、找数据集等步骤。可以用下面代码完成:Ey0红软基地
object.AddShapeFile (Path, fileName ) Ey0红软基地
Map Control1.AddShapeFile (“F:\\Shapefile”,“县界.shp");Ey0红软基地
参数:Ey0红软基地
F:\\Shapefile:是包含要打开的shp文件的路径;Ey0红软基地
县界.shp:是在上面的路径下shape文件的文件名。Ey0红软基地
向MapControl中加载栅格数据Ey0红软基地
ArcEngine支持的栅格数据格式有:IMG,TIF,JPG,SID,BMP等Ey0红软基地
ArcEngine的功能既强大也很灵活,直接从文件创建Raster图层也是被支持的:Ey0红软基地
  using ESRI.ArcGIS.DataSourcesRaster; Ey0红软基地
    //创建栅格图层类Ey0红软基地
IRasterLayer rasterLayer = new RasterLayerClass();Ey0红软基地
//从路径创建栅格图层rasterLayer.CreateFromFilePath(“E:\\test\\县界.tif”);Ey0红软基地
//图层添加到地图控件this.axMapControl1.AddLayer(rasterLayer);Ey0红软基地
向MapControl中加载CAD数据Ey0红软基地
DWG数据是GIS的一个重要数据源,ArcEngine对CAD数据支持得非常好。Ey0红软基地
下面示例程序加载文件”F:\test\dl.dwg”Ey0红软基地
向MapControl中加载Coverage数据Ey0红软基地
 Coverage数据的格式为”*.adf”Ey0红软基地
 示例给出加载Coverage数据的一个方法:Ey0红软基地
向MapControl中加载TIN数据Ey0红软基地
示例代码如下:Ey0红软基地
 IWorkspaceFactory pTinWSFactory;Ey0红软基地
 ITinWokspace pTinWS;Ey0红软基地
 ITinLayer pTinLyr;Ey0红软基地
pTinWSFactory=new TinWorkspaceFactoryClass();Ey0红软基地
 pTinWS=pTinWSFactory.OpenFromFile(“F:\TIN”,0);Ey0红软基地
 pTinLyr=new TinLayerClass();Ey0红软基地
 pTinLyr.Dataset=pTinWS.OpenTin(“地形”);Ey0红软基地
 pTinLyr.Name=“地形”;Ey0红软基地
 axMapControl1.AddLayer(pTinLyr);Ey0红软基地
图层的选择Ey0红软基地
 MapControl通过对图层进行索引来定位图层,如果想得到索引为2的图层(首先保证其存在),方法如下:Ey0红软基地
 layer=axMapControl1.get_layer(2) ;Ey0红软基地
但在程序开发中,我们不容易知道具体的图层索引号,因此用名称来获取图层比较合适,下面定义的函数可用名称来获得图层,代码如下:Ey0红软基地
调用以上函数可以获得相应的图层。Ey0红软基地
 private ILayer GetLayerByName(AxMapControl mapCtrl,string lyrName)Ey0红软基地
        {Ey0红软基地
            ILayer lyr=null;Ey0红软基地
            for (int i = 0; i < mapCtrl.LayerCount;i++ )Ey0红软基地
            {Ey0红软基地
                if (mapCtrl.get_Layer(i).Name == lyrName)Ey0红软基地
                    lyr = mapCtrl.get_Layer(i);Ey0红软基地
                elseEy0红软基地
                    lyr = null;Ey0红软基地
            }Ey0红软基地
                return lyr;Ey0红软基地
        }Ey0红软基地
ILayer  lyer=GetLayerByName(axMapControl1,”分市州”);Ey0红软基地
Lyer.Visible=false;   //隐藏分市州图层Ey0红软基地
axMapControl1.Refresh();Ey0红软基地
图层的卸载Ey0红软基地
 卸载指定图层:axMapControl1.DeleteLayer(3);Ey0红软基地
 卸载所有图层:Ey0红软基地
 axMapControl1.ClearLayers();Ey0红软基地
 axMapControl1.Refresh();Ey0红软基地
控制图层显示的范围Ey0红软基地
当MapControl中加载了很多图层之后,在缩放过程中,用户并不希望所有图层都显示,比如在浏览中国轮廓的时候,县级的行政区划就不必要再显示了,这样可以减小地图负载,使地图更清晰。Ey0红软基地
实现这个功能,具体的做法就是设置图层的可见比例尺范围,代码如下:Ey0红软基地
axMapControl1.get_Layer(3).MaximumScale=500000;Ey0红软基地
axMapControl1.get_Layer(3).MinimumScale=1000000;Ey0红软基地
axMapControl1.Refresh(); Ey0红软基地
第三节 GIS基本功能的设计开发Ey0红软基地
2.3.2鹰眼功能的实现Ey0红软基地
ArcEngine实现鹰眼功能Ey0红软基地
下面给出一个简单鹰眼模块示例。Ey0红软基地
关于鹰眼的实现方式,最常用的是用一个 MapControl 控件显示地图全图,并在上面画一个红色矩形框表示当前地图的显示范围,并实现鹰眼 MapControl 与主窗体的 MapControl 互动。Ey0红软基地
1 、添加鹰眼控件Ey0红软基地
2、鹰眼的实现Ey0红软基地
当地图载入到主 Map 控件时,同时也载入到鹰眼控件,代码如下:Ey0红软基地
ArcEngine实现鹰眼功能Ey0红软基地
1 、添加鹰眼控件Ey0红软基地
数据的同步加载OnMapReplacedEy0红软基地
 private void axMapControl2_OnMapReplaced (object sender, IMapControlEvents2_OnMapReplacedEvent e)Ey0红软基地
        {Ey0红软基地
            IMap pMap = this.axMapControl2.Map;Ey0红软基地
            for (int i = 0; i <= pMap.LayerCount - 1; i++)Ey0红软基地
            {Ey0红软基地
                this.axMapControl1.Map.AddLayer(pMap.get_Layer(i));Ey0红软基地
            }Ey0红软基地
            this.axMapControl1.Extent =      this.axMapControl2.FullExtent;Ey0红软基地
            this.axMapControl1.Refresh();Ey0红软基地
        }Ey0红软基地
绘制鹰眼矩形框Ey0红软基地
private void axMapControl2_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)Ey0红软基地
        {Ey0红软基地
         IEnvelope pEnvelope = e.newEnvelope as IEnvelope;Ey0红软基地
            IGraphicsContainer pGraphicsContainer = this.axMapControl1.Map as IGraphicsContainer;Ey0红软基地
            IActiveView pActiveView = pGraphicsContainer as IActiveView;Ey0红软基地
            pGraphicsContainer.DeleteAllElements();Ey0红软基地
            IRectangleElement pRectangleElement = new RectangleElementClass();Ey0红软基地
            IElement pElement = pRectangleElement as IElement;Ey0红软基地
            pElement.Geometry = pEnvelope;Ey0红软基地
            IRgbColor pColor = new RgbColorClass();Ey0红软基地
            pColor.RGB = 255;Ey0红软基地
            pColor.Transparency = 30;Ey0红软基地
            ILineSymbol pLineSymbol = new SimpleLineSymbolClass();Ey0红软基地
            pLineSymbol.Width = 1;Ey0红软基地
            pLineSymbol.Color = pColor;Ey0红软基地
            pColor = new RgbColorClass();Ey0红软基地
            pColor.RGB = 255; pColor.Transparency = 0;Ey0红软基地
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();Ey0红软基地
            pFillSymbol.Color = pColor;Ey0红软基地
            pFillSymbol.Outline = pLineSymbol;Ey0红软基地
            IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;Ey0红软基地
            pFillShapeElement.Symbol = pFillSymbol;Ey0红软基地
            pElement = pFillShapeElement as IElement;Ey0红软基地
            pGraphicsContainer.AddElement(pElement, 0);Ey0红软基地
            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);Ey0红软基地
}Ey0红软基地
鹰眼与主Map 控件互动Ey0红软基地
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)Ey0红软基地
        {Ey0红软基地
            if (this.axMapControl1.Map.LayerCount != 0)  Ey0红软基地
            {  Ey0红软基地
            // 按下鼠标左键移动矩形框  Ey0红软基地
                if (e.button == 1)Ey0红软基地
                {Ey0红软基地
                    IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY);Ey0红软基地
                    IEnvelope pEnvelope = this.axMapControl2.Extent; pEnvelope.CenterAt(pPoint);Ey0红软基地
                    this.axMapControl2.Extent = pEnvelope;Ey0红软基地
                    this.axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);Ey0红软基地
                }          Ey0红软基地
            // 按下鼠标右键绘制矩形框  Ey0红软基地
                 else if (e.button == 2)Ey0红软基地
                 {Ey0红软基地
                     IEnvelope pEnvelop = this.axMapControl1.TrackRectangle();Ey0红软基地
                     this.axMapControl2.Extent = pEnvelop;Ey0红软基地
                     this.axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);Ey0红软基地
                 }Ey0红软基地
}Ey0红软基地
}Ey0红软基地
第三节 GIS基本功能的设计开发Ey0红软基地
2.3.3地图浏览功能的实现Ey0红软基地
地图浏览功能的实现Ey0红软基地
地图的浏览功能包括漫游、放大、缩小和全屏等操作,这也是GIS最基本的功能。Ey0红软基地
利用ArcEngine开发的GIS中实现这些功能有多种方法。Ey0红软基地
最简单的方法是利用ArcEngine的内置Command控件来与地图显示控件进行交互,Ey0红软基地
也可以通过ArcEngine类库的相应接口和方法来实现。Ey0红软基地
漫游Ey0红软基地
  漫游操作直接使用MapControl的Pan方法。Ey0红软基地
 MapControl1.Pan();Ey0红软基地
拉框放大Ey0红软基地
 拉框放大就是把用鼠标拖出来的方块区域放大到全屏。Ey0红软基地
 axMapControl1.Extent=MapControl1.TrackRectangle();Ey0红软基地
IEnvelope接口Ey0红软基地
除此之外,还可以利用IEnvelope接口的PutCoords方法Ey0红软基地
IEnvelope:是指地物的外接矩形,用来表示地物图形的大体位置和形状,一般可用于检索地物,判断地物间的拓扑关系,可以使得检索、判断的速度加快,因为有了IEnvelope,可以首先判断该外接矩形是否在检索范围内,而判断一个外接矩形是比较简单的。Ey0红软基地
IEnvelope接口Ey0红软基地
Envelope也称包络线,是一个矩形区域,是每个几何形体的最小外接矩形。每个Geometry都拥有一个Envelope,包括Envelope自身。Ey0红软基地
IEnv是包络线对象的主要接口,定义了XMax、XMin、YMax、YMin、Height和Width等属性,用于获取或设置一个存在的包络线对象的空间坐标。Ey0红软基地
方法:Expand、offset、CenterAt、PutCoords等。Expand方法用于按比例缩放包络线的范围,产生一个新的包络线对象;offset是一个偏移方法,通过一个给定的(x,y)移动包络线;CenterAt方法则通过改变包络线的中心点来移动包络线;PutCoords方法为按指定的坐标点来构造包络线。Ey0红软基地
IEnvelope接口的PutCoords方法(XMin, YMin,XMax,YMax) (将新建的一个边框的4个极坐标设置为输入的参数) Ey0红软基地
IEnvelope接口的Expand方法(dx, dy, asRatio) (按照输入的dx与dy参数来放大或者缩小当前的边框,用与对ArcMap窗体的中心放大或缩小,或者点击屏幕获得点击点的坐标,并将中心点设置成点击点,并进行一定比例的放大或者缩小)Ey0红软基地
拉框缩小Ey0红软基地
 拉框缩小和拉框放大是对应的操作,它是把全屏区域缩小到鼠标拖出的方块区域中。Ey0红软基地
 这个操作要计算缩小后的地图的显示范围,因此稍微有一点复杂.Ey0红软基地
中心放大Ey0红软基地
中心放大,就是以当前视图的中心点为缩放中心把地图进行放大的操作。示例代码如下:Ey0红软基地
env.Expand(0.5,0.5,true); //改Envelope的大小Ey0红软基地
axMapControl1.Extent=env;Ey0红软基地
中心缩小Ey0红软基地
中心缩小是中心放大的对应操作,它的目的是把地图以当前视图中心点为缩放中心进行缩小,示例代码如下:Ey0红软基地
IEnvelope env1 = this.axMapControl1.Extent;Ey0红软基地
env1.Expand(2, 2, true);Ey0红软基地
this.axMapControl1.Extent = env1;Ey0红软基地
历史视图切换Ey0红软基地
实现原理:把用户每次操作后的地图的Extent对象存储起来,但用户要进行切换时,把对应的Extent对象恢复回去。Ey0红软基地
第三节 GIS基本功能的设计开发Ey0红软基地
2.3.4工具条的功能实现Ey0红软基地
string strToolID = "";Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomInTool";Ey0红软基地
 this.axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomOutTool";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomInFixedCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomOutFixedCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapPanTool";Ey0红软基地
this.axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapFullExtentCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomToLastExtentBackCommand";Ey0红软基地
axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
strToolID = "esriControlTools.ControlsMapZoomToLastExtentForwardCommand";Ey0红软基地
 axToolbarControl1.AddItem(strToolID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);Ey0红软基地
第三节 GIS基本功能的设计开发Ey0红软基地
2.3.5弹出式菜单的设计Ey0红软基地
ToolbarMenuEy0红软基地
ToolbarMenu.AddItem();Ey0红软基地
ToolbarMenu.PopupMenu();Ey0红软基地
2.3.5弹出式菜单的设计Ey0红软基地
菜单弹出之前添加菜单项Ey0红软基地
 (AddItem)Ey0红软基地
菜单弹出位置的设定---地图显示控件上点击鼠标时弹出菜单(PopupMenu)Ey0红软基地
2.3.5弹出式菜单的设计Ey0红软基地
利用Windows的菜单Ey0红软基地
菜单弹出位置的设定---地图显示控件上点击鼠标时弹出菜单(PopupMenu)Ey0红软基地
各菜单的Clikc事件上实现对应的功能Ey0红软基地
第四节 信息检索功能的实现Ey0红软基地
2.4.1检索方式及实现方法Ey0红软基地
二,图层属性表显示Ey0红软基地
步骤1:设计图层控制的菜单。响应ContextMenuStrip菜单控件,为图层控件添加菜单项(显示属性表菜单和删除图层菜单)。该菜单是在鼠标右键点击图层时弹出的快捷菜单。Ey0红软基地
二,图层属性表显示Ey0红软基地
TOCContrl上点击鼠标获取对应图层Ey0红软基地
TOCControl1.HitTest(e.x, e.y(坐标;光标的位置), ref item, ref map, ref layer, ref other, ref index);Ey0红软基地
方法的使用。Ey0红软基地
(ref,out,param关键字的用法)Ey0红软基地
步骤2:实现图层与图层控制菜单间的关联。响应TOCControl控件的OnMouseDown事件,添加相关代码,实现菜单的弹出。Ey0红软基地
using ESRI.ArcGIS.Carto;   //因为程序中用到ILayer和   //IBasicMap  接口,所以需要添加命名空间Ey0红软基地
ILayer layer = new FeatureLayerClass();Ey0红软基地
private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e)Ey0红软基地
{Ey0红软基地
    this.axTOCControl1.ContextMenuStrip = null;Ey0红软基地
    IBasicMap map = new MapClass();Ey0红软基地
 Ey0红软基地
    System.Object other = null;Ey0红软基地
    System.Object index = null;Ey0红软基地
    ESRI.ArcGIS.Controls.esriTOCControlItem item = ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;Ey0红软基地
this.axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);Ey0红软基地
 if (item == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer && e.button == 2)Ey0红软基地
     {Ey0红软基地
           System.Drawing.Point pt = new System.Drawing.Point();      //先创建点Ey0红软基地
           pt.X = e.x;Ey0红软基地
           pt.Y = e.y;         //加坐标Ey0红软基地
           pt = this.axTOCControl1.PointToScreen(pt);//先2创建点Ey0红软基地
           this.图层控制菜单.Show(pt);Ey0红软基地
      }Ey0红软基地
}Ey0红软基地
运行程序显示结果如下:Ey0红软基地
二,图层属性表显示Ey0红软基地
步骤3:设计一个属性表窗体。Ey0红软基地
1>添加一个属性表窗体。Ey0红软基地
2> 为属性表窗体添加DataGridView控件,并修改控件Anchor属性为(Top, Bottom, Left, Right)。Ey0红软基地
3> 为属性表窗体编写相关代码,实现图层属性信息往属性表中的添加。Ey0红软基地
(构造函数和析构函数)Ey0红软基地
    public partial class TableForm: Form  Ey0红软基地
    {Ey0红软基地
        private ILayer layer;Ey0红软基地
        public TableForm(ILayer lyr)  //对属性表窗口进行初始化Ey0红软基地
        {Ey0红软基地
            InitializeComponent();Ey0红软基地
            layer = lyr;Ey0红软基地
            this.Text = "\"" + layer.Name + "\" 属性表";  Ey0红软基地
        }Ey0红软基地
ITable 接口Ey0红软基地
提供操作属性表有关的方法和属性。Ey0红软基地
获取方法:Ey0红软基地
ILayer as ItableEy0红软基地
(ITable)ILayerEy0红软基地
IField 接口Ey0红软基地
提供操作属性表字段有关的方法和属性。Ey0红软基地
获取方法:Ey0红软基地
table.Fields.get_Field(index); Ey0红软基地
IFeature.Fields.get_Field(index)Ey0红软基地
过滤IFeatureCursor.FindField(name);Ey0红软基地
过滤IFeatureCursor.Fields.get_Field(index)Ey0红软基地
private void TableForm_Load(object sender, EventArgs e)Ey0红软基地
        {Ey0红软基地
            tryEy0红软基地
            {Ey0红软基地
                ITable lyrtable = (ITable)layer;Ey0红软基地
                DataTable table = new DataTable();Ey0红软基地
                IField field;Ey0红软基地
                for (int i = 0; i < lyrtable.Fields.FieldCount; i++)Ey0红软基地
                {Ey0红软基地
                    field = lyrtable.Fields.get_Field(i);Ey0红软基地
                    table.Columns.Add(field.Name);Ey0红软基地
                }Ey0红软基地
                object[] values = new object[lyrtable.Fields.FieldCount];Ey0红软基地
                IQueryFilter queryFilter = new QueryFilterClass();Ey0红软基地
                ICursor cursor = lyrtable.Search(queryFilter, true);Ey0红软基地
                IRow row;Ey0红软基地
while ((row = cursor.NextRow()) != null)Ey0红软基地
                {Ey0红软基地
                    for (int j = 0; j < lyrtable.Fields.FieldCount; j++)Ey0红软基地
                    {Ey0红软基地
                        object ob = row.get_Value(j);Ey0红软基地
                        values[j] = ob;Ey0红软基地
                    }Ey0红软基地
                    table.Rows.Add(values);Ey0红软基地
                }Ey0红软基地
                this.dataGridView1.DataSource = table;Ey0红软基地
            }Ey0红软基地
            catch (Exception e1)Ey0红软基地
            {Ey0红软基地
                MessageBox.Show("无法显示属性表!");Ey0红软基地
                this.Close();Ey0红软基地
            }Ey0红软基地
        }Ey0红软基地
}Ey0红软基地
步骤4:建立图层控制菜单与属性表的连接,实现属性表界面的显示。双击图层控制菜单上的“显示属性表”菜单项,在响应的Click事件中添加如下代码:Ey0红软基地
 private void menuItemShowTb_Click(object sender, EventArgs e)       Ey0红软基地
 {Ey0红软基地
           TableForm tbfrm = new TableForm (layer);Ey0红软基地
          tbfrm.Show();Ey0红软基地
}Ey0红软基地
步骤5:运行程序,查看图层属性。Ey0红软基地
 Ey0红软基地

展开

同类推荐

热门PPT

相关PPT