




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GIS设计与应用GIS设计之AE开发本章内容1.AE是什么?2.AE的功能3.AE开发步骤AE是什么?ArcGISEngine是用于构建定制应用的一个完整的嵌入式的GIS组件库。在ArcGISEngine里面包含着两个局部:ArcGISEngine开发包〔Developerkit〕――被开发者用来构建客户化应用程序ArcGISEngine运行时〔Runtime〕――使得最终用户能在他们的计算机里运行包括ArcGISEngine组件的应用程序AE的功能包装了AO的绝大局部功能,是ArcGIS推荐的首选二次开发平台。AE开发步骤1.用AE术语对问题进行描述和定义,合理地将大任务合理划分为一些子任务;2.理解AE的层次组织关系,标识和明确各子任务的关键字;3.决定在什么地方来编写代码,是VBA呢,还是VB或其它工具;4.根据标识的关键字在AEDeveloperhelp和其它开发资源中搜索有没有相关例如代码。5.翻开正确的对象模型图〔OMD〕,寻找所需要的类、接口。6.在AEComponentHelp中浏览有关接口的详细说明及相关文档;7.在开发环境中使用确定的接口及其方法属性等,完成代码实现。主要Library介绍SystemSystem库是ArcGIS框架中最底层的一个库,它包含了一些被其他库使用的一些组件。SystemUISystemUI库定义了一些在ArcGIS中被用户界面组件使用的类型。象Icommand和Itool这样的接口就在这里定义。主要Library介绍Geometry几何库包含了核心的几何对象,比方点,面,线等。在几何库中还定义和实现了空间参考的对象,包括投影坐标系和几何坐标系。Display显示库包含了支持在输出设备上显示图形的组件,屏幕显示,符号,颜色等都在这个库中定义。Controls控件库包含了应用程序开发中用到的控件,包括在控件中使用的命令和工具。Geometry主要对几何对象的处理,重要的几何对象包括Point,MultiPoint,PolyLine,PolyGon,还有Segment,Path和Ring。所有这些几何对象都有Z,M和IDs属性值,并且支持Buffer,Clip的操作。
CartoCarto库包含了为数据显示效劳的对象。PageLayout和Map对象在这个库中,以及支持各种数据类型的图层,渲染。这个库中也包括了MxdServer和MapServer对象,它们通常被Server用来显示地图数据。GeoDatabaseGeoDatabase包含了所有相关数据组织的定义类型。要素,表,网络,TIN都在这个库中定义。其中一些类型的实现在各自的数据来源的库中。DataSourcesFileDataSourcesFile库包含了为支持的矢量数据格式提供的工作空间工厂和工作空间.DataSourcesGDBDataSourcesGDB库包含了为存储在RDBMS中的矢量和栅格数据提供的工作空间工厂和工作空间。GeoDatabaseDistributedGeoDatabaseDistributed库包含了需要执行checkout/checkin的离线GeoDatabase的对象。DataSourcesOleDBDataSourcesOleDB库为通过OleDB方式提供的数据提供空组空间。DataSourcesRasterDataSourcesRaster包含了为基于文件方式的栅格数据提供的工作空间工厂和工作空间GISClientGISClient库包含了作用于远程GIS效劳的对象。这些远程效劳可以有ArcGISServer和ArcIMS提供。Server库包含了连接ArcGISServer的对象,以及管理这个连接的对象。GeoAnalystGeoAnalyst库包含了核心的空间分析功能,这些功能是在spatialAnalyst和3DAnalyst扩展都会用到的功能。3DAnalyst3DAnalyst库包含了数据的3d分析对象,也包括显示3d数据,在这个库中有一个控件SceneControl可用。GlobeCoreGlobeCore库包含了globe数据分析的对象,也包含了显示globe数据,在这个库中有一个控件GlobeControl可用。SpatialAnalystSpatialAnalyst库包含了在栅格和矢量数据上执行空间分析的对象。AE开发实例——二维开发实现功能:1.实现地图控件的显示2.实现局部AE组件的调用3.实现地图中要素的查询实现步骤:一、界面简单设计1新建工程一、界面简单设计2.添加菜单使用.Net的mainmenu控件一、界面简单设计3.拖拽ArcEngine的3个控件到Form界面上LicenseControl〔最好最先放在前面〕、ToolBarControl、MapControl依次放在界面上,如下图:一、界面简单设计4.把TabControl控件拖到界面适当位置:一、界面简单设计5.在数据视图中放置MapControl,布局视图中放置PageLayoutControl:二、设置控件属性6.设置ToolBarControl的属性1)选择Buddy选项为axMapControl22)选择PreviewinDesignMode复选框,如右上图。3)Items选项卡中点击Add按钮,添加一些ArcGIS控件到工具栏上,如右以下图。二、设置控件属性7.设置TocControl的属性在buddy处选择axMapControl2选择PreviewinDesignMode复选框二、设置控件属性10.设置控件锚位置选择每一个控件的Anchor属性,设置控件所在位置,特别是窗口最大化后应向何方向延伸,比方ToolBarControl是top、left、right属性。二、设置控件属性9.运行可以看到没有写一行代码即可以使用工具条上按钮翻开并浏览地图,最大化窗口查看是否正常缩放控件并调整。三、添加代码10.添加加载地图文档的代码在Form_Load中添加如下代码〔可参考例如程序Exa_1_BasicQuery〕:try{stringstrFileName=Application.StartupPath+@"\数据\房地产筹划信息系统.mxd";//在数据视图中加载地图,供查询操作if(axMapControl2.CheckMxFile(strFileName)){axMapControl2.LoadMxFile(strFileName);}else{MessageBox.Show("错误的数据路径:"+strFileName);}
//在布局视图中加载地图,供打印使用
if(axPageLayoutControl1.CheckMxFile(strFileName)){axPageLayoutControl1.LoadMxFile(strFileName);}else{
MessageBox.Show("错误的数据路径:"+strFileName);}}
catch(Exceptionex){MessageBox.Show("Error01inForm1.cs"+ex.Message);}四、实现查询功能11.添加窗体frmInputQueryInfo设计界面进行查询,如下图:四、实现查询功能12.对frmInputQueryInfo添加代码1.按钮处进行隐藏窗体操作2.添加返回私有字段textbox1值的方法getQueryKey,如下所示:
privatevoidbtnQuery_Click(objectsender,EventArgse){
this.Hide();}
//自定义方法,获取查询的关键字
publicstringgetQueryKey(){returntextBox1.Text;}四、实现查询功能在查询菜单项的单击事件处理中添加如下代码,代码说明参考注释:
//查询
privatevoidmenuItem3_Click(objectsender,EventArgse){frmInputQueryInfomyQueryInfo=newfrmInputQueryInfo();myQueryInfo.ShowDialog();
//获取线路名
stringstrBusLineName=myQueryInfo.getQueryKey();
//开始显示该线路:
//找到图层
IFeatureLayerpFeatureLayer=axMapControl2.get_Layer(1)asIFeatureLayer;//确定图层为第2个图层,ArcMap中从上向下数
//找到要素Feature
IQueryFilterpQueryFilter=newQueryFilter();//查询过滤条件
pQueryFilter.WhereClause="[BusLineName]='"+strBusLineName+"'";
IFeatureCursorpFeatureCur=pFeatureLayer.Search(pQueryFilter,false);
IFeaturepFeature=null;pFeature=pFeatureCur.NextFeature();if(null==pFeature)return;//在这里判断是否Search到,因为pFeatureCur没有查找到结果也不为空。//设定显示区域为要素的大小
IEnvelopepEnvelope;pEnvelope=pFeature.Shape.Envelope;axMapControl2.Extent=pEnvelope;axMapControl2.ActiveView.Refresh();Application.DoEvents();
//开始闪烁axMapControl2.FlashShape(pFeature.Shape,3,800,null);}小结运行此程序,输入“38路”或“336路”即可实现对应公交线路的闪烁。至此,实现了一个简单的二维查询,查询处的代码〔幻灯片上一页〕是一个经典并且常用的例如代码,请注意分析。五、添加功能13.添加数据表格1.在frmInputQueryInfo添加DataGridView控件.2.在代码中添加A访问数据库的代码。//在
Form构造函数中添加如下代码:try{
//在构造函数中初始化成员变量
myCon=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+Application.StartupPath+"\\数据\\REALESTATEGDB.mdb");myCon.Open();
stringsql;sql="SelectBusLineName,BusLineType,otherfromBusLine";myAda=newOleDbDataAdapter(sql,myCon);mySet=newDataSet();myCmd=newOleDbCommand(sql,myCon);myAda.SelectCommand=myCmd;myCbd=newOleDbCommandBuilder(myAda);}
catch(Exceptionex){MessageBox.Show(ex.ToString());}
finally{myCon.Close();}
privatevoidfrmInputQueryInfo_Load(objectsender,EventArgse){
try{myAda.Fill(mySet,"BusLine");dataGridView1.DataSource=mySet.Tables["BusLine"];
//ResizetheDataGridViewcolumnstofitthenewlyloadedcontent.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);}
catch(Exceptionex){MessageBox.Show(ex.Message);}}//在
文本框控件输入change事件中添加如下代码:privatevoidtextBox1_TextChanged(objectsender,EventArgse){
try{myCon.Open();stringsql;sql="SelectBusLineName,BusLineType,otherfromBusLinewhereBusLineNamelike'%"+textBox1.Text+"%'";myAda=newOleDbDataAdapter(sql,myCon);myTab=newDataTable();myAda.Fill(myTab);dataGridView1.DataSource=myTab;
//ResizetheDataGridViewcolumnstofitthenewlyloadedcontent.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);}
catch(OleDbExceptionex){MessageBox.Show(ex.Message.ToString());}
finally{myCon.Close();}}运行界面如下所示:14.当数据视图或布局视图中地图文档发生改变后做相应处理:在Form1.cs文件中添加如下代码://当数据视图文档发生变化后,把文档加载到鹰眼视图的地图控件axMapControl1中
privatevoidaxMapControl2_OnMapReplaced(objectsender,IMapControlEvents2_OnMapReplacedEvente){
//加载地图文档到MapControl中
axMapControl1.LoadMxFile(axMapControl2.DocumentFilename,null,null);
//设置MapControl显示范围至数据的全局范围
axMapControl1.Extent=axMapControl1.FullExtent;}//当布局视图文档发生变化后,把文档加载到鹰眼视图的地图控件axMapControl1中
privatevoidaxPageLayoutControl1_OnPageLayoutReplaced(objectsender,IPageLayoutControlEvents_OnPageLayoutReplacedEvente){
//加载地图文档到MapControl中
axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,
null,null);
//设置MapControl显示范围至数据的全局范围
axMapControl1.Extent=axMapControl1.FullExtent;}15鹰眼视图功能的实现参考《ArcGISEngine开发实例讲解》〔pdf文档〕(九)在MapControl上绘制图形15.1为Form1类添加成员变量——私有字段
namespaceExp_6_mg{publicpartialclassForm1:Form{
//自定义私有成员变量
privateIToolbarMenum_ToolbarMenu=newToolbarMenuClass();//弹出式菜单
privateIEnvelopem_Envelope;//MapControl绘制的范围
privateobjectm_FillSymbol;//在MapControl上绘制范围使用的符号
privateITransformEvents_VisibleBoundsUpdatedEventHandlervisBoundsUpdatedE;//PageLayoutControl的焦点图事件
publicForm1(){InitializeComponent();}15.2创立一个叫CreateOverviewSymbol的新函数:privatevoidCreateOverviewSymbol(){
//获取IRGBColor接口
IRgbColorcolor=newRgbColor();
//设置颜色属性color.RGB=255;//获取ILine符号接口
ILineSymboloutline=newSimpleLineSymbol();
//设置线符号属性outline.Width=1.5;outline.Color=color;//获取IFillSymbol接口
ISimpleFillSymbolsimpleFillSymbol=newSimpleFillSymbolClass();
//设置填充符号属性simpleFillSymbol.Outline=outline;simpleFillSymbol.Style=esriSimpleFillStyle.esriSFSHollow;m_FillSymbol=simpleFillSymbol;}15.3.在Form1_Load事件函数中调用CreateOverviewSymbol函数。catch(Exceptionex){MessageBox.Show("Error01inForm1.cs"+ex.Message);}//以上是加载文档的代码//创立MapControl使用的符号,即鹰眼视图的矩形范围框CreateOverviewSymbol();15.4增加以下OnVisibleBoundsUpdated函数
//OnVisibleBoundsUpdated函数。//此函数将与地图范围改变时触发的事件相连接,并用来设置新的地图可见边界范围框。通过刷新MapControl,你强制它重绘其上显示的图形。
privatevoidOnVisibleBoundsUpdated(IDisplayTransformationsender,boolsizeChanged){
//设置新的可见范围m_Envelope=sender.VisibleBounds;//改变MapControl的前景状态axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground,null,null);}15.5在PageLayoutControl_OnPageLayoutReplaced事件处理中的加载文档代码前面增加以下代码。//PageLayoutControl默认的事件接口是IPageLayoutControlEvents。这些事件不告诉我们数据边框内的地图范围。//为此你需要使用PageLayoutControl的焦点地图的ItransformEvents接口。//在PageLayoutControl_OnPageLayoutReplaced事件处理中的加载文档代码前面增加获取焦点图的范围的代码。//当布局视图文档发生变化后,把文档加载到鹰眼视图的地图控件axMapControl1中
privatevoidaxPageLayoutControl1_OnPageLayoutReplaced(objectsender,IPageLayoutControlEvents_OnPageLayoutReplacedEvente){
//获取PageLayoutControl中焦点地图的IActiveView对象
IActiveViewactiveView=(IActiveView)axPageLayoutControl1.ActiveView.FocusMap;
//捕捉PageLayoutControl的焦点图的ITransformEvents事件visBoundsUpdatedE=newITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);((ITransformEvents_Event)activeView.ScreenDisplay.DisplayTransformation).VisibleBoundsUpdated+=visBoundsUpdatedE;
//获取焦点图的范围m_Envelope=activeView.Extent;//后面是加载地图文档的代码15.6在设计模式下显示窗体并附属性窗中选择axMapControl1,显示axMapControl事件。双击OnAfterDraw向代码窗口中增加事件处理。15.7向axMapControl1_OnAfterDraw事件处理中增加以下代码,使用前面创立的符号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通投资AI应用行业深度调研及发展项目商业计划书
- 环保塑料回收技术企业制定与实施新质生产力项目商业计划书
- 高温高压环境作业辅助机器人行业跨境出海项目商业计划书
- 高端定制男士衬衫品牌行业深度调研及发展项目商业计划书
- 农林牧渔业产品流通服务行业跨境出海项目商业计划书
- 消费者需求多样化研究-洞察阐释
- 邮政储蓄AI应用行业跨境出海项目商业计划书
- 至阴穴传统手工艺的现代化转型-洞察阐释
- 数据科学中的组合优化方法-洞察阐释
- 基于敏捷开发的团队协作研究-洞察阐释
- 货物实时监控系统行业跨境出海项目商业计划书
- 2024年吐鲁番市高昌区招聘社区工作者笔试真题
- 糖尿病中医健康教育讲座
- 地《巴西》第一课时教学设计-2024-2025学年七年级地理下册(人教版2024)
- 27万吨年丙烯腈项目初步设计说明书
- 装配式建筑概论课件:BIM技术在装配式建筑中的应用
- 2023-2024学年上海市宝山区八年级(下)期末数学试卷 (含答案)
- 2025年高考作文预测范文10篇
- 四川省九师联盟2025届高三仿真模拟卷物理试卷及答案(HG)
- 乙状结肠癌试题及答案
- 禁毒工作面试题及答案
评论
0/150
提交评论