石大《GIS設(shè)計(jì)與開發(fā)》實(shí)習(xí)指導(dǎo)06矢量數(shù)據(jù)屬性查詢_第1頁
石大《GIS設(shè)計(jì)與開發(fā)》實(shí)習(xí)指導(dǎo)06矢量數(shù)據(jù)屬性查詢_第2頁
石大《GIS設(shè)計(jì)與開發(fā)》實(shí)習(xí)指導(dǎo)06矢量數(shù)據(jù)屬性查詢_第3頁
石大《GIS設(shè)計(jì)與開發(fā)》實(shí)習(xí)指導(dǎo)06矢量數(shù)據(jù)屬性查詢_第4頁
石大《GIS設(shè)計(jì)與開發(fā)》實(shí)習(xí)指導(dǎo)06矢量數(shù)據(jù)屬性查詢_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六章矢量數(shù)據(jù)屬性查詢一、實(shí)驗(yàn)?zāi)康牧私馔ㄟ^查詢與數(shù)據(jù)集有關(guān)的表,從數(shù)據(jù)中獲取信息,以及如何通過空間和邏輯的查詢方式從數(shù)據(jù)中獲取信息的方法;掌握通過編寫代碼的方式實(shí)現(xiàn)地圖數(shù)據(jù)屬性查詢。二、實(shí)驗(yàn)準(zhǔn)備完成時(shí)間:2學(xué)時(shí)準(zhǔn)備數(shù)據(jù):landuse.shp三、基本知識地圖是關(guān)于地理信息的存貯庫,包括位置、空間關(guān)系及其屬性值,一個(gè)圖層是由很多要素(記錄)所組成。地理信息系統(tǒng)的一個(gè)基本而重要的功能就是,通過與用戶的交互,定位滿足條件的地理空間要素,并返回相關(guān)的屬性描述信息。在MapObjects如何查詢各類幾何對象(點(diǎn),線段,多邊形)所代表的地理要素的屬性信息?其原理是,根據(jù)用戶在地圖控件上點(diǎn)擊的位置,先在指定的圖層上通過空間分析的方法找到與指定位置最匹配的地理要素,將符合條件的記錄生成一個(gè)結(jié)果記錄集。通過結(jié)果記錄集的相關(guān)屬性和方法來獲取各個(gè)記錄的屬性信息。下面討論與此相關(guān)的對象和方法。管理有關(guān)屬性的關(guān)鍵是記錄集(Recordset),它存儲著GeoDataset或Table對象的記錄和字段,一個(gè)記錄集代表從一個(gè)地圖層中得到的多個(gè)記錄,它表示地圖圖層中的屬性信息,并提供使用記錄的方法。Recordset是用來同一個(gè)圖層中信息進(jìn)行交互作用的關(guān)鍵目標(biāo)。Recordset是不可創(chuàng)建對象,也就是說不能用New關(guān)鍵字或CreatObjects函數(shù)來聲明一個(gè)Recordset對象。MO提供了三種要素查找的方法:按表達(dá)式查找(SearchExpression)、按距離查找(SearchByDistance)以及按圖形關(guān)系查找(SearchShape)。以上三個(gè)選擇方法之一均可返回一個(gè)Recordset,表明滿足要求或條件的記錄的集合被創(chuàng)建為一個(gè)新的Recordset。從一個(gè)記錄集目標(biāo)中,你可以用基本的統(tǒng)計(jì)信息(最大值、最小值、均值和總和)來計(jì)算一個(gè)統(tǒng)計(jì)目標(biāo)。當(dāng)你建立了一個(gè)記錄集時(shí),其位置在第一個(gè)記錄上.MoveNext,MoveFirst及MovePrevious法使你可在多個(gè)記錄中瀏覽.EOF特征返回你是否到達(dá)了記錄集的結(jié)尾。針對MapLayer對象的查詢方法:SearchShape(shape,searchMethod,expression)創(chuàng)建由在空間關(guān)系上符合參數(shù)searchMethod所指定條件,邏輯條件符合表達(dá)式expression要求的所有要素組成的記錄集。表達(dá)式expression是一個(gè)滿足SQL語法的字符串。如果你要省略表達(dá)式,則使用一個(gè)空字符串(""),這個(gè)方法返回由符合空間查詢條件的要素組成的記錄集。SearchShape主要有兩種形式:1、通過距離來搜索元素:SearchByDistance對在一個(gè)或多個(gè)形狀的限定范圍內(nèi)元素進(jìn)行定位,使用MapLayer目標(biāo)上的SearchByDistance法。語法為:SearchByDistance(ShapeASObject,DistanceASDouble,[ExpressionasString])ASRecordsetShape:可以是Point、Line、Rectangle或Polygon;Distance距離值:使用MapLayer的地圖單位;英尺,米,或其它。SearchByDistance法接受一個(gè)或一集的點(diǎn),線,矩形或多邊形目標(biāo)。并且選定所有全部或部分在限定距離內(nèi)的元素。Expression:可以任意地用一ANSISQL語句的條款來進(jìn)一步地限定選擇,類似SQL的WHERER字句一致。如果不選擇的話,那所有符合空間搜索的元素將在記錄集中被選中。2、通過表達(dá)式搜索元素:SearchExpressionSearchExpression法接受一ANSISQL語句并且返回一包括所有滿足表達(dá)式的元素的記錄集。語法為:SearchExpression(ExpressionasString)AsRecordset其中的Expression語法與SQL的WHERER字句一致。3、通過幾何圖形搜索元素:SearchShapeSearchShape可以通過某個(gè)或某些幾何對象查詢與其相關(guān)聯(lián)的其他地理對象。與前兩種方式比較而言,其查詢更為靈活多樣和復(fù)雜。(1)用于多邊形要素的查詢語法:SetobjRecset=Objmaplayer.SearchShape(shape,searchMethod,expression)參數(shù)說明:objRecset:用戶定義的記錄集對象變量Objmaplayer:用戶定義的一個(gè)矢量圖層對象變量。Shape:一個(gè)矢量圖形(Shape)對象(可能是點(diǎn)、點(diǎn)集、線段、多邊形等)。此外,對于shape對象,你可以指定一個(gè)記錄集對象來表示ESRIshape文件(或ARC/INFO數(shù)據(jù)或VPF文件或CAD文件)中的全部或部分要素。(注意:不能將一個(gè)由SDE圖層導(dǎo)出的記錄集對象賦給這個(gè)參數(shù))。Expression:一個(gè)構(gòu)成SQL語句的'where'從句部分的字符串。searchMethod:一個(gè)用于指定空間查找規(guī)則的類型的整型數(shù)或MO常數(shù)。目標(biāo)要素與shape的關(guān)系必須滿足所設(shè)參數(shù)指定的關(guān)系。MO提供15種查詢方式,以查詢與其相關(guān)聯(lián)的其他地理對象。分別為:moPointInPolygon:此參數(shù)要求Objmaplayer是一個(gè)多邊形圖層,shape是一個(gè)點(diǎn)對象;判斷一個(gè)點(diǎn)的坐標(biāo)是否落在一個(gè)多邊形要素中;moExtentOverlap:返回與Shape最小外包矩形相交或重合的對象;moCommonPoint:返回與Shape有一個(gè)或多個(gè)共同點(diǎn)的對象;moCommonLine:返回與Shape至少有一條共同線的對象;moLineCross:返回與Shape相交的所有對象;moCommonPointOrLineCross::返回與Shape有公共點(diǎn)或與Shape相交的所有對象;moAreaIntersect:若Shape為多邊形,返回完全或部分被包含的對象;moAreaIntersectNoEdgeTouch:若Shape為多邊形,返回完全被包含的對象;即不返回與其邊界相交的對象。moEdgeTouchOrAreaIntersect:返回完全或部分在Shape內(nèi)的對象,及完全或部分被包含在Shape內(nèi)的對象;moContainedBy:返回完全包含Shape的對象;moContaining:返回Shape完全包含的對象;moContainedByNoEdgeTouch:返回完全包含Shape(包括邊界)的對象,且邊界不能有任何相交;moContainingByNoEdgeTouch:返回Shape完全包含的對象,且邊界不能有任何相交;moCentroidInPolygon:返回中心在Shape中的所有多邊形對象;moIdentical:返回與Shape重合的對象(對象類型和地理坐標(biāo)完全相同)。(2)用于線要素和點(diǎn)要素的查詢語法:SetobjRecset=Map1.Layers(index).SearchByDistance(shape,tolerance,expression)參數(shù)說明:tolerance:一個(gè)表示距離的數(shù)值表達(dá)式.在此方法中,用于確定在指定的容錯(cuò)范圍內(nèi)有哪些要素被選中。如:PrivateConstSEARCHTOLPIXELS=3’指定容錯(cuò)距離為3個(gè)像素theTol=Map1.ToMapDistance(SEARCHTOLPIXELS*Screen.TwipsPerPixelX)‘將地圖控件上3個(gè)像素所表示的距離轉(zhuǎn)換成地圖單位表示的距離,以此確定容錯(cuò)距離其中Screen.TwipsPerPixelX返回水平度量對象(TwipsPerPixelX)的每一像素中的緹數(shù)。(緹是一個(gè)與屏幕無關(guān)的單位,用來保證屏幕應(yīng)用程序?qū)ζ聊辉氐亩ㄎ缓捅壤谒械娘@示系統(tǒng)上的一致性。1Twip=1/20Point=1/1440nch=1/567cm(打印時(shí)的一英寸或一厘米所對應(yīng)的屏幕上的長度)。Expression:一個(gè)構(gòu)成SQL語句的'where'從句部分的字符串。注意MapObjects遵遁ANSISQL標(biāo)準(zhǔn),而不是JetDatabaseEngineSQL標(biāo)準(zhǔn)。Shape:一個(gè)圖形(Shape)對象(可能是點(diǎn)、點(diǎn)集、線段、多邊形等)。此外,對于shape對象,你可以指定一個(gè)記錄集對象來表示ESRIshape文件(或ARC/INFO數(shù)據(jù)或VPF文件或CAD文件)中的全部或部分要素。(注意:你不能將一個(gè)由SDE圖層導(dǎo)出的記錄集對象賦給這個(gè)參數(shù))。四、實(shí)驗(yàn)步驟及方法1.當(dāng)前圖層信息查詢新建一個(gè)窗體,用以顯示圖層信息。窗體上放置4個(gè)TextBox,5個(gè)Label。如下圖:示例程序:PrivateSub圖層屬性_Click()DimmlayerAsMapObjects2.MapLayerDimgcsAsNewMapObjects2.GeoCoordSysDimpcsAsNewMapObjects2.ProjCoordSysDimIndexAsLongIndex=legend1.getActiveLayerIfIndex>=0Then'確認(rèn)當(dāng)前有活動圖層Setmlayer=Map1.Layers(Index)Ifmlayer.shapeType=moShapeTypeLineThen'判斷圖層類型圖層屬性信息.LabLyType.Caption="線層"ElseIfmlayer.shapeType=moShapeTypePointThen圖層屬性信息.LabLyType.Caption="點(diǎn)層"ElseIfmlayer.shapeType=moShapeTypePolygonThen圖層屬性信息.LabLyType.Caption="面層"EndIfIfmlayer.CoordinateSystem.IsProjectedThen'確認(rèn)當(dāng)前圖層有坐標(biāo)和投影信息Setpcs=mlayer.CoordinateSystem圖層屬性信息.LabGeoCoordSys.Caption=pcs.GeoCoordSys.Datum.Name圖層屬性信息.LabMapUnint.Caption=pcs.Unit.Name圖層屬性信息.LabPro.Caption=pcs.Projection.NameElseSetgcs=mlayer.CoordinateSystem圖層屬性信息.LabGeoCoordSys.Caption=gcs.Datum.Name圖層屬性信息.LabMapUnint.Caption="未知"圖層屬性信息.LabPro.Caption="未知"EndIf圖層屬性信息.ShowElseIfIndex=-1ThenMsgBox"請選擇圖層!",vbCritical,"提示"ExitSubEndIfEndSub圖層屬性信息窗體初始化:PrivateSubForm_Load()DimIndexAsLongIndex=石河子旅游信息查詢系統(tǒng).legend1.getActiveLayerSetmlayer=石河子旅游信息查詢系統(tǒng).Map1.Layers.Item(Index)txtLayerName=mlayer.Name'在文本框顯示當(dāng)前圖層名EndSub2.點(diǎn)擊查詢及其信息顯示新建一個(gè)Identify窗體,用以顯示查詢信息。窗體上放置一個(gè)ComboBOX,一個(gè)TextBox,一個(gè)ListView,并將其view屬性改為。如下圖:代碼示例:'點(diǎn)擊查詢identifyPublicrecsetAsNewMapObjects2.RecordsetPrivateConstSEARCHTOLPIXELS=1DimptAsMapObjects2.PointDimmlAsMapObjects2.MapLayerDimtheTolAsDoubleDimfldAsFieldDimnewItemAsListItemSetpt=Map1.ToMapPoint(x,y)'將平面坐標(biāo)轉(zhuǎn)換為地圖坐標(biāo)theTol=Map1.ToMapDistance(SEARCHTOLPIXELS*Screen.TwipsPerPixelX*3)'返回水平TwipsPerPixelX(TwipsPerPixelX)或垂直(TwipsPerPixelY)度量的對象的每一像素中的緹數(shù),'Screen.TwipsPerPixelX屏幕橫向(X)分辨率,Screen.TwipsPerPixelY屏幕縱向(Y)分辨率'將地圖控件上3個(gè)像素所表示的距離轉(zhuǎn)換成地圖單位表示的距離,以此確定容錯(cuò)距離ForEachmlInMap1.LayersIfml.Visible=TrueAndml.LayerType=moMapLayerThenSetrecset=ml.SearchByDistance(pt,theTol,"")'ListItem1.Add(index,key,text,icon,smallIcon)'如果搜索到對象,則顯示字段和對應(yīng)的字段值IfNotrecset.EOFThen'EOF指示當(dāng)前記錄位置位于Recordset對象的最后一個(gè)記錄之后identify.ListView1.ListItems.Clear'清除當(dāng)前ListItems顯示的信息ForEachfldInrecset.Fields'訪問字段集中的每個(gè)字段SetnewItem=identify.ListView1.ListItems.Add'添加ListItem對象到ListView控件的ListItems集合中并返回對新創(chuàng)建對象的引用'語法為:ListItem1.Add(index,key,text,icon,smallIcon)newItem.Text=fld.Name'添加字段名作為第一列表格中的文字newItem.SubItems(1)=fld.ValueAsString'獲得屬性值'添加屬性值作為第二列表格中的文字Nextfldidentify.Text1.Text=""&pt.x&","&pt.y&""EndIfEndIfNextMap1.FlashShaperecset.Fields("Shape").Value,2'使選中的要素閃爍2次identify.Show'Identify窗體初始化PrivateSubForm_Load()lyrCount'調(diào)用lyrCountSetCol=ListView1.ColumnHeaders.Add()'添加ColumnHeader對象到ListView控件的列集合中'語法:ListView1.ColumnHeader.Add(index,key,text,width,alignment)Col.Text="屬性字段"SetCol=ListView1.ColumnHeaders.Add()Col.Text="屬性值"EndSubPublicFunctionlyrCount()Combo1.ClearForEachlIn石河子旅游信息查詢系統(tǒng).Map1.LayersCombo1.AddIteml.Name'把layers中的所有圖層名依次加入Combo條目NextlCombo1.Text=Combo1.List(0)EndFunction3.屬性表查詢新建一個(gè)窗體,用以顯示圖層的完整屬性表信息。窗體上放置一個(gè)ComboBOX,一個(gè)ListBox,一個(gè)ListView,并將其view屬性改為。界面和運(yùn)行結(jié)果如下圖:示例程序:'加載窗體,顯示圖層名PrivateSubForm_Load()Combo1.ClearForEachlIn石河子旅游信息查詢系統(tǒng).Map1.LayersCombo1.AddItem

溫馨提示

  • 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

提交評論