石大《GIS設(shè)計(jì)與開(kāi)發(fā)》實(shí)習(xí)指導(dǎo)05地圖的顯示范圍操作_第1頁(yè)
石大《GIS設(shè)計(jì)與開(kāi)發(fā)》實(shí)習(xí)指導(dǎo)05地圖的顯示范圍操作_第2頁(yè)
石大《GIS設(shè)計(jì)與開(kāi)發(fā)》實(shí)習(xí)指導(dǎo)05地圖的顯示范圍操作_第3頁(yè)
石大《GIS設(shè)計(jì)與開(kāi)發(fā)》實(shí)習(xí)指導(dǎo)05地圖的顯示范圍操作_第4頁(yè)
石大《GIS設(shè)計(jì)與開(kāi)發(fā)》實(shí)習(xí)指導(dǎo)05地圖的顯示范圍操作_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章地圖的顯示范圍操作——放大、縮小、漫游、全圖、縮略圖顯示一、實(shí)驗(yàn)?zāi)康牧私饣诮M件GIS的地圖顯示,重點(diǎn)掌握通過(guò)編寫(xiě)代碼的方式實(shí)現(xiàn)圖層的放大、縮小、漫游、全圖和縮略圖顯示。二、實(shí)驗(yàn)準(zhǔn)備完成時(shí)間:2學(xué)時(shí)準(zhǔn)備數(shù)據(jù):green.shp、landuse.shp三、基本知識(shí):在GIS中,通常需要改變地圖的顯示范圍(移動(dòng)當(dāng)前顯示范圍、放大、縮小、漫游、全圖、縮略圖顯示),以便更好的查看地理對(duì)象和信息。地圖控件的控制坐標(biāo)(屏幕坐標(biāo))與地圖坐標(biāo)(地理坐標(biāo))的區(qū)別:控件坐標(biāo)系:指在編程環(huán)境下,各種或視控件所使用的坐標(biāo)系統(tǒng),在VisualBasic窗體中左上角為原點(diǎn),水平方向?yàn)閄軸,豎直方向?yàn)閅軸。地圖坐標(biāo)系:地圖及圖層數(shù)據(jù)所使用的坐標(biāo)系統(tǒng),有地理坐標(biāo)(經(jīng)緯度)和投影坐標(biāo)。地圖控件的控制坐標(biāo)(屏幕坐標(biāo))在左上角某一位置(0,0),而地圖坐標(biāo)原點(diǎn)通常都有一個(gè)在地圖控件區(qū)域很遠(yuǎn)以外的原點(diǎn)(0,0),地圖控件當(dāng)前的范圍只是地圖表面的一個(gè)小窗口;控件坐標(biāo)Y軸向下遞增,而地圖坐標(biāo)Y軸向上遞增;控件坐標(biāo)以twips(緹)為單位,并與計(jì)算機(jī)屏幕顯示的實(shí)際尺寸有關(guān),而地圖坐標(biāo)則用米、英尺等單位表示,且與地表特征的測(cè)量有關(guān):1Twip=1/20Point=1/1440Inch=1/567cm地圖顯示范圍指顯示區(qū)域的坐標(biāo)范圍,用矩形rectangle定義。在Map控件上顯示的地圖范圍可以通過(guò)Map控件的Extent屬性來(lái)得到和設(shè)置。Map控件的“Extent”屬性返回rectangle對(duì)象,反映在Map控件中顯示的地圖范圍,由Top(左上角y坐標(biāo))、Left(左上角x坐標(biāo))、Bottom(右下角y坐標(biāo))和Right(右下角x坐標(biāo))四個(gè)坐標(biāo)值組成。通過(guò)“Extent”設(shè)置地圖的顯示范圍,有如下幾種方法:通過(guò)坐標(biāo)賦值設(shè)置地圖范圍WithMap1.Extent.Left=20000.Bottom=45000.Right=32000.Top=57000EndWith'With語(yǔ)句可以對(duì)某個(gè)對(duì)象執(zhí)行一系列的語(yǔ)句,而不用重復(fù)指出對(duì)象的名稱(chēng).例如,要改變一個(gè)對(duì)象的多個(gè)屬性,可以在With控制結(jié)構(gòu)中加上屬性的賦值語(yǔ)句來(lái)給同一個(gè)對(duì)象的幾個(gè)屬性賦值,這時(shí)候只是引用對(duì)象一次而不是在每個(gè)屬性賦值時(shí)都要引用它,設(shè)置為圖層的最大范圍:SetMap1.Extent=Map1.FullExtent對(duì)目前的范圍乘以一個(gè)比例因子,改變范圍的大?。篠etMap1.Extent=Map1.Extent.ScaleRectangle(n)通過(guò)地圖交互改變顯示范圍的位置(地圖漫游):SetMap1.Extent=Map1.Pan使地圖的中心點(diǎn)定位在某一位置SetMap1.Extent=Map1.CenterAt(55000,65000)四、實(shí)驗(yàn)步驟及方法1.地圖的放大、縮小和全圖顯示設(shè)置點(diǎn)擊工具條上放大、縮小和全圖顯示的按鈕后,設(shè)置鼠標(biāo)的形態(tài)利用工具方式進(jìn)行地圖操作包括兩個(gè)事件,第一個(gè)事件是工具欄上的按鈕點(diǎn)擊事件;第二個(gè)事件是Map控件上的操作事件(MouseDown事件)。對(duì)第一個(gè)事件的響應(yīng)通常是改變鼠標(biāo)指針的形狀,同時(shí)記錄按鈕的功能。鼠標(biāo)指針類(lèi)型:可從C:\WINDOWS\Cursors查看鼠標(biāo)指針類(lèi)型代碼描述moDefault0Defaultcursor.moArrow1Arrow.moCross2Crosshair.moIbeam3Ibeam.moIconPointer4Icon.(AvailableonWindowsNTonly)moSizePointer5Size.moSizeNESW6SizeNE,SW.moSizeNS7SizeN,S.moSizeNWSE8SizeNW,SE.moSizeWE9SizeW,E.moUpArrow10Uparrow.moHourglass11Hourglass.moNoDrop12Nodrop.moArrowHourglass13Arrowandhourglass.moArrowQuestion14Arrowandquestionmark.moSizeAll15Sizeinalldirections.moZoom50ZoommoZoomIn51ZoominmoZoomOut52ZoomoutmoPan53PanmoPanning54PanningmoIdentify55IdentifymoLabel56LabelmoHotLink57HotLinkmoPencil58Pencil【例】設(shè)置改變鼠標(biāo)的形態(tài),示例程序如下:PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)'ByVal傳遞值參數(shù),MSComctlLib是一個(gè)類(lèi)型庫(kù),當(dāng)引用了WindowsCommonControl部件時(shí),會(huì)自動(dòng)導(dǎo)入DimcurrenttoolAsIntegerSelectCaseButton.IndexCase1Map1.MousePointer=moArrow'設(shè)置鼠標(biāo)的形態(tài)為箭頭currenttool=1'記錄按鈕的功能,建立與后續(xù)程序的聯(lián)系Case2Map1.MousePointer=moZoomIn'設(shè)置鼠標(biāo)的形態(tài)為放大鏡currenttool=2Case3Map1.MousePointer=moZoomOut'設(shè)置鼠標(biāo)的形態(tài)為縮小鏡currenttool=3Case4Map1.MousePointer=moPan'設(shè)置鼠標(biāo)的形態(tài)為手形漫游currenttool=4…………EndSelectEndSub對(duì)第二個(gè)事件的響應(yīng)是根據(jù)點(diǎn)擊按鈕的功能(為了獲得點(diǎn)擊按鈕的功能,需要在聲明段中定義一個(gè)模塊級(jí)變量),分別執(zhí)行相應(yīng)的代碼,實(shí)現(xiàn)放大、縮小和全圖顯示功能:地圖的放大、縮小和全圖顯示實(shí)際上是改變地圖的顯示范圍。地圖比例尺是Map控件的屏幕范圍(長(zhǎng)度或高度)與實(shí)際范圍(長(zhǎng)度或高度)的比值。在VB中,窗體的缺省單位是twips,是1英寸的1/1440。通過(guò)Map控件的Width和height屬性可得到Map控件的寬度和高度(屏幕范圍,單位是twips),通過(guò)換算并與地圖實(shí)際的寬度或高度比較即可得到地圖比例尺(利用寬度或高度結(jié)果一致)。在同一Map控件中,顯示范圍越大,則比例尺越??;反之,比例尺越大。即:地圖放大是通過(guò)縮小地圖范圍;地圖縮小是通過(guò)擴(kuò)大地圖范圍。如是放大事件,則利用Map控件的TrackRectangle返回用戶(hù)在地圖上定義的Rectangle,并作為放大后地圖的范圍;如是縮小事件,則根據(jù)定義的Rectangle大小確定比例,即地圖控件高度(或?qū)挾龋┡c用戶(hù)定義的Rectangle高度(或?qū)挾龋┲龋琑ectangle越小,縮小的比例越大;定義地圖范圍的Rectangle對(duì)象可以利用ScaleRectangle(ScaleFactor比例因子)方法來(lái)改變,如比例因子為2,則Rectangle的高度和寬度都乘以2,地圖縮小1倍。如地圖放大1倍,則比例因子為0.5。語(yǔ)法:Map1.Extent=Map1.TrackRectangleMap1.Extent.ScaleRectangle(n)(n為比例因子)利用Map控件的TrackRectangle返回用戶(hù)在地圖上定義的Rectangle;漫游功能,則利用Map控件的Pan方法?!纠糠糯?、縮小和全圖顯示,示例程序如下:PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)'觸發(fā)事件為鼠標(biāo)點(diǎn)擊地圖控件任意區(qū)域legend1.setMapSourceMap1'建立地圖和圖例之間的聯(lián)系legend1.LoadLegendTrue'實(shí)現(xiàn)工具條按鈕的相應(yīng)功能DimrectAsMapObjects2.RectangleDimLastExtentAsMapObjects2.RectangleDimInputRecsWidthAsLong'放大Ifcurrenttool=1ThenSetMap1.Extent=Map1.TrackRectangle'通過(guò)跟蹤用戶(hù)輸入的矩形顯示范圍,完成“框選放大”功能Setrect=Map1.Extentrect.ScaleRectangle(0.25)'通過(guò)設(shè)置比例因子,完成“點(diǎn)擊放大”功能Map1.Extent=rect'縮小ElseIfcurrenttool=2ThenSetrect=Map1.ExtentInputRecsWidth=Map1.TrackRectangle.Width'跟蹤用戶(hù)輸入的矩形顯示范圍并獲取其寬度SetLastExtent=Map1.ExtentIf(InputRecsWidth>0)Thenrect.ScaleRectangleMap1.Extent.Width/InputRecsWidth'對(duì)MouseDown事件過(guò)程,點(diǎn)擊Map控件所返回的矩形其高度和寬度均為0Map1.Extent.Width/MapWidth的分母為0,程序?qū)⒊鲥e(cuò)。為了避免出錯(cuò),對(duì)MapWidth是否為0進(jìn)行判斷(IfMapWidth<>0),如不為0,則執(zhí)行相應(yīng)縮小地圖的代碼;Elserect.ScaleRectangle1.5'當(dāng)MapWidth=0,即用戶(hù)當(dāng)前操作為“點(diǎn)擊”,則通過(guò)設(shè)置比例因子,完成“點(diǎn)擊縮小”功能EndIfSetMap1.Extent=rect'全圖漫游ElseIfcurrenttool=3ThenMap1.Pan'全圖顯示功能ElseIfcurrenttool=4ThenSetMap1.Extent=Map1.FullExtent'全圖顯示功能2.縮略圖(導(dǎo)航圖)顯示縮略圖同樣是一個(gè)用于顯示地圖的地圖控件,與主圖區(qū)之間聯(lián)動(dòng),在加載大圖時(shí)被同時(shí)加載(即縮略圖和大圖顯示的是同一圖層),但是縮略圖主要用于:地圖控件的微縮全圖顯示:它一般不移動(dòng),而是用紅框顯示大圖當(dāng)前顯示范圍在全圖中的位置。當(dāng)主圖被放大、縮小或漫游時(shí),能使用戶(hù)了解和掌握當(dāng)前大圖顯示范圍在全圖中的位置(圖4.1或4.2)。在地圖上繪制圖形可通過(guò)Map對(duì)象的方法DrawShape。語(yǔ)法:object.DrawShape

(shape,

symbol)其中shape可以是幾何圖形(如Point、Points,

Line,

Rectangle,

Polygon、Ellipse)

,或是來(lái)源于Recordset對(duì)象。Symbol表示繪制時(shí)采用的符號(hào)或方式。注意:DrawShape函數(shù)只能在AfterLayerDraw、BeforeLayerDraw、AfterTrackingLayerDraw

、BeforeTrackingLayerDraw四個(gè)事件中調(diào)用。DrawShape繪圖的基本過(guò)程:1)創(chuàng)建一個(gè)圖形對(duì)象;2)在Symbol對(duì)象中定義繪圖的方式;3)用DrawShape方法在地圖上顯示?!纠吭诘貓D控件添加一大一小地圖控件,小地圖控件為縮略圖:Map1.Layers.AddmLayerMap2.Layers.AddmLayerlegend1.setMapSourceMap1'建立地圖和圖例之間的聯(lián)系legend1.LoadLegendTrue'加載圖例PrivateSubMap1_AfterLayerDraw(ByValIndexAsInteger,ByValcanceledAsBoolean,ByValhdcAsstdole.OLE_HANDLE)'鷹眼部分IfIndex=0Then'確定圖層為第一層(最上層)Map2.TrackingLayer.RefreshTrue'觸發(fā)Map2_AfterTrackingLayerDraw過(guò)程EndIfMap2.Layers.AddMap1.Layers.Item(0)Map2.RefreshEndSub'鷹眼縮略圖紅色矩形框部分PrivateSubMap2_AfterTrackingLayerDraw(ByValhdcAsstdole.OLE_HANDLE)IfMap1.Layers.Count<>0Then'map1中有加載的圖層DimsymAsNewMapObjects2.Symbol'在Symbol對(duì)象中定義繪圖的方式sym.OutlineColor=moRedsym.Size=2sym.Style=moTransparentFillMap2.DrawShape,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論