基于分幅圖的圖形管理系統(tǒng)設計與開發(fā) - 南通市測繪院有限公司.doc_第1頁
基于分幅圖的圖形管理系統(tǒng)設計與開發(fā) - 南通市測繪院有限公司.doc_第2頁
基于分幅圖的圖形管理系統(tǒng)設計與開發(fā) - 南通市測繪院有限公司.doc_第3頁
基于分幅圖的圖形管理系統(tǒng)設計與開發(fā) - 南通市測繪院有限公司.doc_第4頁
基于分幅圖的圖形管理系統(tǒng)設計與開發(fā) - 南通市測繪院有限公司.doc_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于分幅圖的圖形管理系統(tǒng)設計與開發(fā)齊志飛,徐亞軍(南通市測繪院有限公司,江蘇 南通 226006)摘 要 城市測繪單位都要面臨管理大量按分幅存儲的圖形數(shù)據(jù)的問題。對圖形數(shù)據(jù)的管理和更新已經(jīng)成為影響生產(chǎn)效率的因素之一。對于如何建立有效快速的管理手段,突破對圖形調(diào)用、更新的效率瓶頸,本文給出一種以數(shù)據(jù)庫為工具、輔以軟件開發(fā)的解決方式,設計實現(xiàn)了AutoCAD平臺下基于分幅圖的圖形管理系統(tǒng)。關鍵詞 分幅圖 AutoCAD SQL Server VBA1 系統(tǒng)目標與規(guī)劃建立一個用于管理分幅數(shù)據(jù)、多比例尺、多用途(地形、地籍、房產(chǎn)等)、具有圖形更新與歷史數(shù)據(jù)管理功能、調(diào)用方便且效率較高的,為數(shù)據(jù)管理員提供服務的圖形管理系統(tǒng)。2 功能設計與整體結(jié)構(gòu)2.1功能設計分幅圖形管理系統(tǒng)圖形存儲圖形調(diào)用歷史圖庫圖幅更新 圖1 分幅圖管理系統(tǒng)的功能設計2.2整體結(jié)構(gòu)SQL Server圖幅文件數(shù)據(jù)庫訪問接口VBAAutoCAD圖2 分幅圖管理系統(tǒng)的結(jié)構(gòu)從結(jié)構(gòu)上看系統(tǒng)依然是客戶/服務器模式。只是這里的客戶軟件是建立在AutoCAD平臺上的胖客戶端。用戶所使用的是熟悉的與AutoCAD風格一致的軟件界面;在服務器安裝的是企業(yè)級DBMS(數(shù)據(jù)庫管理系統(tǒng)),可以為管理者實現(xiàn)并發(fā)訪問、用戶管理,對開發(fā)者而言由DBMS統(tǒng)一控制并發(fā)與互斥可以減輕開發(fā)工作量,而使用數(shù)據(jù)庫事務則可提高系統(tǒng)正確性。3 系統(tǒng)設計與實現(xiàn)思路3.1數(shù)據(jù)存儲3.1.1文件入庫文件入庫的優(yōu)點是可以套用數(shù)據(jù)庫為外殼進行信息擴展,充分利用數(shù)據(jù)庫語言對文件進行查詢以及對該文件相關信息的統(tǒng)計,并且可以利用數(shù)據(jù)庫的用戶管理增加對文件訪問的權(quán)限控制。3.1.2 數(shù)據(jù)庫設計在設計數(shù)據(jù)庫結(jié)構(gòu)時,首先應考慮對圖幅更新、歷史圖庫等系統(tǒng)功能的支持,然后是符合數(shù)據(jù)庫設計的規(guī)范化要求。例如建立關系模式:分幅圖表(X#,Y#,時間#,文件類型,文件流,),可以基本達到本系統(tǒng)要求。3.2 圖幅更新圖幅更新實際并沒有將舊的圖幅文件刪除,而是自動將舊圖存入歷史圖庫,新圖存入現(xiàn)狀圖庫。3.3 歷史圖庫 圖幅文件具有時間特性,這就建立了以圖幅為單位的歷史庫。首先對某幅圖來講,可以獲知該圖幅更新的次數(shù)、時間等;就時間而言可以獲知某時間區(qū)間內(nèi)對哪些圖幅進行了更新。在圖形調(diào)用的過程中,若非用戶專門指定,系統(tǒng)默認訪問現(xiàn)狀圖庫。3.4 圖形調(diào)用圖形調(diào)用是系統(tǒng)設計、應用的重點,該功能的設計有兩個前提:其一是準備接合表(以主要道路、河流作為背景,繪制分幅格網(wǎng)),確立地圖比例尺、坐標計算關系。接合表的作用是索引和定位,因此須準備測區(qū)內(nèi)的整張接合表。接合表的定位得出的結(jié)果僅僅是任意坐標值,顯然只有計算出其所在分幅圖的左下角坐標,才可查找的坐標所對應的分幅圖文件。將計算關系確定后,程序可適用于任意地圖比例尺的計算。另一個前提是關于工作區(qū)。分幅圖在工作區(qū)內(nèi)拼接成為用戶所需的結(jié)果圖。工作區(qū)也是普通的DLG文件(例如AutoCAD的DWG、MapInfo的TAB文件等)。工作區(qū)可以有多個,但只有一個為當前工作區(qū),當前的工作區(qū)可以切換。3.4.1基本圖形調(diào)圖功能基本圖形調(diào)圖功能在這里指由用戶輸入坐標或范圍,由程序完成計算和調(diào)圖。用戶輸入或選擇圖形時也確定了坐標信息,根據(jù)地圖比例尺、文件名與坐標之間的計算關系,坐標所在的圖幅便可確定。用戶以點方式、開窗方式、多邊形,分別計算該圖形對象所涉分幅圖,將其調(diào)入工作區(qū)內(nèi)。3.4.2地理名稱調(diào)圖實際地圖管理中往往需要以地名、河名、路名等地理名稱為關鍵字,到分幅圖圖庫中查詢訪問地圖。由于地名、河名、路名不可由坐標直接計算得出其所涉及圖幅,只有建立地理名稱與坐標或具體圖幅之間的關系并將之有效組織后存儲,才便于按地理名稱調(diào)圖。地理名稱調(diào)圖有兩個問題要解決:一是地理名稱與空間位置存儲關系的確立,一是地理名稱與空間位置查詢關系的確立。顯然存儲關系決定查詢關系。地理名稱與空間位置存儲關系最容易想到的組織方式有兩種,一種是以數(shù)據(jù)庫方式存儲,例如建立關系模式:地理名稱位置(地理名稱,圖幅編號),地理名稱與圖幅編號之間是多對多的聯(lián)系。但該方式工作量巨大,而且當?shù)匚飳ο笪恢酶淖儠r,地理名稱位置庫維護代價同樣不??;另一種方式是在地理名稱與空間位置之間,通過圖形對象使二者建立聯(lián)系,即接合表將主要河流、道路、單位點或輪廓線等地物表示其上,并為之添加屬性信息,進而建立了“屬性圖形對象坐標范圍涉及圖幅”的查詢鏈。本文選用后者。這種查詢關系不同于單純的空間索引,由于查詢的對象為單一的、大小一致的圖幅,因此比空間索引在邏輯上要簡單,即不需要自頂向下、逐級劃分的復雜過程;也不同于純屬性的關系數(shù)據(jù)庫的查詢,而是兼有空間索引和關系表索引的特點。3.4.3 圖號調(diào)圖圖幅號經(jīng)常被用來指定一分幅圖,圖號調(diào)圖也是有實際意義的。圖號調(diào)圖的范圍可以是相對集中,也可以離散地分布于各處。為提高效率,可以為用戶提供兩種輸入圖幅號的用于批處理的方式:一是用戶在程序界面內(nèi)直接輸入一個或多個圖號;一是用戶將多個圖號集中輸入到文本文件,操作時用戶在通用對話框中選擇該文件,由程序從文本文件中讀出用戶欲訪問的圖幅號。3.4.4 圖形調(diào)用的設計特點1“添加/清除”開關程序中將“添加/清除”設為一個開關,當狀態(tài)為開時,操作即為向工作區(qū)內(nèi)插入符合條件的圖幅;否則即為關閉工作區(qū)內(nèi)符合條件的圖幅?!罢{(diào)入工作區(qū)內(nèi)”具有雙重的含義。2預先顯示圖幅范圍用戶在地理名稱或圖號等方式調(diào)圖時,往往并無坐標范圍概念。程序在將圖幅調(diào)入工作區(qū)內(nèi)之前計算坐標,閃爍選擇集或用醒目顏色填充將調(diào)入的圖幅范圍。以此給用戶直觀印象,此時用戶可確認也可取消。3避免重復插入用戶想插入的圖幅往往已經(jīng)存在于工作區(qū)中,程序應該控制重復插入。為此當前工作區(qū)中已包含圖幅的信息可以專門存儲于臨時數(shù)據(jù)庫中,當工作區(qū)中切換時須掃描當前工作區(qū)包含了哪些圖幅,更新該數(shù)據(jù)庫中的記錄;在插入某一圖幅時先查詢庫中是否存在該圖幅記錄,存在則本幅不進行插入,不存在則插入圖幅,并將本圖幅記錄添加到庫中;關閉某一圖幅時將本圖幅記錄從庫中清除。如此庫中關于圖幅的記錄集合與工作區(qū)中包含的圖幅集合保持同步,將不會發(fā)生重復插入。4當前文檔無關性在AutoCAD、Word等多文檔界面(MDI)程序中,只有一個文檔是被當前激活的,這意味著工作區(qū)或接圖表中只有其一為當前文檔。為增大程序的靈活性,無論當前文檔是接圖表還是工作區(qū),程序都應能對用戶做出響應。即用戶在接圖表和工作區(qū)都可以用圖形調(diào)圖、地理名稱調(diào)圖、圖號調(diào)圖,視實際需要而定。4 主要技術(shù)介紹4.1 ADO技術(shù)簡介ADO(ActiveX Data Objects)是對OLE DB的一種高性能、使用方便的應用程序接口。ADO的實現(xiàn)只需要占用很小的區(qū)域和很少的網(wǎng)絡資源。同時應用程序與數(shù)據(jù)資源之間的層次也少。ADO是COM自動接口,所有流行的RAD(快速應用程序開發(fā))工具、數(shù)據(jù)庫工具、應用程序開發(fā)環(huán)境和腳本語言都可以訪問這種接口。ADO相對ODBC更易于使用,并且ADO訪問SQL Server具有較高的效率。4.2關于LargeObject字段SQL Server和Oracle等大中型數(shù)據(jù)庫等提供了LargeObject字段,使文件能夠以二進制格式存儲于數(shù)據(jù)庫記錄中。LargeObject是變長字段,可以按所存文件的大小自動分配存儲空間。其中SQL Server的LargeObject最大容量為每條記錄2GB,能夠滿足絕大部分的分幅圖存儲需求。4.3開發(fā)工具選擇VBAVBA即Visual Basic For Application,有許多大型軟件都提供了VBA編程環(huán)境,如Office、WPS2005、ArcGIS等。VBA運行環(huán)境與主軟件共享進程空間,具有高的執(zhí)行效率。VBA同樣支持PME(屬性、方法、事件)模型,支持ActiveX控件使用,支持Windows API調(diào)用等。但VBA相對Visual Basic在某些特性上有限制,比如控件的句柄(hwnd)不可使用,沒有非模式對話框等。VBA與Visual Basic一樣易于使用,具有較高的開發(fā)效率。5 若干需要注意的問題5.1 數(shù)據(jù)庫容量限制與文件組容量限制數(shù)據(jù)庫的文件組的大小在數(shù)據(jù)庫的屬性項中可以設置,如圖3所示。隨著分幅圖圖庫的不斷充實,數(shù)據(jù)庫的字節(jié)數(shù)也會越來越大。一種可以選擇的方式是讓數(shù)據(jù)庫文件隨庫中記錄自動增大,并且文件增長所限的最大容量應為適當。另外對數(shù)據(jù)庫日志的維護也采用類似的方式,可以減少許多數(shù)據(jù)庫維護的工作。圖3 設置數(shù)據(jù)庫容量與文件容量5.2 ADO引用圖4 添加ADO引用ADO既然是COM自動接口,也就沒有集成在VBA內(nèi)部,需要為VBA項目添加引用,如圖4。添加ADO引用后,Connection、Command、Recordset等對象才可以正常使用。6 程序開發(fā)舉例6.1 讀寫存儲于數(shù)據(jù)庫中的文件 Dim Conn As New ADODB.Connection Conn.ConnectionString = Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=NTchInfoManager;Data Source=QZF Conn.Open Dim rs As New ADODB.Recordset Set rs = Conn.Execute(select * from CeHuiJiShuSJLObj) Dim myStream As New ADODB.Stream myStream.Type = adTypeBinary myStream.Open myStream.Write rs.Fields(文件流).Value Dim SaveFName As String, FileExtName As String SaveFName = c: + Trim(rs.Fields(文件名).Value) myStream.SaveToFile SaveFName, adSaveCreateOverWrite FileExtName = UCase(Right(SaveFName, 4) Select Case FileExtName Case .TXT ShellExecute 0, open, notepad.exe, SaveFName, , 1 Case .DOC ShellExecute 0, open, Winword.exe, SaveFName, , 1 Case .XLS ShellExecute 0, open, Excel.exe, SaveFName, , 1Case .DWGThisDrawing.Application.Documents.Open SaveFName Case .TAB End Select以上列出了讀取數(shù)據(jù)庫LargeObject字段,轉(zhuǎn)存為文件并打開的代碼。其中ADODB.Stream是ADO2.5以上版本提供的數(shù)據(jù)類型,ShellExecute是Windows系統(tǒng)提供的API(需要用Declare語句聲明)。寫入LargeObject字段的步驟與讀取類似,需要先將文件加載至Stream對象中,然后賦值給數(shù)據(jù)集的相應字段即可。6.2 地理名稱調(diào)圖實現(xiàn)AutoCAD良好的開發(fā)環(huán)境使其功能具有極大的拓展空間。AutoCAD的快速選擇工具應用效果良好,但能做選擇條件的屬性僅僅為圖層、線型、顏色、厚度等固有屬性,而在VBA for AutoCAD中選擇集的過濾條件也可以是Xdata擴展數(shù)據(jù)。因此以Xdata擴展數(shù)據(jù)存儲地物對象的屬性,在地理名稱調(diào)圖中便于維護“屬性圖形對象坐標范圍涉及圖幅”查詢鏈。部分代碼如下:Sub SelectPLineByXdataRoadName() 根據(jù)路名Xdata選擇路 RoadName = SelectName(路名) 由用戶輸入要調(diào)圖的路名 If RoadName = Then Exit Sub OpenJieTuBiao 打開接圖表 sset.Clear GroupCode(0) = 1001: DataValue(0) = ROAD_INFO 設置選擇過濾條件 sset.Select acSelectionSetAll, , , GroupCode, DataValue 選擇道路 If sset.Count = 1 Then ReDim ArrClearEntity2(0 To ClearEntityCount - 1) As AcadEntity For i = 0 To ClearEntityCount - 1 Set ArrClearEntity2(i) = ArrClearEntity(i) Next sset.RemoveItems ArrClearEntity2 將不是用戶要調(diào)入的道路從選擇集中清除 End If閃爍選擇圖幅范圍, 由用戶確認 If SplashRectByPolyLineSelection(sset, Spl

溫馨提示

  • 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

提交評論