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

下載本文檔

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

文檔簡(jiǎn)介

第四章圖層和數(shù)據(jù)操作一、實(shí)驗(yàn)?zāi)康牧私饣诮M件GIS的圖層和數(shù)據(jù)操作,重點(diǎn)掌握通過(guò)編寫代碼的方式加載數(shù)據(jù)的方法;編寫代碼實(shí)現(xiàn)調(diào)整地圖圖層順序的功能。二、實(shí)驗(yàn)準(zhǔn)備完成時(shí)間:4學(xué)時(shí)準(zhǔn)備數(shù)據(jù):green.shp、landuse.shp、文化宮.jpg三、實(shí)驗(yàn)步驟及方法1.添加shape圖層使用MapObjects的一個(gè)最基本的任務(wù)是往你的地圖里增加Shape文件。增加Shape文件的步驟:(1)定義一個(gè)新的地理數(shù)據(jù)集對(duì)象GeoDataset:DimgdsAsGeoDataset(2)定義一個(gè)新的數(shù)據(jù)連接對(duì)象DataConnection:DimdCAsNewMapObjects2.DataConnection(3)定義一個(gè)新的地圖圖層對(duì)象MapLayer:DimmLayerAsNewMapObjects2.MapLayer(4)設(shè)置DataConnection對(duì)象的Database屬性為包含Shape文件的文件夾。如:dC.Database="G:\ShiHeZi\shz\greenland"(5)使用DataConnection對(duì)象的方法Connect連接到指定的地理空間數(shù)據(jù)dC.Connect(6)將MapLayer對(duì)象的GeoDataset屬性設(shè)置為DataConnection對(duì)象的FileGeoDataset方法(用Shape文件名作參數(shù))的返回值。如:SetmLayer.GeoDataset=dC.FindGeoDataset("green")(7)用地圖控件屬性Layers對(duì)象的的方法Add向?qū)蛹锛尤雸D層。Map1.Layers.AddmLayer主要屬性:Name:String,圖層的名稱GeoDataSet:GeoDataSet,為Maplayer對(duì)象指定一個(gè)地理數(shù)據(jù)集,只讀屬性。Records:RecordSet,表示圖層屬性表中的記錄集Render:Object,指定渲染方法LayerType:LayerTypeConstants,返回一個(gè)值表示此圖層是一個(gè)ImageLayer還是MapLayer。對(duì)于Maplayer對(duì)象,此屬性值為moMapLayer(0)moMapLayer0此圖層表示矢量圖層MapLayermoImageLayer1此圖層表示影像圖層ImageLayerShapeType:ShapeTypeConstants,表示矢量圖層的要素類型moShapeTypePoint21點(diǎn)對(duì)象moShapeTypeLine22線對(duì)象【例1】添加一個(gè)指定路徑的Shape文件,示例程序如下:DimgSetAsMapObjects2.GeoDataset'定義地理數(shù)據(jù)集DimdConAsNewMapObjects2.DataConnection'定義數(shù)據(jù)鏈接DimnewLayerAsNewMapObjects2.MapLayerdCon.Database="g:\ShiHeZi\shz\greenland"IfdCon.ConnectThenSetgSet=dCon.FindGeoDataset("green")'FindGeoDataset的參數(shù)shape文件的主文件名,沒(méi)有擴(kuò)展名mLayer.Symbol.Color=moYellow'用黃色顯示道路SetnewLayer.GeoDataset=gSetMap1.Layers.AddnewLayer'將newLayer圖層添加到mapControl中Map2.Layers.AddnewLayerSetlayer=Map1.Layers(0)legend1.setMapSourceMap1'獲取圖層圖例legend1.LoadLegendTrue'加載圖層圖例EndIf【例2】通過(guò)對(duì)話框添加一個(gè)Shape文件(圖4.1):背景知識(shí):“部件”添加,控件欄出現(xiàn)CommonDialog控件。CommonDialog控件在VisualBasic和MicrosoftWindows動(dòng)態(tài)連接庫(kù)Commdlg.dll例程之間提供接口,提供諸如打開(kāi)和保存文件、設(shè)置打印選項(xiàng)、選擇顏色和字體等操作的一組標(biāo)準(zhǔn)對(duì)話框。運(yùn)行Windows幫助引擎時(shí),控件還能夠顯示幫助。CommonDialog控件在運(yùn)行時(shí)不可見(jiàn)。示例程序如下:PrivateSub添加Shape圖層_Click()DimbasepathAsStringDimfilenameAsStringDimnewLayerAsNewMapObjects2.MapLayerDimdConAsNewMapObjects2.DataConnectionDimgSetAsMapObjects2.GeoDatasetDimstrAsStringDimtextPosAsLong,periodPosAsLongDimTestAsBooleanDimtempCharAsStringDimfullFileAsString,workspaceAsString,featAttTableAsStringCommonDialog1.Filter="ESRIShapefiles(*.shp)|*.shp"'語(yǔ)法:對(duì)話框名.Filter=描述符1|過(guò)濾器1|描述符2|過(guò)濾器2CommonDialog1.ShowOpenbasepath=CurDir'CurDir函數(shù)返回一個(gè)Variant(String),用來(lái)代表當(dāng)前的路徑,語(yǔ)法'CurDir[(drive)],可選的drive參數(shù)是一個(gè)字符串表達(dá)式,它指定一個(gè)存在的驅(qū)動(dòng)器。如果沒(méi)有指定'驅(qū)動(dòng)器,或drive是零長(zhǎng)度字符串(""),則CurDir會(huì)返回當(dāng)前驅(qū)動(dòng)器的路徑filename=CommonDialog1.FileTitle'返回當(dāng)前的文件名Iffilename=""ThenMsgBox("您沒(méi)有選中任何可用文件!")ExitSubEndIffullFile=Trim$(CommonDialog1.filename)'Trim函數(shù)刪除字符串首部和尾部(左右兩邊)的空格,

'LTrim$()去左邊空格,'RTrim$()去右邊空格'添加shp文件featAttTable=Left$(filename,Len(filename)-4)'得到字符串左部指定個(gè)數(shù)的字符workspace=basepath'根目錄為返回的當(dāng)前目錄dCon.Database=workspaceIfdCon.ConnectThenSetgSet=dCon.FindGeoDataset(featAttTable)IfgSetIsNothingThenMsgBox"打開(kāi)ESRIShapefiles失??!"ExitSubElsenewLayer.GeoDataset=gSetnewLayer.Name=featAttTableMap1.Layers.AddnewLayerEndIfEndIflegend1.setMapSourceMap1legend1.LoadLegendTrueEndSub圖4.1圖4.1通過(guò)對(duì)話框添加.shp層及其結(jié)果圖2.添加image圖層圖像往往被作為背景添加到mapControl,MO只能讀取并將其顯示在mapControl中(通過(guò)ImageLayer對(duì)象),而不能對(duì)圖像進(jìn)行管理和修改。圖像層不包括數(shù)據(jù)庫(kù),也不需要連接數(shù)據(jù)集。mapControl對(duì)圖像的支持取決于安裝MO的圖像支持選項(xiàng)。注意:添加的圖像須具有與shp相同的坐標(biāo)系統(tǒng)及投影系統(tǒng),否則無(wú)法在同一mapControl中顯示【例3】通過(guò)對(duì)話框添加圖像層,示例程序如下(圖4.2):PrivateSub添加圖像_Click()DimiLayerAsNewMapObjects2.ImageLayer'定義新的圖像層DimcountAsLongCommonDialog1.Filter="WindowsBitmap(*.bmp)|*.bmp|TIFFImage(*.tif)|*.tif|JPG圖片(*.jpg)|*.jpg|IMG圖片(*.img)|*.img"'定義能加載圖像類型及擴(kuò)展名CommonDialog1.FilterIndex=1CommonDialog1.InitDir=App.Path'初始返回或設(shè)置的文件目錄CommonDialog1.ShowOpen'顯示“打開(kāi)”對(duì)話框IfCommonDialog1.filename<>""Then'如果文件名不為空,確定有選定的文件iLayer.File=CommonDialog1.filename'將對(duì)話框中選定的文件名傳遞給Layercount=Map1.Layers.countIfMap1.Layers.Add(iLayer)Then'將iLayer圖像層添加到mapControl中Map1.Layers.MoveToBottom(count-1)'將圖像層移動(dòng)到mapControl底層EndIfEndIflegend1.setMapSourceMap1legend1.LoadLegendTrueEndSub如果是添加固定路徑的圖像文件:iLayer.File="g:\ShiHeZi\shz\greenland"'定義打開(kāi)的圖像的路徑map1.Layers.AddiLayer'將iLayer圖像層添加到mapControl中圖4.2圖4.2通過(guò)對(duì)話框添加圖像層及其結(jié)果圖3.圖層數(shù)目Map.Layers是圖層集合,其中count屬性為圖層控制器中容納的圖層數(shù)目,即Map.Layers.count返回圖層數(shù)目。4.訪問(wèn)圖層Map.Layers是圖層集合,圖層索引索引(index)的起始號(hào)是0,新增的圖層總是在最上面,索引總是0,已有圖層的索引號(hào)按順序遞增。圖層在地圖空間中的顯示順序與其在層集中的索引順序相反,有以下兩種方式訪問(wèn)或引用圖層:(1)通過(guò)圖層名訪問(wèn)圖層DimnewLayerAsNewMapObjects2.MapLayerSetnewLayer=map1.Layers.Item(“green”)'獲取圖層名為green的圖層(2)通過(guò)圖層索引訪問(wèn)圖層SetnewLayer=map1.Layers.Item(0)'獲取第一層圖層(索引為0)【例4】將圖層中第2層名為“green”的圖層的顏色改為藍(lán)色,示例程序如下:map1.Layers.Item(2).Symbol.Color=vbBluemap1.Layers(2).Symbol.Color=vbBluemap1.Layers.Item(“green”).Symbol.Color=vbBluemap1.Layers(“green”).Symbol.Color=vbBlue(3)訪問(wèn)當(dāng)前活動(dòng)圖層ActiveLayer:獲取當(dāng)前活動(dòng)圖層,必須借助圖例legend完成,圖例中的活動(dòng)圖層(被點(diǎn)擊圖層)即mapControl中的活動(dòng)圖層,legend依據(jù)圖層索引檢索。DimIndexAsLongIndex=legend1.getActiveLayer'獲取圖例中活動(dòng)圖層的索引號(hào)5.改變圖層次序圖層在mapControl中的顯示和存儲(chǔ)是有順序的,其遮蓋關(guān)系也是由圖層次序決定的??墒褂肔ayers集合的Moveto、MoveToButtom、MoveToTop方式改變;★語(yǔ)法:Layers.MoveTofromindex,toindexLayers.MoveToButtomindexLayers.MoveToTopindex當(dāng)MapControl中需要顯示的地圖信息發(fā)生改變時(shí)(地圖顯示范圍變化、圖層次序變化、圖層顯示方式變化、地理數(shù)據(jù)被修改等),需要將MapControl中的地圖進(jìn)行重畫,這時(shí)必須在這些操作后手動(dòng)添加并調(diào)用Refresh方法以手動(dòng)更新地圖顯示:語(yǔ)法:Map.Refresh注意:如下操作將會(huì)自動(dòng)調(diào)用Refresh,無(wú)需編程調(diào)用Refresh:向layers集合中添加Maplayer圖層或Imagelayer圖像層;使用Clear或Remove方法從layers集合中刪除圖層;使用Pan和CenterAt對(duì)象移動(dòng)MapControl當(dāng)前顯示范圍;改變MapControl的Extent屬性進(jìn)而改變前顯示范圍;【例5】原來(lái)圖層在第2層,用以下語(yǔ)句可以把它移動(dòng)到第1層:Map1.Layers.MoveTo2,1【例6】原來(lái)圖層在第2層,用以下語(yǔ)句可以把它移動(dòng)到頂層:Map1.Layers.MoveToTop2移動(dòng)后,原來(lái)處于它上層的圖層均向下移動(dòng)一層;【例7】原來(lái)圖層在第2層,用以下語(yǔ)句可以把它移動(dòng)到頂層:Map1.Layers.MoveToButtom2移動(dòng)后,原來(lái)處于它下層的圖層均向上移動(dòng)一層;【例8】將當(dāng)前活動(dòng)圖層上移,示例程序如下::PrivateSub上移圖層_Click()'提取被選擇圖層的索引,DimIndexAsLongIndex=legend1.getActiveLayer'提取被選擇圖層的索引IfIndex>=1Then'確定當(dāng)前有活動(dòng)圖層Map1.Layers.MoveToIndex,Index-1'MapLayer的第一層圖層索引為0,越底層索引越大,上移圖層即將當(dāng)前有活動(dòng)圖層索引-1Map2.Layers.MoveToIndex,Index-1Map1.RefreshMap2.Refres

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論