GIS設(shè)計之AE開發(fā)初步_第1頁
GIS設(shè)計之AE開發(fā)初步_第2頁
GIS設(shè)計之AE開發(fā)初步_第3頁
GIS設(shè)計之AE開發(fā)初步_第4頁
GIS設(shè)計之AE開發(fā)初步_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

GIS設(shè)計與應用GIS設(shè)計之AE開發(fā)本章內(nèi)容1.AE是什么?2.AE的功能3.AE開發(fā)步驟AE是什么?ArcGISEngine是用于構(gòu)建定制應用的一個完整的嵌入式的GIS組件庫。在ArcGISEngine里面包含著兩個局部:ArcGISEngine開發(fā)包〔Developerkit〕――被開發(fā)者用來構(gòu)建客戶化應用程序ArcGISEngine運行時〔Runtime〕――使得最終用戶能在他們的計算機里運行包括ArcGISEngine組件的應用程序AE的功能包裝了AO的絕大局部功能,是ArcGIS推薦的首選二次開發(fā)平臺。AE開發(fā)步驟1.用AE術(shù)語對問題進行描述和定義,合理地將大任務合理劃分為一些子任務;2.理解AE的層次組織關(guān)系,標識和明確各子任務的關(guān)鍵字;3.決定在什么地方來編寫代碼,是VBA呢,還是VB或其它工具;4.根據(jù)標識的關(guān)鍵字在AEDeveloperhelp和其它開發(fā)資源中搜索有沒有相關(guān)例如代碼。5.翻開正確的對象模型圖〔OMD〕,尋找所需要的類、接口。6.在AEComponentHelp中瀏覽有關(guān)接口的詳細說明及相關(guān)文檔;7.在開發(fā)環(huán)境中使用確定的接口及其方法屬性等,完成代碼實現(xiàn)。主要Library介紹SystemSystem庫是ArcGIS框架中最底層的一個庫,它包含了一些被其他庫使用的一些組件。SystemUISystemUI庫定義了一些在ArcGIS中被用戶界面組件使用的類型。象Icommand和Itool這樣的接口就在這里定義。主要Library介紹Geometry幾何庫包含了核心的幾何對象,比方點,面,線等。在幾何庫中還定義和實現(xiàn)了空間參考的對象,包括投影坐標系和幾何坐標系。Display顯示庫包含了支持在輸出設(shè)備上顯示圖形的組件,屏幕顯示,符號,顏色等都在這個庫中定義。Controls控件庫包含了應用程序開發(fā)中用到的控件,包括在控件中使用的命令和工具。Geometry主要對幾何對象的處理,重要的幾何對象包括Point,MultiPoint,PolyLine,PolyGon,還有Segment,Path和Ring。所有這些幾何對象都有Z,M和IDs屬性值,并且支持Buffer,Clip的操作。

CartoCarto庫包含了為數(shù)據(jù)顯示效勞的對象。PageLayout和Map對象在這個庫中,以及支持各種數(shù)據(jù)類型的圖層,渲染。這個庫中也包括了MxdServer和MapServer對象,它們通常被Server用來顯示地圖數(shù)據(jù)。GeoDatabaseGeoDatabase包含了所有相關(guān)數(shù)據(jù)組織的定義類型。要素,表,網(wǎng)絡(luò),TIN都在這個庫中定義。其中一些類型的實現(xiàn)在各自的數(shù)據(jù)來源的庫中。DataSourcesFileDataSourcesFile庫包含了為支持的矢量數(shù)據(jù)格式提供的工作空間工廠和工作空間.DataSourcesGDBDataSourcesGDB庫包含了為存儲在RDBMS中的矢量和柵格數(shù)據(jù)提供的工作空間工廠和工作空間。GeoDatabaseDistributedGeoDatabaseDistributed庫包含了需要執(zhí)行checkout/checkin的離線GeoDatabase的對象。DataSourcesOleDBDataSourcesOleDB庫為通過OleDB方式提供的數(shù)據(jù)提供空組空間。DataSourcesRasterDataSourcesRaster包含了為基于文件方式的柵格數(shù)據(jù)提供的工作空間工廠和工作空間GISClientGISClient庫包含了作用于遠程GIS效勞的對象。這些遠程效勞可以有ArcGISServer和ArcIMS提供。Server庫包含了連接ArcGISServer的對象,以及管理這個連接的對象。GeoAnalystGeoAnalyst庫包含了核心的空間分析功能,這些功能是在spatialAnalyst和3DAnalyst擴展都會用到的功能。3DAnalyst3DAnalyst庫包含了數(shù)據(jù)的3d分析對象,也包括顯示3d數(shù)據(jù),在這個庫中有一個控件SceneControl可用。GlobeCoreGlobeCore庫包含了globe數(shù)據(jù)分析的對象,也包含了顯示globe數(shù)據(jù),在這個庫中有一個控件GlobeControl可用。SpatialAnalystSpatialAnalyst庫包含了在柵格和矢量數(shù)據(jù)上執(zhí)行空間分析的對象。AE開發(fā)實例——二維開發(fā)實現(xiàn)功能:1.實現(xiàn)地圖控件的顯示2.實現(xiàn)局部AE組件的調(diào)用3.實現(xiàn)地圖中要素的查詢實現(xiàn)步驟:一、界面簡單設(shè)計1新建工程一、界面簡單設(shè)計2.添加菜單使用.Net的mainmenu控件一、界面簡單設(shè)計3.拖拽ArcEngine的3個控件到Form界面上LicenseControl〔最好最先放在前面〕、ToolBarControl、MapControl依次放在界面上,如下圖:一、界面簡單設(shè)計4.把TabControl控件拖到界面適當位置:一、界面簡單設(shè)計5.在數(shù)據(jù)視圖中放置MapControl,布局視圖中放置PageLayoutControl:二、設(shè)置控件屬性6.設(shè)置ToolBarControl的屬性1)選擇Buddy選項為axMapControl22)選擇PreviewinDesignMode復選框,如右上圖。3)Items選項卡中點擊Add按鈕,添加一些ArcGIS控件到工具欄上,如右以下圖。二、設(shè)置控件屬性7.設(shè)置TocControl的屬性在buddy處選擇axMapControl2選擇PreviewinDesignMode復選框二、設(shè)置控件屬性10.設(shè)置控件錨位置選擇每一個控件的Anchor屬性,設(shè)置控件所在位置,特別是窗口最大化后應向何方向延伸,比方ToolBarControl是top、left、right屬性。二、設(shè)置控件屬性9.運行可以看到?jīng)]有寫一行代碼即可以使用工具條上按鈕翻開并瀏覽地圖,最大化窗口查看是否正??s放控件并調(diào)整。三、添加代碼10.添加加載地圖文檔的代碼在Form_Load中添加如下代碼〔可參考例如程序Exa_1_BasicQuery〕:try{stringstrFileName=Application.StartupPath+@"\數(shù)據(jù)\房地產(chǎn)籌劃信息系統(tǒng).mxd";//在數(shù)據(jù)視圖中加載地圖,供查詢操作if(axMapControl2.CheckMxFile(strFileName)){axMapControl2.LoadMxFile(strFileName);}else{MessageBox.Show("錯誤的數(shù)據(jù)路徑:"+strFileName);}

//在布局視圖中加載地圖,供打印使用

if(axPageLayoutControl1.CheckMxFile(strFileName)){axPageLayoutControl1.LoadMxFile(strFileName);}else{

MessageBox.Show("錯誤的數(shù)據(jù)路徑:"+strFileName);}}

catch(Exceptionex){MessageBox.Show("Error01inForm1.cs"+ex.Message);}四、實現(xiàn)查詢功能11.添加窗體frmInputQueryInfo設(shè)計界面進行查詢,如下圖:四、實現(xiàn)查詢功能12.對frmInputQueryInfo添加代碼1.按鈕處進行隱藏窗體操作2.添加返回私有字段textbox1值的方法getQueryKey,如下所示:

privatevoidbtnQuery_Click(objectsender,EventArgse){

this.Hide();}

//自定義方法,獲取查詢的關(guān)鍵字

publicstringgetQueryKey(){returntextBox1.Text;}四、實現(xiàn)查詢功能在查詢菜單項的單擊事件處理中添加如下代碼,代碼說明參考注釋:

//查詢

privatevoidmenuItem3_Click(objectsender,EventArgse){frmInputQueryInfomyQueryInfo=newfrmInputQueryInfo();myQueryInfo.ShowDialog();

//獲取線路名

stringstrBusLineName=myQueryInfo.getQueryKey();

//開始顯示該線路:

//找到圖層

IFeatureLayerpFeatureLayer=axMapControl2.get_Layer(1)asIFeatureLayer;//確定圖層為第2個圖層,ArcMap中從上向下數(shù)

//找到要素Feature

IQueryFilterpQueryFilter=newQueryFilter();//查詢過濾條件

pQueryFilter.WhereClause="[BusLineName]='"+strBusLineName+"'";

IFeatureCursorpFeatureCur=pFeatureLayer.Search(pQueryFilter,false);

IFeaturepFeature=null;pFeature=pFeatureCur.NextFeature();if(null==pFeature)return;//在這里判斷是否Search到,因為pFeatureCur沒有查找到結(jié)果也不為空。//設(shè)定顯示區(qū)域為要素的大小

IEnvelopepEnvelope;pEnvelope=pFeature.Shape.Envelope;axMapControl2.Extent=pEnvelope;axMapControl2.ActiveView.Refresh();Application.DoEvents();

//開始閃爍axMapControl2.FlashShape(pFeature.Shape,3,800,null);}小結(jié)運行此程序,輸入“38路”或“336路”即可實現(xiàn)對應公交線路的閃爍。至此,實現(xiàn)了一個簡單的二維查詢,查詢處的代碼〔幻燈片上一頁〕是一個經(jīng)典并且常用的例如代碼,請注意分析。五、添加功能13.添加數(shù)據(jù)表格1.在frmInputQueryInfo添加DataGridView控件.2.在代碼中添加A訪問數(shù)據(jù)庫的代碼。//在

Form構(gòu)造函數(shù)中添加如下代碼:try{

//在構(gòu)造函數(shù)中初始化成員變量

myCon=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+Application.StartupPath+"\\數(shù)據(jù)\\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.當數(shù)據(jù)視圖或布局視圖中地圖文檔發(fā)生改變后做相應處理:在Form1.cs文件中添加如下代碼://當數(shù)據(jù)視圖文檔發(fā)生變化后,把文檔加載到鷹眼視圖的地圖控件axMapControl1中

privatevoidaxMapControl2_OnMapReplaced(objectsender,IMapControlEvents2_OnMapReplacedEvente){

//加載地圖文檔到MapControl中

axMapControl1.LoadMxFile(axMapControl2.DocumentFilename,null,null);

//設(shè)置MapControl顯示范圍至數(shù)據(jù)的全局范圍

axMapControl1.Extent=axMapControl1.FullExtent;}//當布局視圖文檔發(fā)生變化后,把文檔加載到鷹眼視圖的地圖控件axMapControl1中

privatevoidaxPageLayoutControl1_OnPageLayoutReplaced(objectsender,IPageLayoutControlEvents_OnPageLayoutReplacedEvente){

//加載地圖文檔到MapControl中

axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,

null,null);

//設(shè)置MapControl顯示范圍至數(shù)據(jù)的全局范圍

axMapControl1.Extent=axMapControl1.FullExtent;}15鷹眼視圖功能的實現(xiàn)參考《ArcGISEngine開發(fā)實例講解》〔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創(chuàng)立一個叫CreateOverviewSymbol的新函數(shù):privatevoidCreateOverviewSymbol(){

//獲取IRGBColor接口

IRgbColorcolor=newRgbColor();

//設(shè)置顏色屬性color.RGB=255;//獲取ILine符號接口

ILineSymboloutline=newSimpleLineSymbol();

//設(shè)置線符號屬性outline.Width=1.5;outline.Color=color;//獲取IFillSymbol接口

ISimpleFillSymbolsimpleFillSymbol=newSimpleFillSymbolClass();

//設(shè)置填充符號屬性simpleFillSymbol.Outline=outline;simpleFillSymbol.Style=esriSimpleFillStyle.esriSFSHollow;m_FillSymbol=simpleFillSymbol;}15.3.在Form1_Load事件函數(shù)中調(diào)用CreateOverviewSymbol函數(shù)。catch(Exceptionex){MessageBox.Show("Error01inForm1.cs"+ex.Message);}//以上是加載文檔的代碼//創(chuàng)立MapControl使用的符號,即鷹眼視圖的矩形范圍框CreateOverviewSymbol();15.4增加以下OnVisibleBoundsUpdated函數(shù)

//OnVisibleBoundsUpdated函數(shù)。//此函數(shù)將與地圖范圍改變時觸發(fā)的事件相連接,并用來設(shè)置新的地圖可見邊界范圍框。通過刷新MapControl,你強制它重繪其上顯示的圖形。

privatevoidOnVisibleBoundsUpdated(IDisplayTransformationsender,boolsizeChanged){

//設(shè)置新的可見范圍m_Envelope=sender.VisibleBounds;//改變MapControl的前景狀態(tài)axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground,null,null);}15.5在PageLayoutControl_OnPageLayoutReplaced事件處理中的加載文檔代碼前面增加以下代碼。//PageLayoutControl默認的事件接口是IPageLayoutControlEvents。這些事件不告訴我們數(shù)據(jù)邊框內(nèi)的地圖范圍。//為此你需要使用PageLayoutControl的焦點地圖的ItransformEvents接口。//在PageLayoutControl_OnPageLayoutReplaced事件處理中的加載文檔代碼前面增加獲取焦點圖的范圍的代碼。//當布局視圖文檔發(fā)生變化后,把文檔加載到鷹眼視圖的地圖控件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在設(shè)計模式下顯示窗體并附屬性窗中選擇axMapControl1,顯示axMapControl事件。雙擊OnAfterDraw向代碼窗口中增加事件處理。15.7向axMapControl1_OnAfterDraw事件處理中增加以下代碼,使用前面創(chuàng)立的符號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論