地理信息系統(tǒng)開發(fā)具體教程_第1頁(yè)
地理信息系統(tǒng)開發(fā)具體教程_第2頁(yè)
地理信息系統(tǒng)開發(fā)具體教程_第3頁(yè)
地理信息系統(tǒng)開發(fā)具體教程_第4頁(yè)
地理信息系統(tǒng)開發(fā)具體教程_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

地理信息系統(tǒng)開發(fā)具體教程一、基本控件的添加1.1.新建項(xiàng)目文件>新建>項(xiàng)目>Windows窗體應(yīng)用1.2.修改標(biāo)題右擊窗體屬性>在Text中修改標(biāo)題名稱1.3.添加菜單欄工具箱>菜單和工具欄>MenuStrip(將MenuStrip拖入到窗體內(nèi))依次添加子標(biāo)題如下:(2)設(shè)置可選擇的文件打開方式OpenFileDialogpOpenFiledialog=newOpenFileDialog();pOpenFiledialog.InitialDirectory=@E:\ArcGISEngine地理信息系統(tǒng)開發(fā)教程基于C#.NET\chp03\地圖操作\data\Mxd文件";pOpenFiledialog.Filter="文本文件(*.mxd)|*.mxd|所有文件(*.*)|*.*";pOpenFiledialog.Title="打開地圖文檔";if(pOpenFiledialog.ShowDialog()==DialogResult.OK){stringmxdfilpath=pOpenFiledialog.FileName;if(this.axMapControl1.CheckMxFile(mxdfilpath)){this.axMapControl1.LoadMxFile(mxdfilpath);}else{MessageBox.Show("打開地圖文檔無效!");}(3)使用ControlsOpenDocCommandClass加載

添加代碼如下:ICommandcommand=newControlsOpenDocCommandClass();

command.OnCreate(this.axMapControl1.Object);

command.OnClick();

注意:如果直接運(yùn)行會(huì)出現(xiàn)錯(cuò)誤,因?yàn)闆]有添加引用,我們需要添加引用ESRI.ArcGIS.SystemUI;ESRI.ArcGIS.Controls;然后在使用空間:usingESRI.ArcGIS.SystemUI;usingESRI.ArcGIS.Controls;地圖瀏覽添加控件menuStrip和toolStrip還有statusStrip依次添加控件分欄容器控件splitContainer1)、內(nèi)容表控件(axTOCControl1)、地圖視圖控件(axMapControl1)、許可控件(axLicenseControl1)。2.為工具欄控件添加8個(gè)按鈕(BUTTON),依次將其文本(text屬性)改為:打開地圖、加載數(shù)據(jù)、逐級(jí)放大、逐級(jí)縮小、拉框放大、拉框縮小、漫游、全圖、前一視圖、后一視圖,并設(shè)置相應(yīng)圖標(biāo)依次將其NAME屬性改為CmdOpen,CmdAdd,CmdZoomIn,CmdZoonOut,ToolZoomIn,ToolZoomOut,ToolPan,CmdFullextent、CmdBack、CmdNext點(diǎn)擊button->Displaystyle->ImageAndText可以使修改的TEXT名稱顯示出來雙擊button“打開地圖”添加代碼如下ICommandcommand=newControlsOpenDocCommandClass();command.OnCreate(this.axMapControl1.Object);command.OnClick();注意:使用代碼之前要引用命名空間usingESRI.ArcGIS.SystemUI;usingESRI.ArcGIS.Controls;雙擊button“加載數(shù)據(jù)”添加代碼如下:雙擊button“逐級(jí)放大”“逐級(jí)縮小”分別添加代碼如下:注意:在添加代碼前,需要添加引用空間代碼usingESRI.ArcGIS.Geometry;IEnvelopepEnvelope;pEnvelope=axMapControl1.Extent;pEnvelope.Expand(0.5,0.5,true);//這a里?設(shè)Θ?置?縮?小?為a一?半?,?可é以?根ù據(jù)Y需è要癮具?體?設(shè)Θ?置?axMapControl1.Extent=pEnvelope;axMapControl1.ActiveView.Refresh();IEnvelopepEnvelope;pEnvelope=axMapControl1.Extent;pEnvelope.Expand(2,2,true);//這a里?設(shè)Θ?置?縮?小?為a一?半?,?可é以?根ù據(jù)Y需è要癮具?體?設(shè)Θ?置?axMapControl1.Extent=pEnvelope;axMapControl1.ActiveView.Refresh();雙擊button“拉框放大”“拉框縮小”分別添加代碼如下:ControlsMapZoomInToolobjTool=newControlsMapZoomInToolClass();objTool.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool=(ITool)objTool;ControlsMapZoomOutToolobjTool=newControlsMapZoomOutToolClass();objTool.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool=(ITool)objTool;雙擊button“拉框放大”“拉框縮小”分別添加代碼如下:ControlsMapZoomInToolobjTool=newControlsMapZoomInToolClass();objTool.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool=(ITool)objTool;ControlsMapZoomOutToolobjTool=newControlsMapZoomOutToolClass();objTool.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool=(ITool)objTool;雙擊button“漫游”添加代碼如下:stringpMouseOperate=null;axMapControl1.CurrentTool=null;pMouseOperate="Pan";axMapControl1.MousePointer=esriControlsMousePointer.esriPointerPan;9.雙擊9.button“全圖”添加代碼如下:axMapControl1.Extent=axMapControl1.FullExtent;視圖同步按照如下設(shè)置界面依次添加控件ToolBarControl和ToccControl和MapControl,并將MapControl的name改為EagleControlSpitContainer將TabControl拖入到框內(nèi),并修改名稱為數(shù)據(jù)和布局,并將屬性中alignment中設(shè)置為bottom。點(diǎn)擊“數(shù)據(jù)”框,將MapControl拖入到其中,同樣方法選中“布局”框?qū)ⅰ癙ageLayoutControl拖入其中,并將MapControl改名為MainControl5.定義幾個(gè)變量

privateboolbCanDrag;//鷹眼地圖上的矩形框可移動(dòng)的標(biāo)志

privateIPointpMoveRectPoint;//記錄在移動(dòng)鷹眼地圖上的矩形框時(shí)鼠標(biāo)的位置

privateIEnvelopepEnv;//記錄數(shù)據(jù)視圖的Extent

然后在初始化中寫入以下代碼:

privatevoidForm1_Load(objectsender,EventArgse)

{

this.axTOCControl1.SetBuddyControl(this.mainMapControl);

EagleMapControl.Extent=mainMapControl.FullExtent;

pEnv=EagleMapControl.Extent;

}

6)首先實(shí)現(xiàn)主視圖與鷹眼視圖的數(shù)據(jù)保持一致,在mainMapControl

控件的OnMapRelaced事件中寫入以下代碼:

privatevoidmainMapControl_OnMapReplaced(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvente)

{

if(mainMapControl.LayerCount>0)

{

EagleMapControl.Map=newMapClass();

}

for(inti=0;i<=mainMapControl.Map.LayerCount-1;i++)

{

EagleMapControl.AddLayer(mainMapControl.get_Layer(i));

}

EagleMapControl.Extent=mainMapControl.Extent;

EagleMapControl.Refresh();

}

7)添加矩形框

當(dāng)數(shù)據(jù)視圖的顯示范圍發(fā)生變化時(shí),會(huì)觸發(fā)觸發(fā)數(shù)據(jù)視圖

(MapControl1)中OnExtentUpdata事件,在該事件中繪制鷹眼視圖

中的方框。獲取數(shù)據(jù)視圖中的地圖顯示范圍作為矩形框范圍,添加到

鷹眼視圖中。代碼如下

privatevoidmainMapControl_OnExtentUpdated(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvente)

{

//添加矩形框之前,需要清除鷹眼視圖(MapControl2)中任何圖形元素。

IGraphicsContainerpGraphicsContainer=EagleMapControl.Mapas

//安徽理工大學(xué)測(cè)繪學(xué)院GIS開發(fā)實(shí)驗(yàn)課講義

IGraphicsContainer;

IActiveViewpActiveView=pGraphicsContainerasIActiveView;

pGraphicsContainer.DeleteAllElements();

//得到當(dāng)前視圖范圍

pEnv=(IEnvelope)e.newEnvelope;

IRectangleElementpRectangleEle=newRectangleElementClass();

IElementpElement=pRectangleEleasIElement;

pElement.Geometry=pEnv;

//設(shè)置鷹眼圖中的紅線框

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Green=0;

pColor.Blue=0;

pColor.Transparency=255;

//產(chǎn)生一個(gè)線符號(hào)對(duì)象

ILineSymbolpOutline=newSimpleLineSymbolClass();

pOutline.Width=3;

pOutline.Color=pColor;

//設(shè)置顏色屬性

pColor=newRgbColorClass();

pColor.Transparency=0;

//設(shè)置填充符號(hào)的屬性

IFillSymbolpFillSymbol=newSimpleFillSymbolClass();

pFillSymbol.Color=pColor;

pFillSymbol.Outline=pOutline;

//向鷹眼中添加矩形框

IFillShapeElementpFillShapeEle=pElementasIFillShapeElement;

pFillShapeEle.Symbol=pFillSymbol;

pGraphicsContainer.AddElement((IElement)pFillShapeEle,0);

pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);

}

8)矩形框的拖動(dòng)與繪制

privatevoidEagleMapControl_OnMouseDown(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)

{

if(EagleMapControl.Map.LayerCount>0)

{

//按下鼠標(biāo)左鍵移動(dòng)矩形框

if(e.button==1)

{

//安徽理工大學(xué)測(cè)繪學(xué)院GIS開發(fā)實(shí)驗(yàn)課講義

//如果指針落在鷹眼的矩形框中,標(biāo)記可移動(dòng)

if(e.mapX>pEnv.XMin&&e.mapY>pEnv.YMin&&e.mapX<

pEnv.XMax&&e.mapY<pEnv.YMax)

{

bCanDrag=true;

}

pMoveRectPoint=newPointClass();

pMoveRectPoint.PutCoords(e.mapX,e.mapY);//記錄點(diǎn)擊的第

一個(gè)點(diǎn)的坐標(biāo)

}

//按下鼠標(biāo)右鍵繪制矩形框

elseif(e.button==2)

{

IEnvelopepEnvelope=EagleMapControl.TrackRectangle();

IPointpTempPoint=newPointClass();

pTempPoint.PutCoords(pEnvelope.XMin+pEnvelope.Width/2,

pEnvelope.YMin+pEnvelope.Height/2);

mainMapControl.Extent=pEnvelope;

//矩形框的高寬和數(shù)據(jù)試圖的高寬不一定成正比,這里做一個(gè)中心

調(diào)整

mainMapControl.CenterAt(pTempPoint);

}

}

}

//移動(dòng)矩形框

privatevoidEagleMapControl_OnMouseMove(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvente)

{

if(e.mapX>pEnv.XMin&&e.mapY>pEnv.YMin&&e.mapX<pEnv.XMax

&&e.mapY<pEnv.YMax)

{

//如果鼠標(biāo)移動(dòng)到矩形框中,鼠標(biāo)換成小手,表示可以拖動(dòng)

EagleMapControl.MousePointer=

esriControlsMousePointer.esriPointerHand;

if(e.button==2)//如果在內(nèi)部按下鼠標(biāo)右鍵,將鼠標(biāo)樣式設(shè)置為

默認(rèn)樣式

{

EagleMapControl.MousePointer=

esriControlsMousePointer.esriPointerDefault;

}

}

else

//安徽理工大學(xué)測(cè)繪學(xué)院GIS開發(fā)實(shí)驗(yàn)課講義

{

//在其他位置將鼠標(biāo)設(shè)為默認(rèn)的樣式

EagleMapControl.MousePointer=

esriControlsMousePointer.esriPointerDefault;

}

if(bCanDrag)

{

doubleDx,Dy;//記錄鼠標(biāo)移動(dòng)的距離

Dx=e.mapX-pMoveRectPoint.X;

Dy=e.mapY-pMoveRectPoint.Y;

pEnv.Offset(Dx,Dy);//根據(jù)偏移量更改pEnv位置

pMoveRectPoint.PutCoords(e.mapX,e.mapY);

//在繪制前,清除鷹眼中之前繪制的矩形框

IGraphicsContainerpGraphicsContainer=EagleMapControl.Mapas

IGraphicsContainer;

IActiveViewpActiveView=pGraphicsContainerasIActiveView;

pGraphicsContainer.DeleteAllElements();

//得到當(dāng)前視圖范圍

IRectangleElementpRectangleElement=new

RectangleElementClass();

IElementpElement=pRectangleElementasIElement;

pElement.Geometry=pEnv;

//設(shè)置矩形框(實(shí)質(zhì)為中間透明度面)

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Green=0;

pColor.Blue=0;

pColor.Transparency=255;

ILineSymbolpOutLine=newSimpleLineSymbolClass();

pOutLine.Width=2;

pOutLine.Color=pColor;

IFillSymbolpFillSymbol=newSimpleFillSymbolClass();

pColor=newRgbColorClass();

pColor.Transparency=0;

pFillSymbol.Color=pColor;

pFillSymbol.Outline=pOutLine;

//向鷹眼中添加矩形框

IFillShapeElementpFillShapeElement=pElementas

IFillShapeElement;

pFillShapeElement.Symbol=pFillSymbol;

pGraphicsContainer.AddElement((IElement)pFillShapeElement,0);

//刷新

安徽理工大學(xué)測(cè)繪學(xué)院GIS開發(fā)實(shí)驗(yàn)課講義

pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,

null,null);

mainMapControl.Extent=pEnv;

}

}

privatevoidEagleMapControl_OnMouseUp(objectsender,

IMapControlEvents2_OnMouseUpEvente)

{

if(e.button==1&&pMoveRectPoint!=null)

{

if(e.mapX==pMove

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論