《ArcGIS Engine基础实战.ppt》由会员分享,可在线阅读,更多相关《ArcGIS Engine基础实战.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ArcGIS Engine基础介绍Esri西安分公司西安分公司 姚啸姚啸介绍内容ArcGIS Engine简介简介创建第一个创建第一个ArcGIS Engine程序程序练习练习DEMOArcGIS Engeine简介ArcGIS Engine Developer Kit开发包是组件,APIs 和工具的集合p开发人员可以用来创建高级的 GIS 应用p组件Engine 库 制图、绘制、选择、编辑等Control 库 地图控件、布局控件、工具条等pAPIsCOM、.NET、Java、C+p工具文档、开发工具ArcGIS Engine功能框架p基本服务应用层需要用到的 ArcObjects 核心对象几
2、何图形的操作与显示p数据访问地理数据集,矢量,栅格数据p地图分析属性、空间查询,地理数据处理p地图显示渲染、标注、制图表达p开发组件各种应用层面上的 Control 及 Commands&ToolsEngine库组件库ArcGIS Engine核心组件库System SystemUICartoControlsGeometryDisplayGeoprocessingGeoprossorGlobeCoreOutputGeodatabaseDataSourcesGDBDataSourcesFileDataSourcesOleDBDataSourcesRasterGeoDatabaseDistribu
3、tedServer、GISClient扩展模块常用名词uDocumentuMapuLayeruFeaturerLayeruFeatureClassuCursoruRowuGeometryuFeatureuElement主要类库介绍System&SystemUIpSystem System 库是 ArcGIS Engine框架中最底层的一个库,它包含了一些被其他库使用的一些组件。AoInitialize、Array、EnvironmentManager、FileStream、JSONReader、ObjectCopy、PropertySet、Time、UIDpSystemUI SystemUI
4、库定义了一些在 ArcGIS 中被用户界面组件使用的类型。象 ICommand 和 ITool 这样的接口就在这里定义。IArcGISSingleSignon、ICommand、IOperationStack、ITool主要类库介绍CartopCarto Carto 库包含了为数据显示服务的对象。PageLayout 和 Map对象在这个库中,以及支持各种数据类型的图层,渲染。主要包括 Element、Renderer、Layer、Symbol 的具体实现。AnnotationFeature、BasemapLayer、CacheInfo、CadLayer、FeatureLayer、Graphi
5、cFeature、GroupLayer、Legend、Map、MapDocument、MapImage、MapServer、MosaicLayer、Page、PageLayout、RasterLayer、RelateInfo、TerrainLayer、TinLayer、WCSLayer、WMSLayerCarto库的Map、PageLayout、ElementCarto库的LayerCarto库的Render主要类库介绍ControlpControls控件库包含了应用程序开发中用到的控件,包括在控件中使用的命令和工具。CommandPool、ControlsEditingEditTool、Co
6、ntrolsEditingToolbar、CustomizeDialog、EngineEditor、EngineFeatureSnap、GlobeControl、HookHelper、LicenseControl、MapControl、PageLayoutControl、SceneControl、Snapping、Symbology、TOCControl、ToolbarControl、ToolbarItem、主要类库介绍DisplaypDisplay 显示库包含了支持在输出设备上显示图形的组件,屏幕显示,符号,颜色等都在这个库中定义。BalloonCallout、ScreenDisplay绘图
7、跟踪器:EngineRotateTracker、EnvelopeTracker、字体、颜色:RgbColor、CmykColor点、线、面符号样式:简单符号、图片符号、专题符号制图表达:RepresentationRule、符号库:ServerStyleGallery、ServerStyleGalleryItem主要类库介绍GeometrypGeometry 几何库包含了核心的几何对象,比如点,线,面等。在几何库中还定义和实现了空间参考的对象,包括投影坐标系和几何坐标系。单位:AngularUnit、LinearUnit、几何体:点、多点、线、曲线、圆弧、椭圆弧、多边形、矩形、多面空间参考:D
8、atum、GeographicCoordinateSystem、Projection、ProjectedCoordinateSystem、Spheroid、ITransform2D、ITransform3D、ITransformation、主要类库介绍GeodataBasepGeoDatabase GeoDatabase 包含了所有相关数据组织的定义类型。要素,表,网络,TIN 都在这个库中定义。其中一些类型的实现在各自的数据来源的库中。IArchivableClass、IAttachment、IDataStatistics、IFeature、IFeatureClass、IFeatureCur
9、sor、IFeatureDataset、IFeatureWorkspace、IField、IGeometricNetwork、INetwork、INetworkDataset、IPixelBlock、IQueryFilter、IRaster、IRasterCursor、IRasterDataset、IRelationship、IReplica、ISelectionSet、ISurface、ITin、ITopology、IVersion、主要类库介绍GeodataBasepDataSourcesFile 包含了为支持的矢量数据格式提供的工作空间工厂和工作空间。ICoverageFeatureCl
10、ass、ICadDrawingLayers、IGPLayer、ArcInfoWorkspaceFactory、CadWorkspaceFactory、SDCWorkspaceFactory、ShapefileWorkspaceFactory、TinWorkspaceFactory、VpfWorkspaceFactorypDataSourcesRasterDataSourcesRaster 包含了为基于文件方式的栅格数据提供的工作空间工厂和工作空间。栅格函数、MosaicFunction、PixelBlock、RasterBand、RasterStatistics、RasterWorkspace
11、主要类库介绍GeodataBasepDataSourcesGDB包含了为存储在数据库中的矢量和栅格数据提供的工作空间工厂和工作空间。AccessWorkspaceFactory、FileGDBWorkspaceFactory、SdeWorkspaceFactory、SqlWorkspaceFactorypDataSourcesOleDB为通过 OleDB 方式提供的数据提供空组空间。ExcelWorkspaceFactory、FdoAdoConnection、OLEDBWorkspaceFactory、TextFileWorkspaceFactorypGeoDatabaseDistribute
12、d包含了需要执行的离线编辑的 GeoDatabase 对象。ICheckIn、ICheckOut、IDataChanges、IReplicationAgent、IReplicaDataChangesControl库组件库开发控件pArcGIS Engine 中提供了丰富的开发控件 LicenseControl MapControl PageLayoutControl TOCControl ToolbarControl SymbologyControl GlobeControl SceneControl MapControluMapControl u封装Map coclassu绘制单Data F
13、rameu用来分析和浏览u暴露鼠标和绘制事件u装载地图文档和其它文件u设置当前工具u库uMapControl.ocxMapControl数据的访问 IMapControl3/IPageLayoutControl2uCheckMxFileuLoadMxFileuReadMxMapsu关联map对象事件IMapControlEvents/IPageLayoutControlEventsuOnAfterDraw,OnBeforeScreenDraw,OnAfterScreenDraw,OnExtentUpdated,OnMouseDown/Up/Move,OnKeyDown/Up,OnOleDrop
14、,OnViewRefreshed,OnMap/PageReplacedMapControl对象通过Map你可以访问所有的对象LayersRenderersSymbolsFeatureClassesWorkspaces使用map和layers属性提供直接访问Map和Layer对象的方法属性IMapControl3AddLayerFromFile,AddShapeFile,AddLayer,DeleteLayer,MoveLayerTo,Layer,Map设置地图的可视化区域控制显示的可视区域可以设置多种shapes(geometries)IMapControl3VisibleRegion axM
15、apControl1.VisibleRegion=extent在地图上显示提示可以为图层设置提示步骤1.设置ILayer:ShowTips2.在鼠标移动时显示提示文本使用ToolTip控件来显示提示文本ILayer layer=axMapControl1.get_Layer(0);layer.ShowTips=true;ToolTip tootip1=new ToolTip;tootip1.SetToolTip(axMapControl1,这是一个提示);PageLayoutControl控件uPageLayoutControl u封装PageLayout coclassu绘制地图元素u创建版
16、面视图 u打印u设置当前工具u加载地图文档u库uPageLayoutControl.ocxPageLayoutControl控件使用PageLayout 来访问其它对象Elements(例子代码 MapElements)FrameElementsMapFrameMapSurroundFrameGraphicElementsPictureElements使用elements关于elements有很多高级的成员函数IPageLayoutControlAddElementFindElementByNameLocateFrontElementGraphicsContainer地图上显示查询结果elem
17、ent查询结果的渲染 ISimpleMarkerSymbol simpleMarkerSymbol=new SimpleMarkerSymbolClass();simpleMarkerSymbol.Color=rgb;simpleMarkerSymbol.Size=30;IMarkerElement markerElement=new MarkerElementClass();markerElement.Symbol=simpleMarkerSymbol;element=(IElement)markerElement;element.Geometry=point;graphicsContain
18、er=(IGraphicsContainer)map;graphicsContainer.AddElement(element,0);使用地图文档MXD 文件是结构化的存储文档(保存路径)通常由ArcMap创建包含持久对象Maps,Layers,PageLayout,MapDocument 使以下成为可能读取 mxd,lyr,mxt,and pmf files写新的 mxd files 访问map document的内容 IMapDocument与mxd读取和写地图文档的成员函数Open:打开已经存在的地图文档(mxd,mxt,lyr,pmf)SaveAs:保存当前文档到新的文件CheckMx
19、File:检查mxd是否存在LoadMxFile:加载mxd文档ReadMxMaps:读mxd文档New:新建mxd文档Save:保存mxd文档加载mxdLoadMxFile if(openFileDialog2.ShowDialog()=DialogResult.OK)string FilePath=openFileDialog2.FileName;if(axMapControl1.CheckMxFile(FilePath)axMapControl1.MousePointer=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerH
20、ourglass;axMapControl1.LoadMxFile(FilePath,0,Type.Missing);axMapControl1.MousePointer=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;else MessageBox.Show(FilePath+is not a vaild ArcMap document);return;访问地图文档中的对象控件可以直接引用对象(Map and PageLayout)或访问自己的拷贝Reference直接Copy使用ObjectCopy 避免共享
21、引用深度复制 IMapDocument mapdoc=new MapDocument();axMapControl1.Map=mapdoc.get_Map(0);IObjectCopy objectcopy=new ObjectCopyClass();IPageLayout pagelayout=objectcopy.Copy(mapdoc.PageLayout)as IPageLayout;框架控件ToolbarControl 和 TOCControl 被设计成和其它控件协同工作 通过一个buddy控件自动捆绑在一起根据彼此的状态通信和同步例子:active tool,layer visib
22、ilityBuddy ControlToolbarTOC命令和工具提供超过 100 个工具和命令TocControl显示所有的图层和符号Simple symbols,renderersGroup layers控制图层可视性必须调用SetBuddyControl库TOCControl.ocxToolbarControl自定义 commands,tools 和 menus的容器允许命令和以下控件对象进行交互Map,PageLayout,Scene,和 Globe必须调用 SetBuddyControl库ToolbarControl.ocx制图控件命令系统提供的控件命令,工具,工具条,和菜单命令和工
23、具漫游,缩放,打开地图,图形绘制,工具条要素选择,绘图,地图导航,和 pagelayout 菜单要素选择和地图浏览库 esriCommandControls.olb参考对象模型图或技术文档 创建第一个ArcGIS Engeine应用程序创建一个控件应用程序使用控件成员使用工具条和TOC控件加载 MXD 文档保存mxd文档打开shp开发环境pCOM Visual Studio 6.0(VB、VC+)、DelphiArcGIS Engine 10 不再支持 VB 6.0p.NETVisual Studio.NET(VB.NET、C#、VC+.NET)ArcGIS Engine 10.1 不支持VS
24、2008pC+Visual Studio 6.0、Borland C+Builder、C+pJavaJBuilder、Eclipse、JDK开发环境安装VS2012安装ArcGIS SDK Developer Kit&ArcGIS Engine许可授权创建第一个ArcGIS Engine应用程序模板新建MapControl工程创建第一个ArcGIS Engine应用程序模板创建第一个ArcGIS Engine应用程序模板增加一个菜单功能创建自定义应用程序创建自定义应用程序添加控件创建自定义应用程序为toolbar添加工具控件绑定将toolbar和mapcontrol绑定注意:许可绑定 if(!
25、RuntimeManager.Bind(ProductCode.Engine)if(!RuntimeManager.Bind(ProductCode.Desktop)MessageBox.Show(Unable to bind to ArcGIS runtime.Application will be shut down.);return;打开mxdif(openFileDialog2.ShowDialog()=DialogResult.OK)string FilePath=openFileDialog2.FileName;if(axMapControl1.CheckMxFile(FilePa
26、th)axMapControl1.MousePointer=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(FilePath,0,Type.Missing);axMapControl1.MousePointer=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;else MessageBox.Show(FilePath+is not a vaild ArcMap document)
27、;return;打开shp打开shp/axMapControl1.Map.ClearLayers();IWorkspaceFactory pWorkspaceFactory;IFeatureWorkspace pFeatureWorkspace;IFeatureLayer pFeatureLayer;this.openFileDialog1.Filter=shp文件|*.shp;if(this.openFileDialog1.ShowDialog()=DialogResult.OK)this.textBox1.Text=this.openFileDialog1.FileName.ToStrin
28、g();string strFullPath=openFileDialog1.FileName;if(strFullPath=)return;int Index=strFullPath.LastIndexOf();string filePath=strFullPath.Substring(0,Index);string fileName=strFullPath.Substring(Index+1);/打开工作空间并添加shp文件 pWorkspaceFactory=new ShapefileWorkspaceFactoryClass();/创建工作空间 pFeatureWorkspace=(I
29、FeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath,0);/打开矢量数据所在的空间 pFeatureLayer=new FeatureLayerClass();/创建一个要素图层 pFeatureLayer.FeatureClass=pFeatureWorkspace.OpenFeatureClass(fileName);/将要素类加如到要素图层 pFeatureLayer.Name=pFeatureLayer.FeatureClass.AliasName;/将要素类的名称赋值给要素图层 axMapControl1.Map.AddL
30、ayer(pFeatureLayer);/将图层加到地图控件 axMapControl1.ActiveView.Refresh();/刷新地图保存mxd IMapDocument mapDoc4=new MapDocumentClass();mapDoc4.New(F:/teuu5.mxd);IMxdContents mxdContents=axMapControl1.Map as IMxdContents;mapDoc4.ReplaceContents(mxdContents);mapDoc4.Save(false,true);mapDoc4.Close();练习DEMO打开数据源打开gdb
31、IWorkspaceFactory workspaceFactory=new FileGDBWorkspaceFactoryClass();workspace=workspaceFactory.OpenFromFile(“D:/data.gdb”,0);IFeatureWorkspace pFeatWorkspace=workspace as IFeatureWorkspace;IFeatureClass pFeatureClass=pFeatWorkspace.OpenFeatureClass(Water)打开sdeIPropertySet propertySet=new PropertyS
32、etClass();propertySet.SetProperty(SERVER,server);propertySet.SetProperty(INSTANCE,instance);propertySet.SetProperty(DATABASE,database);propertySet.SetProperty(USER,user);propertySet.SetProperty(PASSWORD,password);propertySet.SetProperty(VERSION,version);IWorkspaceFactory workspaceFactory=new SdeWork
33、spaceFactoryClass();workspace=workspaceFactory.Open(propertySet,0);属性查询ILayer layer=axMapControl1.get_Layer(0);IFeatureLayer featureLayer=layer as IFeatureLayer;/获取featureLayer的featureClass IFeatureClass featureClass=featureLayer.FeatureClass;IQueryFilter queryFilter=new QueryFilterClass();IFeatureC
34、ursor featureCusor;string filter=DLMC=旱地;queryFilter.WhereClause=filter;featureCusor=featureClass.Search(queryFilter,true);if(featureCusor!=null)IFeature fea=featureCusor.NextFeature();while(fea!=null)if(featureCusor=null)return;IGeometry geom=fea.Shape;IPolygon polygon=geom as IPolygon;Common.rende
35、rPolygon(polygon,axMapControl1.ActiveView,axMapControl1.Map);fea=featureCusor.NextFeature();查询所有旱地绘制多边形IFillShapeElement pPolygonElement;ISimpleFillSymbol pSimpleFillSymbol=new SimpleFillSymbolClass();IPolygon pPolygon=new PolygonClass();IRubberBand pRubberBand=new RubberPolygonClass();ISimpleLineSy
36、mbol pSimpleLineSymbol=new SimpleLineSymbolClass();pPolygonElement=new PolygonElementClass();if(e.button=1)pPolygon=(IPolygon)pRubberBand.TrackNew(axMapControl1.ActiveView.ScreenDisplay,null);pSimpleLineSymbol.Width=2;pSimpleLineSymbol.Style=esriSimpleLineStyle.esriSLSSolid;pSimpleLineSymbol.Color=C
37、ommon.GetRGBColor(46,24,63);pSimpleFillSymbol.Color=Common.GetRGBColor(11,200,145);pSimpleFillSymbol.Outline=pSimpleLineSymbol;IElement pElement=(IElement)pPolygonElement;pElement.Geometry=pPolygon;pPolygonElement.Symbol=pSimpleFillSymbol;IGraphicsContainer pGraphicsContainer=(IGraphicsContainer)axM
38、apControl1.Map;pGraphicsContainer.AddElement(IElement)pPolygonElement,0);axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);地图点击绘制多边形,并渲染空间查询ISpatialFilter spatialFilter=new SpatialFilter();spatialFilter.Geometry=pPolygon;spatialFilter.GeometryField=SHAPE;spatialFi
39、lter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;IFeatureLayer featureLayer=axMapControl1.get_Layer(0)as IFeatureLayer;IFeatureClass feaClass=featureLayer.FeatureClass;IFeatureCursor featureCursor=feaClass.Search(spatialFilter,false);IFeature feature=featureCursor.NextFeature();while(feature!=null)axMapControl1.Map.SelectFeature(featureLayer,feature);feature=featureCursor.NextFeature();根据上一步骤的多边形做相交查询,查询与多边形相交的地块,并高亮出图pActiveView.Output(g.GetHdc().ToInt32(),dpi,ref rect,pEnvelope,null);ArcGIS Resources Center:Esri中国社区: Online:http:/ http:/ http:/ ArcGIS.com http:/
限制150内