版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度滑雪場(chǎng)設(shè)施裝修安全防護(hù)合同3篇
- 2025年度早餐店加盟連鎖承包合同范本4篇
- 2025年度智能車間承包環(huán)保技術(shù)改造協(xié)議4篇
- 2024-2028年中國(guó)無線電接收機(jī)行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 中國(guó)太陽(yáng)能空調(diào)項(xiàng)目可行性研究報(bào)告建議書
- 2025年度個(gè)人二手房定金買賣合同書標(biāo)準(zhǔn)化版2篇
- 2025年度個(gè)人借款聯(lián)保合同(附財(cái)產(chǎn)抵押)4篇
- 2025年山東國(guó)新抱犢食品有限公司招聘筆試參考題庫(kù)含答案解析
- 二零二五版苗木種植基地水資源利用與節(jié)水技術(shù)合同4篇
- 2025年寧夏昊陽(yáng)資產(chǎn)管理有限公司招聘筆試參考題庫(kù)含答案解析
- 公司組織架構(gòu)圖(可編輯模版)
- 1汽輪機(jī)跳閘事故演練
- 陜西省銅川市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 禮品(禮金)上交登記臺(tái)賬
- 普通高中英語課程標(biāo)準(zhǔn)詞匯表
- 北師大版七年級(jí)數(shù)學(xué)上冊(cè)教案(全冊(cè)完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 2023高中物理步步高大一輪 第五章 第1講 萬有引力定律及應(yīng)用
- 青少年軟件編程(Scratch)練習(xí)題及答案
- 浙江省公務(wù)員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學(xué)
- 全統(tǒng)定額工程量計(jì)算規(guī)則1994
評(píng)論
0/150
提交評(píng)論