




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論