GIS中查詢功能的實現(xiàn)_第1頁
GIS中查詢功能的實現(xiàn)_第2頁
GIS中查詢功能的實現(xiàn)_第3頁
GIS中查詢功能的實現(xiàn)_第4頁
GIS中查詢功能的實現(xiàn)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、地理科學與旅游學院2011-2012GIS 設(shè)計與開發(fā)課程實驗報告實驗二單值專題圖的生成以及GIS中查詢功能的實現(xiàn)班級:095班姓名:陳佩儀學號:2090822136指導教師:鐘廣銳實驗時間:2011年11月評閱:成績:2011 年 11 月制表實驗二(1) 單值專題圖的生成一實驗項目內(nèi)容:生成單值專題圖并風格化摘要:SuperMap 2003的單值專題圖在傳統(tǒng)的專題地圖中屬于精確分區(qū)的質(zhì)底法,將全 制圖區(qū)域按照專題現(xiàn)象的某種指標劃分區(qū)域或各類型的分布范圍,在各界線范圍內(nèi)涂以顏色 或填繪暈線、花紋(乃至注記),以顯示連續(xù)而布滿全制圖區(qū)域的現(xiàn)象質(zhì)的差別(或各區(qū)域 間的差別),可用于地質(zhì)圖、地貌圖

2、、植被圖、土地利用圖、政治行政區(qū)劃圖、自然區(qū)劃圖 經(jīng)濟區(qū)劃圖等?;舅悸罚焊鶕?jù)專題要素的取值不同,賦于地圖區(qū)域不同的風格。通過查找對象結(jié)果圖 以及各類對象的屬性、事件、方法作為解決方案。傳統(tǒng)的專題地圖是利用圖例控件一選擇圖 層一單擊右鍵一專題圖向?qū)Вm然這種方法制作專題圖比較簡便,但卻顯得較為單一、不能 控制。本次實驗則選擇利用SuperMap軟件提供的對象,編寫代碼對其進行制作。四.實驗所用控件的屬性、事件、方法,如下表所示:屬性事件方法Commondialogl(打開工作空間 控件).DialogTitle= “打開工作空間控 件”、.filter=app.path、.initdir= 工

3、作空間控件文件 (*.smw)l*.smwShowopen 方法Command1.Caption=打開Click ()事件2.Caption=” 退出”3.Caption=”生成單值專題圖”;3.Enabled=False4.Caption=” 放大”;5.Caption=” 縮小”;6.Caption=” 漫游”;7.Caption=”全幅顯示”8.Caption=”自由縮放”SuperlegendlModified 事件,ReadyStateChang e事件Connect 方法Disconnect 方法Refresh 方法SuperWorkspacel.DatasourcesOpenDa

4、tasource ()方法、Close方 法SuperMapl.Action=”放大”、”縮小”、”漫 游”、”全幅顯示”、”自由縮放”;Connect 方法、Disconnect 方 法、Refresh方法 Close方法Combo1.Listindex=0Clear方法2.AddItem五.實驗過程分析及主要實驗步驟:1)專題圖的數(shù)據(jù)集一一圖層對象Solayer (圖層的選擇) 打開數(shù)據(jù)源,得到數(shù)據(jù)集集合,圖層疊加并生成地圖,列出圖層以供客戶選擇,列出所選中 圖層的字段名。此時程序必然得到一個客戶選定的圖層。2)生成單值專題圖定義專題圖對象,并賦值:Dim objThemeUnique A

5、s soThemeUnique /單值專題圖對象設(shè)置缺省的單值專題圖屬性和狀態(tài),利用MakeDeault方法。設(shè)置專題圖參數(shù):設(shè)定字段,填充顏色參數(shù)等。根據(jù)客戶選擇的圖層,先將其轉(zhuǎn)成矢量數(shù)據(jù)集,再轉(zhuǎn)換成記錄集,然后在combo2中顯示 字段信息集,再采用循環(huán)循環(huán)結(jié)構(gòu)循環(huán)數(shù)據(jù)集:通過矢量數(shù)據(jù)集的 GetFieldInfos 方法,列 出屬性的字段信息?;玖鞒虨椋菏噶繑?shù)據(jù)集Objlayer.Dataset記錄集T矢量數(shù)據(jù)集.Query 方法T定義賦值SoFieldInfosT記錄集.GetFieldInfos。規(guī)定專題圖的專題變量為“SMID”。風格化:為每個不同的單值對象填充不同的顏色,利用o

6、bjThemeUnique的ValueCount屬 性,獲取專題要素的填充色;利用objcolors的MakeRandomColorset方法,產(chǎn)生一組隨機數(shù)。圖例控件的使用:通過對圖例控件的使用,從而達到圖層的管理和操作。本次實驗通過 modified ()事件使得當圖例控件發(fā)生改變時,能實現(xiàn)兩個控件的刷新。一般我們可以通過 屬性表來設(shè)置圖例控件的狀態(tài)。六界面設(shè)計及關(guān)鍵代碼部分:界面設(shè)計:1.1 界面設(shè)計關(guān)鍵代碼部分:圖層選擇:選擇圖層,先轉(zhuǎn)成矢量數(shù)據(jù)集,再轉(zhuǎn)換成記錄集,然后在combo2中顯示字 段信息集,再采用循環(huán)循環(huán)結(jié)構(gòu)循環(huán)數(shù)據(jù)集Dim objsellayer As soLayerSe

7、t objsellayer = SuperMap1.Layers.Item(Combo1.ListIndex + 1)Dim objdv As soDatasetVectorSet objdv = objsellayer.Dataset 如果有柵格圖層,會出錯!一般有兩種解決方案,一是 加圖層類型的判斷,可以用sodataset.vector判斷數(shù)據(jù)集是否是矢量?二是通過一些方法使柵 格數(shù)據(jù)也可以列出,但不影響使用If objdv.Vector = False Then判斷是否柵格數(shù)據(jù)MsgBox 不是矢量數(shù)據(jù)集Combo2.ClearElseDim objrs As soRecordsetS

8、et objrs = objdv.Query(, True)Dim objfieldinfos As soFieldInfosSet objfieldinfos = objrs.GetFieldInfos獲得所有字段的屬性集Dim i As IntegerCombo2.ClearFor i = 1 To objfieldinfos.CountCombo2.AddItem objfieldinfos.Item(i).Name 利用循環(huán)結(jié)構(gòu),將字段添加到 Combo2 組合框中NextCombo2.ListIndex = 0 默認選中第一項打開數(shù)據(jù)源,列出數(shù)據(jù)集于組合框中,圖層疊加,顯示地圖 Su

9、perMap1.CloseSuperMap1.Disconnect 如果已有打開數(shù)據(jù)源,先斷開鏈接,關(guān)閉工作空間控件,以防止出錯 SuperLegend1.DisconnectSuperWorkspace1.CloseCommonDialog1.ShowOpenDim objdataSource As soDataSource定義變量、賦值strAlias = tempDatasource設(shè)置數(shù)據(jù)源別名Set objdataSource = SuperWorkspace1.OpenDataSource(CommonDialog1.FileName, strAlias,sceSDB, True)

10、利用OpenDataSource ()方法,返回一個數(shù)據(jù)源對象If objdataSource Is Nothing ThenMsgBox 打開失敗, vbInformation判斷文件是否成功打開ElseMsgBox 打開成功, vbInformation成功選擇好數(shù)據(jù)源后,在列表框中列出數(shù)據(jù)集SuperMap1.Connect SuperWorkspace1.Handle 建立 Supermap 與 Superworkspace 控件連接 SuperLegend1.Connect SuperMap1建立 superlegend 與 SuperMap 的連接Dim objdatasets A

11、s soDatasets定義數(shù)據(jù)集集合Set objdatasets = objdataSource.Datasets 獲取數(shù)據(jù)集集合If objdatasets Is Nothing Then 判斷數(shù)據(jù)源中是否有數(shù)據(jù)集Combo1.ClearMsgBox 沒有數(shù)據(jù)集!, vbInformationExit SubElseCombo1.ClearFor i = 1 To objdatasets.Count將獲得的數(shù)據(jù)集添加到數(shù)據(jù)集列表中Set objdataset = objdatasets.Item(i)Dim objlayer As soLayerSet objlayer = SuperM

12、ap1.Layers.AddDataset(objdataset, True) 圖層疊加,生成地圖If objdatasets.Item(i).Vector = True Then 判斷是否為矢量圖層Combo1.AddItem objdataset.Name將獲得的圖層列出在組合框中End IfNextCombo1.ListIndex = 0默認選擇為第一項Command3.Enabled = True 當成功打開數(shù)據(jù)源,并列出數(shù)據(jù)集,圖層疊加,生成地圖時, 激活生成單值專題圖的按鈕SuperMap1.Refresh刷新地圖End IfEnd IfSet objdataSource = No

13、thing使用完畢,釋放對象Set objdatasets = NothingSet objlayer = Nothing生成單值專題圖,并風格化Set objThemeUnique = SuperMap1.Layers.Item(Combo1.ListIndex + 1).ThemeUnique Dim themefield As Stringthemefield = Combo2.List(Combo2.ListIndex)With objThemeUnique.Enable = True啟動并顯示專題地圖.Field = SmID規(guī)定專題變量為 SMID.MakeDefault Make

14、Default方法,用于制作缺省的單值專題圖,否則ValueCount的值為0 SuperMap1.RefreshnThemeCount = .ValueCount設(shè)置專題圖中所包含的分類類別的數(shù)目objColor.MakeRandomColorset nThemeCount 產(chǎn)生一組隨機色For i = 1 To nThemeCount設(shè)置各個專題元素的隨機色.Style(i).BrushColor = objColor(i)Next iSuperMap1.RefreshSuperLegend1.RefreshEnd With地圖瀏覽的操作:SuperMap1.Action = scaZoo

15、mIn放大SuperMap1.Action = scaZoomOut縮小SuperMap1.Action = scaPan漫游SuperMap1.ViewEntire全幅顯示SuperMap1.Action = scaZoomFree自由縮放 5) a.圖例控件的Modified()事件:當圖例控件發(fā)生了改變,貝I刷新地圖SuperMap1.RefreshSuperLegend1.RefreshDim i As Integer更新圖層組合框中的圖層順序Combo1.ClearFor i = 1 To SuperMap1.Layers.CountCombo1.AddItem SuperMap1.

16、Layers.Item(i).Dataset.NameNextCombo1.ListIndex = 0b.圖例控件的ReadyStateChange()事件:當通過圖例控件改變可編輯圖層后觸發(fā)此事件, 重新設(shè)置索引號。代碼如下: SuperMap1.Layers.SetEditableLayer nIndex七.運行調(diào)試:出現(xiàn)過圖例控件無法顯示的情況,經(jīng)調(diào)試發(fā)現(xiàn)之前沒有斷開superlegend的 連接,導致出現(xiàn)錯誤。實驗中還存在著一定的問題,如有些圖層無法實現(xiàn)單值專題圖的制作 當出現(xiàn)柵格數(shù)據(jù)時顯示錯誤,這些問題都有待解決。ZJ打開退出打開退出敢夫 縮小 漫游全輻顯示 自由縮放耳 Forml圖

17、例控件申回 Wo rid tem pData sou rce 叼文 Continent_LabletempD 叼文 Country_LabletempDatE 叼文 Ocean_LabletempDatas 7 :ZJ打開退出打開退出敢夫 縮小 漫游全輻顯示 自由縮放耳 Forml圖例控件申回 Wo rid tem pData sou rce 叼文 Continent_LabletempD 叼文 Country_LabletempDatE 叼文 Ocean_LabletempDatas 7 : CapitaltempDatasource Oceantem pData source 7 Grid

18、 tem pData sou rce 7 ATUNtempDatasource0 Forml敢犬 |縮小| 屢游 |全幅顯示|自由縮膠|罔層迭擇導段迭擇jCouritry打開地囹一警告=您的運行版本沒有注冊 諸調(diào)用 SuperWorks pace. RegisterForRuntim 注冊運行版生咸單值專題圖囹例控件一田Pll I WorldtempDatasource El文 Son inent_LabletempDEl文 2ountry_La bletempDatiEl文 Ocean_Labletem pData s 回 o CapitaltempDatasource 由” 回ATUNte

19、mpDat a so rce 由”7 GridtempDatasource Ocean tem pData sou rce圖層選擇|Oce:m Lalilf宇段選擇打開地圖一 晉告:您的運打版本沒有注冊 請調(diào)用 SuperWorkspace.RegisterForRuntim注冊運行皈生成單值專題圉圖 1.2 運行結(jié)果顯示 八實驗小結(jié):本次實驗主要是通過對圖例控件的使用,從而實現(xiàn)對圖層的管理,并制作單 值專題圖以及實現(xiàn)圖層的風格化。在實際操作過程中,通過對圖例控件、單值專題圖對象的 屬性、事件、方法的了解,對象結(jié)構(gòu)圖的查看,利用核心步驟:a.圖層的選擇;b.確定專題 圖的類型單值專題圖對象;c

20、.專題要素的選擇;d.風格化。逐步分析問題逐步解決。從 而能更快的解決問題。實驗二(2) GIS 中查詢功能的實現(xiàn)(屬性查圖和圖查屬性)一實驗內(nèi)容:獲取地理對象的屬性和通過屬性查找地圖要素 二摘要:圖查屬性是指選中地理實體,顯示其屬性信息;屬性查圖是根據(jù)(構(gòu)造)屬性條 件,顯示地理實體(圖)三基本思路:圖查屬性的一般思路:首先我們需要選中地理實體,因此則需先切換鼠標的狀態(tài),一 般來說,選擇的方式有點選、框選、圓選、多邊形選擇等多種方式,本次可以采用點選方式 實現(xiàn)選擇,利用SuperMapl.Action=ScaSelect,可以實現(xiàn)點選的功能,此處需添加一個按鈕 控件。其次需將顯示所選擇的地理

21、實體對象的屬性,為使信息能更清晰顯示,可以添加一個 新的窗口 Form2,然后在原來的窗口 Forml上添加一個名為“屬性顯示”的按鈕,利用 Form2.Show 方法達到顯示的效果。屬性查圖的一般思路:1、獲取所需要查詢的圖層(SoLayers),并列出圖層的字段信 息。 2、建立一個查詢條件。 3、將查詢的結(jié)果高亮顯示在 SuperGridView 控件上,采用 SuperMap1.Selection.FromRecordset,將查詢的結(jié)構(gòu)轉(zhuǎn)化為記錄集,高亮顯示。 四實驗所用控件的屬性、事件、方法,如下表所示:屬性事件方法Commondialog1(打開數(shù)據(jù)源文件).DialogTitl

22、e= “打開數(shù)據(jù)源”、 .filter=app.path、.initdir= “文 件型數(shù)據(jù)源(*.sdd)l*.sdd;文件型數(shù)據(jù)源(*.sdb)l*.sdb”Supermap1.Action=”放大”、”縮小”、” 漫游”、”全幅顯示”、”自由縮 放”;Connect 方法、 Disconnect 方法、Refresh 方法 Close方法Superworkspace1.datasources、.HandleOpen 方法、Close 方法Command同實驗二1,但增加了一個 SQL杳詢按鈕和屬性杳詢按 鈕,減少了一個生成單值專 題圖按鈕。Click ()Click ()Combo1.L

23、istindex=0Additem 方法2.AddItemText1.text,允許多行顯示Form2.SuperGridView1Connect 方法;Update方法五實驗過程分析及主要實驗步驟:1) 圖查屬性:圖層的選擇以及地圖的裝載,切換鼠標操作狀態(tài)為點選:Supermap.Layers.Adddataset方 法裝載地圖,用Supermapl.Action=ScaSelect實現(xiàn)點選選擇地理實體:SO中提供了選擇集對象SoSelection來表示選中的地理實體:Dim ObjSelection As SoSelecton定義、賦值Set ObjSelection=SuperMapl.

24、Selection在SO中,選擇集獲得了值以后,是高亮顯示的屬性的顯示:Set objrecordset = SuperMapl.Selection.ToRecordset(False) 將選擇集轉(zhuǎn)化為記錄集 Form2.SuperGridView1.Connect objrecordset將記錄集放在 SuperGridView 中綁定顯示2)屬性查圖:a. SO中SQL查詢的解決方案矢量數(shù)據(jù)集的Query方法前提條件:得到矢量數(shù)據(jù)集-圖層如何轉(zhuǎn)成矢量數(shù)據(jù)集: solayer.datasesodataset-sodatasetvector;必要時可以加上相應的判斷,sodataset.vec

25、tor -列出圖層,由客戶選擇,選擇的同時,列出該圖層所包含的字段名,將第一步生成的條件 表達式,作為參數(shù),傳遞給 sodatasetvector.query六界面設(shè)計及關(guān)鍵代碼部分:1. 界面設(shè)計:圖 2.1 界面設(shè)計2關(guān)鍵代碼部分:1)圖層選擇:選擇圖層,先轉(zhuǎn)成矢量數(shù)據(jù)集,再轉(zhuǎn)換成記錄集,然后在combo2中顯示字段信息集,再 采用循環(huán)循環(huán)結(jié)構(gòu)循環(huán)數(shù)據(jù)集Dim objsellayer As soLayerSet objsellayer = SuperMap1.Layers.Item(Combo1.ListIndex + 1)Dim objdv As soDatasetVectorSet o

26、bjdv = objsellayer.Dataset 如果有柵格圖層,會出錯!一般有兩種解決方案,一是 加圖層類型的判斷,可以用sodataset.vector判斷數(shù)據(jù)集是否是矢量?二是通過一些方法使柵 格數(shù)據(jù)也可以列出,但不影響使用If objdv.Vector = False Then判斷是否柵格數(shù)據(jù)MsgBox 不是矢量數(shù)據(jù)集Combo2.ClearElseDim objrs As soRecordsetSet objrs = objdv.Query(, True)Dim objfieldinfos As soFieldInfosSet objfieldinfos = objrs.Get

27、FieldInfos獲得所有字段的屬性集Dim i As IntegerCombo2.ClearFor i = 1 To objfieldinfos.CountCombo2.AddItem objfieldinfos.Item(i).NameNextCombo2.ListIndex = 0 默認選中第一項End If2)打開數(shù)據(jù)源,生成數(shù)據(jù)集集合于組合框Combol中,疊加圖層并顯示地圖, SuperMap1.CloseSuperMapl.Disconnect 如果已有打開數(shù)據(jù)源,先斷開鏈接,關(guān)閉工作空間控件,以防止出錯 SuperWorkspacel.CloseCommonDialogl.S

28、howOpenDim objdataSource As soDataSource定義變量、賦值strAlias = tempDatasource設(shè)置數(shù)據(jù)源別名Set objdataSource = SuperWorkspacel.OpenDataSource(CommonDialogl.FileName, strAlias, sceSDB, True)利用OpenDataSource ()方法,返回一個數(shù)據(jù)源對象If objdataSource Is Nothing ThenMsgBox 打開失敗, vbInformation判斷文件是否成功打開ElseMsgBox 打開成功, vbInfor

29、mation成功選擇好數(shù)據(jù)源后,在列表框中列出數(shù)據(jù)集SuperMap1.Connect SuperWorkspace1.Handle建立 Supermap 與 Superworkspace 控件連接Dim objdatasets As soDatasets定義數(shù)據(jù)集集合Set objdatasets = objdataSource.Datasets 獲取數(shù)據(jù)集集合If objdatasets Is Nothing Then 判斷數(shù)據(jù)源中是否有數(shù)據(jù)集Combo1.ClearMsgBox 沒有數(shù)據(jù)集!, vbInformationExit SubElseCombo1.AddItem objdata

30、set.NameEnd If將獲得的圖層列出在組合框中NextCombo1.AddItem objdataset.NameEnd If將獲得的圖層列出在組合框中Next默認選擇為第一項刷新地圖Combo1.ListIndex = 0SuperMap1.RefreshEnd IfFor i = 1 To objdatasets.Count將獲得的數(shù)據(jù)集添加到數(shù)據(jù)集列表中Set objdataset = objdatasets.Item(i)Dim objlayer As soLayerSet objlayer = SuperMap1.Layers.AddDataset(objdataset, True) 圖層疊加,生成地圖If objdatasets.Item(i).Vector = True Then 判斷是否為矢量圖層End IfSet objdataSource = Nothing使用完畢,釋放對象Set objdatasets = NothingSet objlayer = Nothing3)將屬性顯示于另一個窗口 Form2 的 SuperGridView 控件中,采用按鈕控件 Comman

溫馨提示

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

評論

0/150

提交評論