GIS二次開發(fā)綜合實(shí)習(xí)_第1頁
GIS二次開發(fā)綜合實(shí)習(xí)_第2頁
GIS二次開發(fā)綜合實(shí)習(xí)_第3頁
GIS二次開發(fā)綜合實(shí)習(xí)_第4頁
GIS二次開發(fā)綜合實(shí)習(xí)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

試驗(yàn)一ArcGISEngine控件使用試驗(yàn)?zāi)繕?biāo)使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四個(gè)控件建立起基本桌面GIS應(yīng)用程序框架。試驗(yàn)步驟1.新建項(xiàng)目開啟VisualStudio,選擇“文件|新建|項(xiàng)目”,在項(xiàng)目類型中選擇VisualC#,再選擇Windows應(yīng)用程序模板,輸入名稱“GISControlDemo”,點(diǎn)擊確定。在處理方案管理器中將“Form1.cs”重命名為“GISControlForm.cs”,在設(shè)計(jì)視圖中,選中窗體,將其屬性中“Text”改為“GISControlDemo”。2.添加控件選擇工具箱中“菜單和工具欄|MenuStrip”,將其拖入窗體。選擇工具箱中“ArcGISWindowsForms”,將ToolbarControl控件拖入窗體,并將其Dock屬性設(shè)置為Top。選擇工具箱中“菜單和工具欄|StatusStrip”,將其拖入到窗體。選擇工具箱中“容器|SplitContainer”容器拖入窗體,并將其Dock屬性設(shè)置為Fill。選擇工具箱中“ArcGISWindowsForms”,將TOCControl控件拖入SplitContainer控件Panel1面板,并將其Dock屬性設(shè)置為Fill。選擇工具箱中“ArcGISWindowsForms”,將MapControl控件拖入SplitContainer控件Panel1面板,并將其Dock屬性設(shè)置為Fill。最終將LicenseControl控件拖入到窗體任意地方。3.控件綁定經(jīng)過以上步驟添加控件還只是單獨(dú)存在,所以要進(jìn)行控件綁定。分別右擊ToolbarControl、TOCControl控件,選擇“屬性|General”,將Buddy設(shè)置為axMapControl1。這么,工具條和圖層控件就與地圖控件關(guān)聯(lián)了。4.添加工具右擊ToolbarControl,選擇“屬性|Items”,點(diǎn)擊Add,選擇Commands選項(xiàng)卡中Generic,雙擊Open、SaveAs、Redo、Undo即可將對應(yīng)工具添加到工具條。常見工具備:MapNavigation中導(dǎo)航工具,MapInquiry中查詢工具,F(xiàn)eatureSelection中選擇工具。5.編譯運(yùn)行按F5即可編譯運(yùn)行程序,至此桌面GIS應(yīng)用程序框架基本框架已經(jīng)搭建好了,能夠經(jīng)過工具條工具打開地圖文檔,瀏覽地圖了。三.問題及反思若程序拋出InvalidOperationException,打開GISControlForm.cs源代碼在結(jié)構(gòu)函數(shù)GISControlForm中添加以下代碼:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);試驗(yàn)二地圖文檔和地理數(shù)據(jù)操作試驗(yàn)?zāi)繕?biāo)經(jīng)過給程序添加菜單實(shí)現(xiàn)地圖文檔新建、打開、存放以及柵格和矢量數(shù)據(jù)添加等功效。試驗(yàn)步驟1.添加菜單在設(shè)計(jì)視圖中,單擊菜單欄,會出現(xiàn)“請?jiān)诖颂庢I入”提醒,單擊提醒就能夠鍵入菜單名稱,如“文件”,再單擊“文件”,即可輸入其下拉子菜單。2.實(shí)現(xiàn)相關(guān)菜單在處理方案文件上右擊,添加引用:ESRI.ArcGIS.DataSourcesRasterESRI.ArcGIS.Geodatabase添加以下命名空間:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Controls;usingESRI.ArcGIS.DataSourcesRaster;usingESRI.ArcGIS.Geodatabase;在GISControlForm類中添加組員變量:publicstaticIMapDocumentpMapDocument;//需添加命名空間ESRI.ArcGIS.Carto新建地圖文檔相關(guān)代碼以下:privatevoidNewFileToolStripMenuItem_Click(objectsender,EventArgse){SaveFileDialogSaveFileDlg=newSaveFileDialog();SaveFileDlg.Filter="地圖文檔文件(*.mxd)|*.mxd";SaveFileDlg.Title="輸入需要新建地圖文檔名稱";SaveFileDlg.ShowDialog();stringstrDocFile=string.Empty;pMapDocument=newMapDocumentClass();strDocFile=SaveFileDlg.FileName;if(strDocFile==string.Empty)return;pMapDocument.New(strDocFile);pMapDocument.Open(strDocFile,"");axMapControl1.Map=pMapDocument.get_Map(0);}打開地圖文檔相關(guān)代碼以下:privatevoidOpenFileToolStripMenuItem_Click(objectsender,EventArgse){OpenFileDialogOpenFDlg=newOpenFileDialog();OpenFDlg.Filter="地圖文檔文件(*mxd)|*.mxd";OpenFDlg.ShowDialog();stringstrFileName=OpenFDlg.FileName;if(axMapControl1.CheckMxFile(strFileName)){//加載地圖文檔axMapControl1.MousePointer=esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(strFileName,0,Type.Missing);axMapControl1.MousePointer=esriControlsMousePointer.esriPointerDefault;}else{MessageBox.Show("所選文件不是地圖文檔文件!","信息提醒");return;}}添加數(shù)據(jù)相關(guān)代碼以下,使用switch語句添加shape文件和不一樣格式柵格數(shù)據(jù):privatevoidAddDataToolStripMenuItem_Click(objectsender,EventArgse){//利用文件對話框方式選擇加載地圖OpenFileDialogOpenDdlg=newOpenFileDialog();OpenDdlg.Title="選擇需要加載地理數(shù)據(jù)文件";OpenDdlg.Filter="Shape格式文件(*.shp)|*.shp|柵格圖像(*.bmp,*tif,*.jpg,*.img)|*.bmp;*tif;*.jpg;*.img";OpenDdlg.ShowDialog();stringstrFileName=OpenDdlg.FileName;if(strFileName==string.Empty)return;//假如用戶沒有進(jìn)行文件選擇,則返回stringstrFNameExten=System.IO.Path.GetExtension(strFileName);stringpathName=System.IO.Path.GetDirectoryName(strFileName);switch(strFNameExten){case".shp":{stringfileName=System.IO.Path.GetFileNameWithoutExtension(strFileName);//往axMapControl1中加載地圖axMapControl1.AddShapeFile(pathName,fileName);break;}case".bmp":case".tif":case".jpg":case".img":{stringfileName=System.IO.Path.GetFileName(strFileName);IWorkspaceFactorypWSF=newRasterWorkspaceFactoryClass();IWorkspacepWS=pWSF.OpenFromFile(pathName,0);IRasterWorkspacepRWS=pWSasIRasterWorkspace;IRasterDatasetpRasterDataset=pRWS.OpenRasterDataset(fileName);IRasterLayerpRasterLayer=newRasterLayerClass();//影像金字塔判斷與創(chuàng)建IRasterPyramidpRasPyramid=pRasterDatasetasIRasterPyramid;if(pRasPyramid!=null){{if(!(pRasPyramid.Present))//判斷影像金字塔是否存在{pRasPyramid.Create();}}}IRasterpRaster=pRasterDataset.CreateDefaultRaster();pRasterLayer.CreateFromRaster(pRaster);ILayerpLayer=pRasterLayerasILayer;//向主控件中添加圖像axMapControl1.AddLayer(pLayer,0);break;}}}地圖文檔保留、另存為及其程序退出代碼以下:privatevoidSaveFileToolStripMenuItem_Click(objectsender,EventArgse){//判斷文檔是否為只讀文檔if(pMapDocument.get_IsReadOnly(pMapDocument.DocumentFilename)==true){MessageBox.Show("此地圖文檔為只讀文檔!","信息提醒");return;}//用相對路徑保留地圖文檔pMapDocument.Save(pMapDocument.UsesRelativePaths,true);MessageBox.Show("保留成功!","信息提醒");}privatevoidSaveAsToolStripMenuItem_Click(objectsender,EventArgse){SaveFileDialogSaveFileDlg=newSaveFileDialog();SaveFileDlg.Filter="地圖文檔文件(*.mxd)|*.mxd";SaveFileDlg.Title="地圖文檔另存為";stringstrDocFile=string.Empty;SaveFileDlg.ShowDialog();strDocFile=SaveFileDlg.FileName;if(strDocFile==string.Empty)return;if(strDocFile==pMapDocument.DocumentFilename){//將修改后地圖文檔保留在原文件中pMapDocument.Save(pMapDocument.UsesRelativePaths,true);MessageBox.Show("保留成功!","信息提醒");}else{pMapDocument.SaveAs(strDocFile,true,true);MessageBox.Show("保留成功!","信息提醒");}}privatevoidExitToolStripMenuItem_Click(objectsender,EventArgse){Application.Exit();}3.編譯運(yùn)行按F5編譯運(yùn)行,如圖所表示。問題及反思若調(diào)試過程出現(xiàn):無法嵌入互操作類型"ESRI.ArcGIS.Carto.MapDocumentClass".請改用適用接口錯(cuò)誤,右鍵“ESRI.ArcGIS.Carto|屬性|嵌入互操作類型”改為false。但這么做錯(cuò)誤消除了卻會出現(xiàn)一系列警告。類似錯(cuò)誤能夠用一樣方法處理。試驗(yàn)三右擊菜單及其地圖瀏覽功效實(shí)現(xiàn)試驗(yàn)?zāi)繕?biāo)在AE開發(fā)中右鍵菜單有兩種實(shí)現(xiàn)方式,一是使用VisualStudio自帶ContextMenuStrip控件,二是用AE封裝IToolbarMenu接口。本試驗(yàn)采取第一個(gè)方法利用右鍵菜單實(shí)現(xiàn)地圖放大、縮小、漫游功效。試驗(yàn)步驟1.添加控件,設(shè)置屬性選擇工具箱中“菜單和工具欄|ContextMenuStrip”,將其拖入到窗體。在ContextMenuStrip控件上右擊選擇“編輯項(xiàng)”,編輯MenuItem。設(shè)置MapControl控件ContextMenuStrip為contextMenuStrip1,將ContextMenuStrip和MapControl關(guān)聯(lián)起來。2.相關(guān)代碼及其實(shí)現(xiàn)privatevoidZoomInToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerZoomIn;}privatevoidZoomOutToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerZoomOut;}privatevoidPanToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerPan;}privatevoidaxMapControl1_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvente){//1代表左鍵,2代表右鍵,4代表中鍵if(e.button==1){if(axMapControl1.MousePointer==esriControlsMousePointer.esriPointerZoomIn){//將地圖控件顯示范圍設(shè)置IPointp=axMapControl1.ToMapPoint(e.x,e.y);axMapControl1.Extent=axMapControl1.TrackRectangle();IPointpNext=axMapControl1.ToMapPoint(e.x,e.y);if(p.X==pNext.X&&p.Y==pNext.Y){IEnvelopecurExtent=axMapControl1.Extent;curExtent.XMin=p.X-0.25*curExtent.Width;curExtent.XMax=p.X+0.25*curExtent.Width;curExtent.YMin=p.Y-0.25*curExtent.Height;curExtent.YMax=p.Y+0.25*curExtent.Height;axMapControl1.Extent=curExtent;}//刷新地圖axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);}elseif(axMapControl1.MousePointer==esriControlsMousePointer.esriPointerZoomOut)

溫馨提示

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

評論

0/150

提交評論