基于Linux的GIS服務器設計論文_第1頁
基于Linux的GIS服務器設計論文_第2頁
基于Linux的GIS服務器設計論文_第3頁
基于Linux的GIS服務器設計論文_第4頁
基于Linux的GIS服務器設計論文_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE 畢業(yè)設計(論文)第PAGEII頁PAGE 畢業(yè)設計(論文)第PAGEI頁畢業(yè)設計(論文)設計論文題目:基于Linux的GIS服務器的設計與實現學生姓名:學生學號:專業(yè)班級:學院名稱:指導老師:學院院長:4月15日基于Linux的GIS服務器的設計與實現摘要本文首先介紹了GIS的歷史,GIS當今取得的成果,以及GIS后面的發(fā)展趨勢,再說明了一些基本概念(GIS的功能,組成,以及GIS的一些專用名詞)。接著重點介紹了GIS系統(tǒng)的設計架構以及遵循的設計原則(面向對象),OGC的規(guī)范中的幾何空間對象的WKT和WKB表現形式,WKB主要表現在BNF(巴科斯范式)的定義和組織結構,而WKB主要表現在OGC標準協(xié)會對于幾何對象在計算機的二進制流中的組織形態(tài)。 第三章在第二章的基礎上詳細的介紹和分析了GIS服務器的各個模塊的設計(與數據庫的交互,GIS中的對象體系結構,繪圖模塊的設計)。通過介紹類的結構和一些示例代碼來把設計方法更加形象的展示出來。 第四章在分析了當前的服務器的設計之上,找出當前服務器的不足之處,提出需要改進的部分和大概的解決方案。由于保證了系統(tǒng)結構的可擴展性,使得后續(xù)的改進工作能夠很好的進行。關鍵詞:GIS,OGC,WKB,WKT,設計和實現ThedesignandimplementationofGISserverAbstractAtthebeginningofthearticle,weintroducedthehistoryofGIS(GeographyInformationSystem),theachievementsofGIS.Andfinallysomebasicterminologyandconceptshavebeenintroduced.Atthesecondchapter,wegivearepresentationofthewholearchitectureandthedesignprinciples(Object-Oriented)wefollowing.ThewholeGISserverobeysthestandardsofSimpleFeaturesofOpenGISspecification:theWKTformandWKBformofspatialobjects.ThisisthecorecontentwhendesigningtheGISserver’sarchitecture.TheWKTformsemphasizeonmakingthegeometryobjecteasilytoreadbyhumanordeveloper.TheWKBformsaretryingtomakedatautilizationmaximum.Inthebaseofthepreviouschapter,thethirdchapterdescribesdetaildesignofeachmodulesmentionedinsecondchapter.Wecleartheprinciplesindetaildesignbylistsomepicturesandsourcecode.Atlast,weanalyzedthewholeGISserver’sarchitectureanddetaileddesign.Throughthat,weproposedsomeimprovementsintheGISserver,withwholeviewandthedetailview.Aswemadethesystemarchitectureeasilytoextent,ThefollowingimprovementsontheGISservercanexecutewithouttoomuchtrouble.KeyWords:GIS,OGC,WKB,WKT,Designandimplementation目錄1. 引言 01.1. GIS發(fā)展歷史 01.2. GIS國外發(fā)展現狀 11.3. GIS國內發(fā)展現狀 32. GIS系統(tǒng)概述 42.1. GIS的組成 42.1.1 硬件 42.1.2 軟件 42.1.3 數據 52.2. GIS的主要功能 52.2.1 數據輸入 52.2.2 數據編輯 52.2.3 數據的存儲與管理 62.2.4 空間查詢與分析 62.2.5 可視化表達與輸出 62.3. GIS系統(tǒng)的一些基本概念 72.3.1 地理信息系統(tǒng)(GIS) 72.3.2 地理參照系統(tǒng)(SpatialReferenceSystem) 72.3.3 矢量和柵格模式(VectorandRasterModel) 72.3.4 空間數據庫(SpatialDatabase) 82.3.5 OpenGISConsortium(OGC,開放空間協(xié)會) 82.4. 本文的結構 93. MyGIS系統(tǒng)架構設計 93.1. MyGIS系統(tǒng)選型 93.2. 空間對象的WKB和WKT標準表達方式 113.2.1 BNF(巴科斯范式) 113.2.2 WKT規(guī)范 133.2.3 WKB規(guī)范 153.3. MyGIS系統(tǒng)架構 173.4. MyGIS主要組成部分 193. MyGIS詳細設計 223.1. MyGIS對象層次結構 223.2. PostGIS的實現 243.3. MyGIS服務器與PostGIS的交互 243.4. GIS服務器繪圖模塊的設計 274. MyGIS工作總結 04.1. 需要進行的工作 04.2. 當前的解決方案 05. 結論 0致謝 0參考文獻 16. 附錄 27.1. 附錄ABNF表達式 27.2. 附錄B幾何對象的WKB表示 3引言地理信息系統(tǒng)(GIS,GeographicInformationSystem)是一種基于計算機的工具,它可以對在地球上存在的東西和發(fā)生的事件進行成圖和分析[1]。GIS技術把地圖這種獨特的視覺化效果和地理分析功能與一般的數據庫操作(例如查詢和統(tǒng)計分析等)集成在一起。這種能力使GIS與其他信息系統(tǒng)相區(qū)別,從而使其在廣泛的公眾和個人企事業(yè)單位中解釋事件、預測結果、規(guī)劃戰(zhàn)略等中具有實用價值。今天,GIS已是一個全球擁有數十萬的人員和數十億美元的產業(yè)。GIS已在全世界的中學、學院、大學里被講授。在每個領域里的專家不斷地意識到按地理的觀點來思考和工作所帶來的優(yōu)越性。本章先介紹GIS的組成,一些GIS系統(tǒng)中涉及的基本概念以及GIS應具有的功能[2]。GIS發(fā)展歷史GIS系統(tǒng)起源于50年代。由于電子計算機科學的興起和它在測量學與地圖制圖學中的應用,使人們開始有可能用電子計算機來收集、存儲和處理各種與空間和地理分布有關的圖形和屬性數據,并希望通過計算機對數據的分析來直接為管理和決策服務。1956年,奧地利測繪部門首先利用電子計算機建立了地籍數據庫,隨后各國的土地測繪和管理部門都逐步發(fā)展土地信息系統(tǒng)(LIS)用于地籍管理。60年代為GIS開拓期。1963年,加拿大測量學家R.F.Tomlinson首先提出地理信息系統(tǒng)這一術語,并建立了世界上第一個GIS--加拿大地理信息系統(tǒng)(CGIS),用于自然資源的管理與規(guī)劃。本年代內,IBM公司和COLORADO公共服務公司開始致力于用計算機工具管理公用事業(yè)的設施,也就是電力線、煤氣管道、閥門、儀表、土地等。緊接著的一個十年,其他人繼續(xù)挑戰(zhàn)"計算機化的設施管理"(FM),包括計算機制圖系統(tǒng),并且誕生了自動制圖(AM)。FM、AM、計算機輔助設計(CAD)及數據庫管理(DatabaseManagement)等學科的發(fā)展為GIS技術的發(fā)展創(chuàng)造了條件。許多大學研制了GIS軟件包,如哈佛計算機圖形與空間分析實驗室開發(fā)了SYMAP系列軟件。早期的GIS發(fā)展的另一個顯著特點是許多與GIS有關的組織與機構紛紛成立,對GIS知識傳播與技術發(fā)展起到重要的指導作用。進入70年代,受計算機軟硬件技術飛速發(fā)展的促進,GIS技術朝實用化方向發(fā)展。一些發(fā)達國家先后建立了許多專業(yè)性的土地管理信息系統(tǒng)和地理信息系統(tǒng)。與此同時,GIS軟件市場活躍。GIS技術受到政府部門、商業(yè)公司和大學的普遍重視,成為一個引人注目的領域。80年代是GIS普及和推廣應用的階段。隨著圖形工作站和PC機性能價格比的大為提高,計算機和空間信息系統(tǒng)在許多部門被廣泛應用。GIS軟硬件的發(fā)展使GIS應用從空間數據管理向空間決策支持分析邁進。GIS軟件研制和開發(fā)也取得了很大成績,涌現出一些有代表性的GIS軟件。進入90年代,隨著地理信息產業(yè)的建立和數字化信息產品在全世界的普及,GIS深入到了各行各業(yè)乃至千家萬戶,成為人們生產、生活、學習和工作中不可缺少的工具和助手。GIS國外發(fā)展現狀國外,尤其是西方地理信息系統(tǒng)的發(fā)展大致可以分為四個階段:模擬地理信息系統(tǒng)階段自19世紀以來就得到廣泛應用的地圖(包括地形圖和專題圖)——模擬的圖形數據庫和描述地理的文獻著作——模擬的屬性數據庫相結合,構成了地理信息系統(tǒng)的基本概念模型。但是,這種模擬式的、基于紙張的信息系統(tǒng)和信息過程,使得空間相關數據的存貯、管理、量算與分析、應用極為不規(guī)范、不方便和效率低下。隨著計算機科學的興起,數字地理信息的管理與使用成為必然。學術探索階段50年代,由于電子技術的發(fā)展及其在測量與制圖學中的應用,人們開始有可能用電子計算機來收集、存貯和處理各種與空間和地理分布有關的圖形和屬性數據。1956年,奧地利測繪部門首先利用電子計算機建立了地籍數據庫,隨后這一技術被各國廣泛應用于土地測繪與地籍管理。1963年,加拿大測量學家自先提出地理信息系統(tǒng)這一術語,并建立了世界上第一個地理信息系統(tǒng)——加拿大地理信息系統(tǒng)(CGIS),用于資源與環(huán)境的管理和規(guī)劃。稍后,北美和西歐成立了許多與GIS有關的組織與機構,如美國城市與區(qū)域信息系統(tǒng)協(xié)會(URISA),國際地理聯合會(IGU)地理數據收集和處理委員會(CGDPS),等等,極大地促進了地理信息系統(tǒng)知識與技術的傳播和推廣應用。飛速發(fā)展和推廣應用階段70年代以后,由于計算機技術的工業(yè)化、標準化與實用化,以及大型商用數據庫系統(tǒng)的建立與使用,地理信息系統(tǒng)對地理空間數據的處理速度與能力取得突破性進展。其結果是:一些發(fā)達國家先后建立了許多專業(yè)性的土地信息系統(tǒng)(LIS)和資源與環(huán)境信息系統(tǒng)(GIS),如1970年至1976年,美國地質調查局先后建50多個信息系統(tǒng),其它國家也相繼發(fā)展自己的GIS;關于GIS軟件、硬件和項目開發(fā)的商業(yè)公司篷勃發(fā)展。到1989年,國際市場上有報價的GIS軟件達70多個,并出現一些有代表性的公司和產品,如美國環(huán)境系統(tǒng)研究所的ARC/INFO,Intergraph公司的MGE,及Genasys公司的Genamap等等。[3]數字地理信息的生產標準化、工業(yè)化和商品化。如美國地質調查局(USGS)已經建立起數字地圖生產技術體系,可定期向社會發(fā)布DLG、DEM等標準地理數據。各種通用和專用的地理空間分析模型得到深入研究和廣泛使用,GIS的空間分析能力顯著增強。有關GIS的具有技術權威和行政權威的行業(yè)機構和研究部門在GIS的應用發(fā)展中發(fā)揮引導和驅動作用。如美國國家科學基金會支持的國家地理信息和分析中心(NCGIA)每年都要制定GIS技術優(yōu)先發(fā)展計劃,以促進全國GIS事業(yè)發(fā)展。地理信息產業(yè)的形成和社會化地理信息系統(tǒng)(SocialGIS)的出現90年代以來,隨著互聯網絡的發(fā)展及國民經濟信息化的推進,地理信息系統(tǒng)作為大的地理信息中心,進入日常辦公室和千家萬戶之中,從面向專業(yè)領域的項目開發(fā)到綜合性城市與區(qū)域的可持續(xù)發(fā)展研究,從政府行為、學術行為發(fā)展到公民行為和信息民主,成為信息社會的重要技術基礎。GIS國內發(fā)展現狀我國對GIS的研究起步較晚,但是近二十年來,我國的地理信息系統(tǒng)事業(yè)突飛猛進,成績巨大。我國GIS的發(fā)展可以劃分為四個階段。起步階段(1978-1980年)主要行動在于概念引入和知識傳播,以及關于遙感分析、制圖和數字地面模型的試驗研究。準備階段(1980-1985年)主要在理論體系的建立,軟、硬件的引進,相應規(guī)范的研究,局部系統(tǒng)或試驗系統(tǒng)的開發(fā)上取得進步,為GIS的全面發(fā)展奠定基礎。加速發(fā)展階段(1986-1995年)GIS作為一個全國性的研究與應用領域,進行了有計劃、有目標、有組織的科學試驗與工程建設,取得一定的社會經濟效益。主要表現在:GIS教育與知識傳播的熱浪此起彼伏,GIS成為空間相關領域的熱門話題;GIS建設引起各級政府高度重視,其發(fā)展機制由學術推動演變?yōu)檎苿?;部分城市和沿海地區(qū)GIS建設率先進入實施階段,并取得階段性成果;出現商品化的國產GIS軟件、硬件品牌;出現專門的GIS的管理中心、研究機構與公司;出現專門的GIS協(xié)會,涌現一批GIS專門人才;出現專門的刊物與展示會;初步形成全國性的GIS市場。在應用模式、行業(yè)模式和管理方面作了有益的探索。地理信息產業(yè)化階段(1995-現在)目前,我國GIS的發(fā)展正處于向產業(yè)化階段過渡的轉折點。能否借助國際大氣候的東風,倚重國內經濟高速發(fā)展的大好形勢,搭乘全球信息高速公路的快車,實現地理信息產業(yè)化和國民經濟信息化,這是國內地理信息界人士面臨的嚴重挑戰(zhàn)和千載難逢的機遇。而在這一過程中,一方面需要探索建立一套政府宏觀調控與市場機制相結合的地理信息產業(yè)模式,另一方面,則要充分總結和借鑒國內外地理信息系統(tǒng)項目建設的經驗和教訓,建立起行之有效的地理信息系統(tǒng)工程學的理論、方法與管理模式,推動地理信息系統(tǒng)在社會主義各項事業(yè)中更加深入和廣泛的應用。GIS系統(tǒng)概述GIS的組成GIS由三個主要的元素所構成:硬件、軟件、數據。硬件硬件是GIS所操作的計算機。今天,GIS軟件可以在很多類型的硬件上運行。從中央計算機服務器到桌面計算機,從單機到網絡環(huán)境。軟件GIS軟件提供所需的存儲、分析和顯示地理信息的功能和工具。主要的軟件部件有:輸入和處理地理信息的工具數據庫管理系統(tǒng)(DBMS)支持地理查詢、分析和視覺化的工具容易使用這些工具的圖形化界面(GUI)數據一個GIS系統(tǒng)中最重要的部件就是數據。地理數據和相關的表格數據可以自己采集或者從商業(yè)數據提供者處購買。GIS將把空間數據和其他數據源的數據集成在一起,而且可以使用那些被大多數公司用來組織和保存數據的數據庫管理系統(tǒng),來管理空間數據。本系統(tǒng)中所使用的數據是由USGS(UnitedStatesGeologicalSurvey)提供的美國行政區(qū)的數據。GIS的主要功能一個GIS系統(tǒng)應具備五項基本功能,即數據輸入、數據編輯、數據存貯與管理、空間查詢與空間分析、可視化表達與輸出。數據輸入數據輸入是建立地理數據庫必須的過程。數據輸入功能指將地圖數據、物化遙數據、統(tǒng)計數據和文字報告等輸入、轉換成計算機可處理的數字形式的各種功能。對多種形式、多種來源的信息,可實現多種方式的數據輸入,如圖形數據輸入、柵格數據輸入、GPS測量數據輸入、屬性數據輸入等。數據編輯數據編輯主要包括圖形編輯和屬性編輯。屬性編輯主要與數據庫管理結合在一起完成,圖形編輯主要包括拓撲關系建立、圖形編輯、圖形整飾、圖幅拼接、圖形變換、投影變換、誤差校正等功能。數據的存儲與管理數據的有效組織與管理,是GIS系統(tǒng)應用成功與否的關鍵。主要提供空間與非空間數據的存儲、查詢檢索、修改和更新的能力。矢量數據結構、光柵數據結構、矢柵一體化數據結構是存儲GIS的主要數據結構。數據結構的選擇在相當程度上決定了系統(tǒng)所能執(zhí)行的功能。數據結構確定后,在空間數據的存儲與管理中,關鍵是確定應用系統(tǒng)空間與屬性數據庫的結構以及空間與屬性數據的連接。目前廣泛使用的GIS軟件大多數采用空間分區(qū)、專題分層的數據組織方法,用GIS管理空間數據,用關系數據庫管理屬性數據。空間查詢與分析空間查詢與分析是GIS的核心,是GIS最重要的和最具有魅力的功能,也是GIS有別于其他信息系統(tǒng)的本質特征。地理信息系統(tǒng)的空間分析可分為三個層次的內容:空間檢索:包括從空間位置檢索空間物體及其屬性、從屬性條件檢索空間物體空間拓撲疊加分析:實現空間特征(點、線、面或圖像)的相交、相減、合并等,以及特征屬性在空間上的連接空間模型分析:如數字地形高程分析、BUFFER分析、網絡分析、圖像分析、三維模型分析、多要素綜合分析及面向專業(yè)應用的各種特殊模型分析等。可視化表達與輸出中間處理過程和最終結果的可視化表達是GIS的重要功能之一。通常以人機交互方式來選擇顯示的對象與形式,對于圖形數據,根據要素的信息密集程度,可選擇放大或縮小顯示。GIS不僅可以輸出全要素地圖,也可以根據用戶需要,分層輸出各種專題圖、各類統(tǒng)計圖、圖表及數據等。GIS系統(tǒng)的一些基本概念地理信息系統(tǒng)(GIS)地理信息系統(tǒng)[4](GeographicInformationSystem,簡稱GIS)是一種以采集、貯存、管理、分析和描述整個或部分地球表面與空間地理分布有關數據的空間信息系統(tǒng)。在現代信息社會里,GIS作為一種集地理空間特征和各種統(tǒng)計信息為一體的特殊信息系統(tǒng),是信息高速公路上的節(jié)點和基礎設施,受到全社會的廣泛關注,成為目前國內外地學領域熱門的研究課題。GIS在人們的生活中占據著越來越重要的地位,在環(huán)境保護與管理,社會調查與統(tǒng)計分析,城市基礎設施管理,城市規(guī)劃、房地產開發(fā)及物業(yè)管理、商業(yè)開發(fā)與購物中心設置、資源調查、災害預報與災后評估、金融機構與投資分析、地質普查、采礦等等方面,GIS都能夠發(fā)揮巨大的作用,提高人們的生產力。地理參照系統(tǒng)(SpatialReferenceSystem)地理信息包含有明確的地理參照系統(tǒng)[3],例如經度和緯度坐標,或者是國家網格坐標。也可以包含間接的地理參照系統(tǒng),例如地址、郵政編碼、人口普查區(qū)名、森林位置識別、路名等。一種叫做地理編碼的自動處理系統(tǒng)用來從間接的參照系統(tǒng),如地址描述,轉變成明確的地理參照系統(tǒng),如多重定位。這些地理參考系統(tǒng)可以使你定位一些特征,例如商業(yè)活動、森林位置,也可以定位一些事件,例如地震,用于做地表分析。本系統(tǒng)主要使用橫軸墨卡托投影,也稱高斯投影坐標系。矢量和柵格模式(VectorandRasterModel)地理信息系統(tǒng)工作于兩種不同的基本地理模式——矢量模式和柵格模式。在矢量模式中,關于點、線和多邊形的信息被編碼并以x、y坐標形式儲存。一個點特征的定位,例如一個鉆孔,可以被一個單一的x、y坐標所描述。線特征,例如公路和河流,可以被存儲于一系列的點坐標。多邊形特征,例如銷售地域或河流聚集區(qū)域,可以被存儲于一個閉合循環(huán)的坐標系。矢量模式非常有利于描述一些離散特征,但對連續(xù)變化的特征,例如土壤類型或趕往醫(yī)院的開銷等,就不太有用。柵格模式發(fā)展為連續(xù)特征的模式。柵格圖象包含有網格單元,有點像掃描的地圖或照片。不管是矢量模式還是柵格模式,用來存儲地理數據,都有優(yōu)點和缺陷?,F代的GIS都可以處理這兩種模式。在本系統(tǒng),數據的主要表現模型為矢量格式,以方便以后系統(tǒng)的擴展和對空間數據的分析,柵格數據主要用于提供地圖的美化,比如地形,植被信息。空間數據庫(SpatialDatabase)和以往的ORDBMS(Object-RelationDatabaseManagementSystem)不同,GIS系統(tǒng)所使用的數據具有空間特性,所以平常的數據庫并不能滿足它的需求,空間數據庫[2]就隨之產生了??臻g數據庫(SDB)能夠存儲海量的空間數據,并且能夠對它們進行良好的組織,同時,空間數據庫提供了各種適合空間數據庫的索引方式(R-Tree等等)來提高對空間數據的操作速度,從而提高整體系統(tǒng)的性能。當前主流的空間數據庫有OracleSpatialExtension,MySQLSpatialExtension,Postgresql的PostGIS。由于Postgresql能夠良好的支持OODBMS(Object-OrientedDatabaseManagementSystem),并且它是一個免費,開源的產品,本系統(tǒng)采用的Postgresql的PostGIS來作為數據服務器。OpenGISConsortium(OGC,開放空間協(xié)會)1994年,一些GIS團體共同發(fā)起了一個旨在發(fā)布地理信息系統(tǒng)標準的組織——“Open

GIS

Consortium

GIS(OGC[14])”。在這之前由于缺乏統(tǒng)一的標準,在組織內部的GIS技術很難與其它信息系統(tǒng)相集成,在系統(tǒng)與系統(tǒng)間,系統(tǒng)與用戶間以及用戶與用戶間共享GIS數據需要花費相當大的時間和精力。現在OGC有超過200個會員單位,OGC希望能夠完整地將GIS數據和技術集成進主流的計算機技術中,能夠在信息基礎設施建設中推廣符合標準技術的GIS軟件,并將其貫穿系統(tǒng)的始終。OGC的成員包括世界領先技術的軟件公司,通訊公司,計算機制造廠商,系統(tǒng)集成商等。本文的結構本文的其他章節(jié)如下:第二章講述了整個GIS系統(tǒng)的設計目的以及系統(tǒng)的整體架構。第三章講述了系統(tǒng)中幾個核心組成部分的設計和實現方法。第四章講述了MyGIS系統(tǒng)以后可以進行的工作以及需要改進的部分。最后,進行全文的總結,并附上一些示例的源代碼。MyGIS系統(tǒng)架構設計MyGIS系統(tǒng)選型目前的GIS產品越來越豐富。根據當前GIS系統(tǒng)的架構和應用特點,現在主要有這樣幾種類型:組件(Components)GIS:ComponentsGIS是一種新的GIS開發(fā)思想,它是將GIS功能分散制作成ActiveXControl和Automation,這些標準的ActiveXControl和Automation可以被任何支持它們的開發(fā)環(huán)境調用,以便在原有的或新開發(fā)的信息系統(tǒng)中加入GIS功能。目前國際上比較流行的ComponentsGIS軟件有ESRI的MapObjects,MapInfo公司的MapX等。WebGIS:信息高速公路的建立極大地方便了世界各地用戶間信息交換與信息查詢。由于GIS能提供豐富的空間查詢、空間分析及屬性管理功能,因此GIS正在成為Internet(國際互聯網)或Intranet(企業(yè)局域網)的一個主要內容。建立InternetGIS的主要目的在于以下幾個方面:遠距離空間數據共享與信息查詢和交換;為公眾提供GIS服務;建立大規(guī)模甚至超大規(guī)模的空間網絡信息系統(tǒng);為其它學科的研究提供基礎信息資料。 當前國內流行的WebGIS有GoogleMap,BaiduMap,丁丁地圖等等。DataWarehousing(數據倉庫):DataWarehousing的字面意思是建立數據倉庫。由于空間數據量非常大,這些數據大都分散在政府和私人機構及公司的各個部門,數據的管理與使用變得非常的復雜。但同時由于這些空間數據具有極大的科學和經濟價值,因此大多數發(fā)達國家都比較重視空間數據庫的建庫工作,在這些國家一般都有許多研究機構和政府部門參與到空間數據庫建立的研究工作中。目前在北美、歐洲、澳大利亞等國提出了SDI或NSDI的概念。SDI的全稱是SpatialDataInfrastructure,NSDI的含義是NationalSpatialDataInfrastructure,其字面意思是(國家)空間數據基礎設施。98年6月份在加拿大首都渥太華召開的第十屆國際地理信息工程學術會議更把SDI作為本次會議的主題,可見國際上對地理空間數據基礎設施建設的重視。3DGIS:地球以及各種物體都是以三維空間的形式存在的,因此目前二維GIS技術或二維半(平面X,Y坐標加高程)GIS對于完整的描述地球上的對象是有一定限制的。需要用三維空間來描述的應用領域有如下幾個方面:氣象學、地質學、采礦學、石油勘探與開發(fā)、計算機輔助設計與制造(CAD/CAM)、醫(yī)學影像和機器人學等。一個三維GIS空間信息系統(tǒng)應該能夠模擬、表示、管理、分析與三維實體相關的信息,并提供決策支持。時態(tài)GIS(TemporalGIS):時空GIS采集、存儲、管理、分析與顯示地理實體隨時間變化信息(或時空信息)。它不僅包含傳統(tǒng)地理信息系統(tǒng)的空間特性,而且涵蓋時間特性;它不僅反映事物和現象的存在狀態(tài),而且表達其發(fā)展變化過程及規(guī)律。時態(tài)GIS的操作對象是時空信息,其特點是在系統(tǒng)中增加對時間維的分析表達能力,提供歷史分析與趨勢分析的功能。本系統(tǒng)(以下稱MyGIS)旨在建立一個通用的GIS后臺服務器,與前端的GIS客戶端(組件GIS,WebGIS等)進行交互,解析客戶端的請求,向后端的GIS數據源(GIS數據倉庫)提取數據(二維,三維的地理信息),分析數據并返回相應的結果,通過提高系統(tǒng)的可擴展性,能夠支持二維,三維,以致未來的更新的GIS應用(時態(tài)GIS)。空間對象的WKB和WKT標準表達方式WKB(theWell-KnownBinary),WKT(theWell-KnownText)是OGC定義的表述空間對象的標準方式。BNF(巴科斯范式)BNF定義和內容BNF(巴科斯范式)是“BackusNaurForm”的縮寫。JohnBackus和PeterNaur首次引入的一種形式化符號來描述給定語言的語法。BNF包括下面幾點內容在雙引號中的字("word")代表著這些字符本身。而double_quote用來代表雙引號。在雙引號外的字(有可能有下劃線)代表著語法部分。尖括號(<>)內包含的為必選項。方括號([])內包含的為可選項。大括號({})內包含的為可重復0至無數次的項。豎線(|)表示在其左右兩邊任選一項,相當于"OR"的意思。::=是“被定義為”的意思。WKT中BNF的定義WKT對大小寫敏感,并且下面的表達式定義了空間對象的WKB表達式中可能用到的符號或者關鍵字:<x>::=<有符號數字><y>::=<有符號數字><z>::=<有符號數字><m>::=<有符號數字><“名稱”>::=<雙引號><name><雙引號><名稱>::=<字符><字符>::=(<字符>)*<字符>::=<英文字母>|<數字>|<特殊符號><英文字母>::=<英文大寫字母>|<英文小寫字母><有符號的數字>::={<符號>}<無符號數字><無符號數字>::=<準確數值>|<近似數值><近似數值>::=<尾數>E<指數><尾數>::=<準確數值><指數>::=<有符號的整數><準確數值>::=<無符號的整數>{<小數點>{<無符號的整數>}}|<小數點><無符號的整數><有符號整數>::={<符號>}<無符號的整數><無符號的整數>::=(<數字>)*<左分隔符>::=<左小括號>|<左中括號><右分隔符>::=<右小括號>|<右中括號><特殊字符>::=<右小括號>|<左小括號>|<負號>|<下劃線>|<句號>|<引號>|<空格><符號>::=<加號>|<負號><小數點>::=<句號>|<逗號><空>::=EMPTY<負號>::=-<左小括號>::=(<右小括號>::=)<左中括號>::=[<右中括號>::=]<句號>::=.<加號>::=+<雙引號>::="<引號>::='<逗號>::=,<下劃線>::=_<數字>::=0|1|2|3|4|5|6|7|8|9<英文小寫字母>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z<英文大寫字母>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z<空格>=""WKT規(guī)范每一個空間對象類型都有一種相應的WKT(Well-knownTextRepresentation)表現形式,用來構建一個新的類型對象實例以及把一個空間對象轉換成文字表述形式??臻g對象的WKT形式是由BNF(Backus-NaurForm,巴科斯范式)來定義的。二維空間對象的WKT表示:附錄A中的BNF表達式定義了在二維坐標系中的空間對象(多面體的表面除外)示例下表給出了一些使用WKT來表示幾何對象的例子。坐標點是以整數為單位表2.1使用WKT來表示幾何對象幾何對象類型WKT表示注釋PointPoint(1010)一個點LineStringLineString(1010,2020,3040)一個帶有三個點的線PolygonPolygon((1010,1020,2020,2015,1010))一個有一個外環(huán)和零個內環(huán)的多邊形MultipointMultiPoint((1010),(2020))一個有兩個點的多點MultiLineStringMultiLineString((1010,2020),(1515,3015))一個有兩條線的多線MultiPolygonMultiPolygon(((1010,1020,2020,2015,1010)),((6060,7070,8060,6060)))一個有兩個多邊形的多多邊形GeomCollectionGeometryCollection(POINT(1010),POINT(3030),LINESTRING(1515,2020))一個有兩個點和一條線的幾何對象集合PolyhedralSurfacePolyhedralSurfaceZ(((000,001,011,010,000)),((000,010,110,100,000)),((000,100,101,001,000)),((110,111,101,100,110)),((010,011,111,110,010)),((001,101,111,011.001)))一個原點在(0,0,0),相反點在(1,1,1)的多面體TinTinZ(((000,001,010,000)),((000,010,100,000)),((000,100,001,000)),((100,010,001,100)),)一個在原點(0,0,0),大小為1的四面體PolyhedralSurfacePolyhedralSurfaceZ(((000,001,011,010,000)),((000,010,110,100,000)),((000,100,101,001,000)),((110,111,101,100,110)),((010,011,111,110,010)),((001,101,111,011.001)))一個原點在(0,0,0),相反點在(1,1,1)的多面體TinTinZ(((000,001,010,000)),((000,010,100,000)),((000,100,001,000)),((100,010,001,100)),)一個在原點(0,0,0),大小為1的四面體WKB規(guī)范幾何對象的WKB(Well-knownBinaryRepresentation)表述方法提供了一個可移植的將幾何對象表述為連續(xù)的字節(jié)流的方法。它允許幾何對象在SQL客戶端和SQL服務器之間以二進制的形式傳輸。介紹幾何對象的WKB形式是通過先將幾何對象序列化成一個數字序列(無符號整型,浮點型),然后再將它們序列化成為一個字節(jié)的序列來實現的。這些字符的序列使用兩種編碼方式中的一種進行編碼(NDR,XDR)。這兩種編碼方式的唯一區(qū)別就是字節(jié)順序,XDR是BigEndian順序,NDR是LittleEndian順序。數值類型定義一個無符號的整型是一個32位(4個字節(jié))的數據類型,它表示在0到4394967295之間的一個非負數。一個浮點型(Double)是一個64位(8個字節(jié))的雙精度數據類型,他使用IEEE754雙精度格式來表示一個雙精度數值。以上的定義對XDR和NDR是相同的。幾何類型的編碼表圖2.1是對GIS中所有幾何類型的編碼表,代碼用整數表示,并且其中灰色的代碼表示為以后所預留的代碼。 圖2.1幾何對象的編碼表對于數字類型的XDR編碼和NDR編碼一個無符號整型的XDR編碼是BigEndian形式。 一個浮點型的XDR編碼是BigEndian形式。一個無符號整型的NDR編碼是LittleEndian形式。一個浮點型的NDR編碼是LittleEndian形式。幾何對象的WKB表示方法的描述幾何對象的WKB表示方法見附錄B。其中的基本單位是包括兩個浮點型的點。其他幾何對象的表示方法都是基于點來描述的。圖2.2是一個帶有兩條線的多邊形的例子1:多邊形對象 B:字節(jié)順序2:第一條線對象 T:對象類型編碼3:第二條線對象 NR:線的條數 NP:點的個數圖2.2一個使用WKB表示的幾何對象的例子MyGIS系統(tǒng)架構MyGIS服務器從系統(tǒng)的應用層次結構上來說,屬于GIS應用服務器[9](ApplicationServer),處在整個系統(tǒng)的中間部分,能夠接受上層的請求(WebRequest,富客戶端的API調用或者其他GIS服務器的請求)并解析,將請求分配到相應的下層系統(tǒng)(空間數據庫,其他的GIS服務器)獲取數據并分析數據,得到相應的結果并返回。整個系統(tǒng)架構如圖2.2:圖2.2GIS服務器的整體體系結構在圖2.2中,客戶端(Web,PC,GISServer)能夠發(fā)送的請求包括:地圖請求:這是最通用的功能,請求一個區(qū)域的地圖數據(一個帶有比例尺經緯度的矩形區(qū)域),并且希望服務器返回客戶端所希望形式的響應(一段帶有地圖圖片的二進制流,或者生成好的地圖圖片文件,或者一個包含了所請求數據的數據集)空間分析請求:客戶端通過發(fā)送一個空間分析請求(比如:A道路與B道路是否空間相接,在A城市里面有幾個醫(yī)院等等),由MyGIS服務器分析,并且返回相應的回復??臻g計算請求:計算從A地點到B地點的最近路線,或者搭乘公交車的最近路線等等??臻g數據更新請求:隨著時間的變化,MyGIS服務器的數據可能不能真實的表達當前真實世界的情況??蛻舳丝梢酝ㄟ^發(fā)送一個請求,修改MyGIS服務器中的一段數據,MyGIS服務器進行數據驗證之后,提交修改請求來保持GIS數據的更新程度。而服務器通過解析數據,計算數據,以客戶端希望的形式返回相應的結果(二進制流,XML文件,圖片等等)同時,在部署方面,如果一個系統(tǒng)由于客戶端數量增加,服務器的壓力過大,可以通過部署多個MyGIS服務器來進行負載均衡,因為MyGIS服務器同時也是一個客戶端,可以向其他兼容OGC標準的GIS服務器發(fā)送請求,這樣就能夠在自己負載過重的情況下,把請求分配到其他兼容OGC標準的GIS服務器上去,減少系統(tǒng)響應時間,提高系統(tǒng)的整體速度??偠灾?,這樣的系統(tǒng)總體架構能夠得到良好的可擴展性,并且使得現有的GIS資源能夠得到最大效率的利用,在系統(tǒng)負載增加的情況下,可以通過增加MyGISServer來得到性能的提高,并且也能夠使得整個系統(tǒng)的負載得到均衡,不至于出現系統(tǒng)瓶頸。MyGIS主要組成部分現在的MyGIS服務器主要由以下幾個部分組成:MyGIS對象層次結構在GIS內部,為了系統(tǒng)的可擴展性和可維護性,實現了一個MyGISObjectHierarchy,它把GIS數據封裝到相應的類的對象里面,并且提供相應的接口,通過遵循面向對象的開發(fā)思想,使得對于GIS對象的一些操作都能過在這個部分里面得到實現。數據庫擴展和數據庫接口(PostGIS[12])PostGIS簡介PostGIS是對象關系型數據庫系統(tǒng)PostgreSQL[15]的一個擴展,PostGIS提供如下空間信息服務功能:空間對象、空間索引、空間操作函數和空間操作符。同時,PostGIS遵循OpenGIS的規(guī)范。PostGIS的版權被納入到GNU的GPL中,也就是說任何人可以自由得到PostGIS的源碼并對其做研究和改進。正是由于這一點,PostGIS得到了迅速的發(fā)展,越來越多的愛好者和研究機構參與到PostGIS的應用開發(fā)和完善當中。PostGIS特性PostGIS支持所有的空間數據類型,這些類型包括:點(POINT)、線(LINESTRING)、多邊形(POLYGON)、多點(MULTIPOINT)、多線(MULTILINESTRING)、多多邊形(MULTIPOLYGON)和集合對象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的對象表達方法,比如WKT和WKB。PostGIS支持所有的數據存取和構造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供簡單的空間分析函數(如Area和Length)同時也提供其他一些具有復雜分析功能的函數,比如Distance。PostGIS提供了對于元數據的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同時,PostGIS也提供了相應的支持函數,如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用于檢測空間對象之間的空間關系,同時返回布爾值來表征對象之間符合這個關系。PostGIS提供了空間操作符(如Union和Difference)用于空間數據操作。比如,Union操作符融合多邊形之間的邊界。兩個交迭的多邊形通過Union運算就會形成一個新的多邊形,這個新的多邊形的邊界為兩個多邊形中最大邊界。數據庫坐標變換數據庫中的幾何類型可以通過Transform函數從一種投影系變換到另一種投影系中。在OpenGIS中的幾何類型都將SRID作為自身結構的一部分,但不知什么原因,在OpenGIS的SFSQL規(guī)范中,并沒有引入Transform。球體長度運算存儲在普通地理坐標系中的集合類型如果不進行坐標變換是無法進行程度運算的,OpenGIS所提供的坐標變換使得積累類型的程度計算變成可能。三維的幾何類型SFSQL規(guī)范只是針對二維集合類型。OpenGIS提供了對三維集合類型的支持,具體是利用輸入的集合類型維數來決定輸出的表現方式。例如,即便所有幾何對象內部都以三維形式存儲,純粹的二維交叉點通常還是以二維的形式返回。此外,還提供幾何對象在不同維度間轉換的功能??臻g聚集函數在數據庫中,聚集函數是一個執(zhí)行某一屬性列所有數據操作的函數。比如Sum和Average,Sum是求某一關系屬性列的數據總和,Average則是求取某一關系屬性列的數據平均值。與此對應,空間聚集函數也是執(zhí)行相同的操作,不過操作的對象是空間數據。例如聚集函數Extent返回一系列要素中的最大的包裹矩形框,如“SELECTEXTENT(GEOM)FROMROADS”這條SQL語句的執(zhí)行結果是返回ROADS這個數據表中所有的包裹矩形框。柵格數據類型PostGIS通過一種新的數據類型片,提供對于大的柵格數據對象的存儲。片由以下幾個部分組成:包裹矩形框、SRID、類型和一個字節(jié)序列。通過將片的大小控制在數據庫頁值(32×32)以下,使得快速的隨即訪問變成可能。一般大的圖片也是通過將其切成32×32像素的片然后再存儲在數據庫中的。圖形處理模塊由于需要生成圖片,GIS服務器也提供了圖形處理和生成模塊。它采用了開源的GD庫來生成圖像,GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。每個幾何對象的類都包含一個公用的Paint函數,來繪出這個類所包含的圖像。MyGIS詳細設計MyGIS對象層次結構在MyGIS服務器中,MyGIS對象層次結構是這個服務器的核心結構,它將幾何對象進行了封裝,并且提供了操作了這些對象的接口,同時,這個體系結構也是容易擴展的,它定義了一些通用的接口,當新的對象加入的時候,只需要根據對象的類型繼承相應的接口并實現,就能使MyGIS服務器支持更多的特性。同時,MyGIS的對象層次結構盡量和OGC的簡單要素標準保持一致,使得能夠最大限度的兼容OGC標準,從而提高系統(tǒng)與外部實現了OGC標準的系統(tǒng)實現更好的交互?,F有的對象結構為圖3.1。圖3.1GIS服務器的整體體系結構BaseObject是MyGIS對象層次結構中所有類的基類,基類里面添加了Paint()這個接口,滿足所有的對象都需要繪圖的要求。Base由GeoObject和NonGeoObject繼承。GeoObject繼承自BaseObject,同時也定義了所有的空間對象的一致接口SRSString(),得到當前對象的空間參考系統(tǒng)的字符串,使得能夠在生成圖片的時候不至于出現誤差。繼承自GeoObject的類有兩個:Geometry和GeometryCollection,分別代表單個空間對象和空間對象的集合。Geometry類也定義了自己的一個接口:Boundary(),獲得當前單個空間對象的最小定界矩形(MBR)。實現這樣的接口將有助于系統(tǒng)大大提高查詢空間對象的速度。GeometryCollection類所定義的接口:GeometryN()和NumGeometries()提高了在一個空間對象集合里面查詢并獲得單個空間對象的API。它返回的對象是一個指向Geometry的指針,實際的空間對象類型可以通過指針的getType()來得到,再進行相應的操作。Point類表示在空間中0維的對象,比如世界地圖中北京的位置等。它具有X,Y坐標的屬性來標識Point類的特點。在取得一個點的坐標之后,還需要對這個點進行投影變換,才能得到正確的坐標。Curve表示在空間中1維的對象。它是由一些點的集合來組成。比如城市的道路。同時Curve也提供了Length()這個函數來查詢當前對象的長度。一維的線段的類型可以分為這樣集中:簡單非閉合曲線,簡單閉合曲線,復雜閉合曲線,復雜非閉合曲線。這里給出閉合曲線和復雜曲線的定義。當一條線的首尾兩個點空間相等的時候,那么這條線就是閉合曲線。當一條線經過了同一個點兩次或兩次以上,那么這條線就是復雜曲線。Polygon表示在空間中2維的對象,比如平面,在3維的空間坐標系中,Polygon還可以表示一個3維幾何對象的表面。它是由一系列線的集合來組成。Polygon提供了Area()這個接口來實現求這個對象的面積的操作。MultiPoint,MultiCurve,MultiPolygon分別代表了多個點,多條線,多個多邊形的集合。他們擁有共同的GeometryCollection的接口,并且存儲相應的單個空間對象。PostGIS的實現PostGIS是現在開源的數據庫Postgresql的空間擴展引擎,從而使得Postgresql這個數據庫添加了空間查詢和空間操作的功能。PostGIS通過將自定義的類型和函數導入到Postgresql中來實現對Postgresql的空間擴展。PostGIS的空間查詢函數都是使用純C實現,保證了函數運行時的效率,通過遵循Postgresql的自定義函數接口,實現了PostGIS和數據庫的無縫集成。在PostGIS中,新添加了一個類型字段geometry,它使用OGC的WKB來表示空間數據的組織形式。并且可以通過asText()這個SQL函數使得geometry這個字段轉換成OGC的WKT形式,從而對用戶友好。PostGIS還實現了OGC的空間對象操作標準中的接口,比如intersects,equal等等,提高了它的可使用性。MyGIS服務器與PostGIS的交互由于Postgresql定義了自己獨有的二進制數據的存儲方式(bytea),使得不能通過普通的方法來得到二進制數據。GIS服務器的數據訪問模塊需要調用Postgresql特殊的API來得到二進制數據,下面是一段示例代碼片段:PGresult*DBHelper::execQuery(conststring&str){ if(PQstatus(conn)!=CONNECTION_OK) { fprintf(stderr,"Connectiontodatabasefailed:%s", PQerrorMessage(conn)); PQfinish(conn); returnNULL; } PGresult*ret=PQexecParams(conn,str.c_str(), 0,NULL,NULL,NULL,NULL,1); if(PQresultStatus(ret)!=PGRES_TUPLES_OK){ fprintf(stderr,"ExecQueryFauled!\\n"); PQclear(ret); returnNULL; } returnret;}Postgresql的API:PQexecParams中最后一個參數為1,表示客戶端需要原始的二進制流,而不是Postgresql特有的bytea流。在得到數據庫中幾何對象的WKB數據之后,MyGIS服務器需要根據OGC的幾何對象格式定義標準(見附錄B)解析這段數據,由于之前的MyGIS對象體系結構實現了面向對象的設計。在這里可以也可以利用面向對象的封裝特性來對數據解析這部分實現面向對象的設計。Point.CPPPoint::Point(constUCHAR*uc){ //復制點對象的數據 memcpy(&_x,uc,8); memcpy(&_y,uc+8,8);}Curve.CPPvoidCurve::init(constUCHAR*uc)const{ UINTnumber=0; UINTindex=0; doublex=0; doubley=0; //得到線里面點的個數 memcpy(&number,uc,sizeof(UINT)); index+=sizeof(UINT); for(UINTi=0;i<number;i++) { //構造一個新的點,并加入到線的集合里面。 Point*p=newPoint(uc+index); arPoints.push_back(p); //增加偏移量使得指針能夠指向正確的位置 index+=16; }}Polygon.CPPvoidPolygon::init(constUCHAR*uc)const{ if(uc==NULL) return; intindex=sizeof(UCHAR)+sizeof(UINT); intnumRings=0; intnumPoints=0; //得到多邊形里面線的數目 memcpy(&numRings,uc+index,sizeof(int)); index+=sizeof(int); for(inti=0;i<numRings;i++) { //得到多邊形里面每條線中點的個數 memcpy(&numPoints,uc+index,sizeof(int)); //構造一條線并且加入到這個多邊形 Curve*c=newCurve(uc+index); arRings.push_back(c); //增加偏移量使得指針指向正確的位置 index+=sizeof(int); index+=(numPoints)*sizeof(double)*2; } }由上面的代碼可以看出,在幾何對象的構造過程中,體現了面向對象的封裝和包含的特點,同時也使得代碼不堆積在一個解析函數里面,使得每個函數的分工明確,短小精悍。GIS服務器繪圖模塊的設計由于輸出數據是MyGIS服務器最常用的一個功能,并且根據數據生成相應的數據更是最常用的功能之一。在這里,同樣也是使用面向對象的方法來對繪圖模塊進行設計,同時,使用了面向對象最重要的一個特性:多態(tài)(polymorphism)在繪圖的類中,擁有這樣一個BaseObject接口的指針的數組,它們分別指向不同子類的對象,Point,Curve,Polygon等等。由于Paint方法是BaseObject公開的一個接口,同時它也是一個虛函數,C++程序可以在運行時找到BaseObject指針指向的子類對象的類型,并且調用相應的真正的Paint函數。使得在設計上,整個系統(tǒng)架構比較均衡,同時也很容易擴展:只要添加一個新的類,找到它在類繼承層次中的正確位置,再實現相應的需要實現的接口即可,不需要改動原有的代碼。在實現真正的繪圖功能時,為了使系統(tǒng)更好的移植,在各個系統(tǒng)上運行,GIS服務器使用了一個開源的圖形處理庫:GD庫[11]。它將與系統(tǒng)真正繪圖的API(如GDI+)與程序隔離開來,在不同結構的系統(tǒng)下面,只需要使用相對應版本的GD庫即可。下面是Point,Curve,Polygon的Paint函數實現。Point.CPPBOOLPoint::Paint(gdImagePtrim){ if(im==NULL) { returnFALSE; } projectMe(); gdImageSetPixel(im,_x,_y,getColor()); returnTRUE;}Curve.CPPBOOLCurve::Paint(gdImagePtrim){ if(im==NULL||arPoints.size()<2) returnFALSE; doublex1,y1,x2,y2; double_x1,_y1,_x2,_y2; vector<Point*>::iteratorit=arPoints.begin(); for(x1=(*it)->getX(), y1=(*it)->getY(); it!=arPoints.end()-1;) { it++; (*it)->projectME(); x2=(*it)->getX(); y2=(*it)->getY(); gdImageLine(im,_x1,_y1,_x2,_y2,getColor()); x1=x2; y1=y2; } returnTRUE;}Polygon.CPPBOOLPolygon::Paint(gdImagePtrim){ if(im==NULL||arRings.size()<1) returnFALSE; vector<Curve*>::iteratorit; for(it=arRings.begin();it!=arRings.end();it++) if((*it)->Paint(im)==FALSE) returnFALSE; returnTRUE;}MyGIS工作總結需要進行的工作由于時間關系,MyGIS服務器的設計并不完善,當前存在著這樣幾個缺點。與外部進行交互的接口不統(tǒng)一MyGIS由于在設計初期就被定位成可以和各種類型的外部系統(tǒng)交互,包括客戶端和后臺數據源,但是由于沒有一個通用的訪問接口(API),使得MyGIS在和客戶端和服務器交互的時候不夠靈活,需要進行大量的工作,同時也降低了系統(tǒng)的工作效率和以后的可維護性不能承受高負載的應用隨著時間的推移,在實際應用中整個系統(tǒng)存儲的空間數據越來愈大,客戶端的數量和種類也會越來越多,整個系統(tǒng)結構和邏輯愈趨復雜,并且每一次空間分析或數據請求可能需要檢索和分析海量的數據,這樣單獨提高單個服務器的性能是遠遠不夠的。而MyGIS在應對這種海量請求和海量數據時,性能會大幅度的下降。系統(tǒng)配置不夠靈活當前的MyGIS服務器的一些配置都是直接硬編碼在程序中,實際應用中遇到的情況各不相同,使用者的要求也不一樣,整個服務器需要一個靈活的配置管理工具,來滿足各種情況。系統(tǒng)在面對突發(fā)情況或者錯誤時不能很好的應對。當前的GIS服務器不能很好的應對突發(fā)性的錯誤(比如內存不夠,所需要的資源沖突等等)。服務器在出現錯誤時,只能在終端輸出一條簡單的錯誤信息,甚至操作系統(tǒng)強行終止服務器進程,關閉整個應用。用戶也不能得知出錯的原因和對整個系統(tǒng)產生的影響。當前的解決方案根據以上發(fā)現的缺點,現提出幾個針對這些缺點的改進方案統(tǒng)一外部系統(tǒng)與MyGIS交互的接口為了更好的實現系統(tǒng)的松耦合以及可擴展性,可以對GIS服務器與外部(客戶端,其他GIS服務器,數據庫)交互的接口進行提取,封裝,設計,從而更加優(yōu)化整個系統(tǒng)的設計,提高系統(tǒng)的可維護性和開發(fā)周期以及降低后續(xù)開發(fā)的成本。例如,對于與數據庫的交互,可以實現一個通用的provider接口,對不同數據源的讀取模塊,只要實現這個接口,就能夠與GIS服務器進行良好的交互。為MyGIS添加負載平衡模塊以適應高負載的工作在圖2.2描述的系統(tǒng)結構中,GIS服務器并沒有專門的負載平衡機制,只是簡單將請求進行轉發(fā)。在以后的工作中,可以實現一個專門為服務器集群的情況下使用的ServiceDispatcher,判斷當前整個服務器集群的運行情況,從而選擇最優(yōu)的節(jié)點來轉發(fā)請求,達到真正的動態(tài)負載平衡。實現配置文件管理實現一個服務器的配置類。用戶通過修改相應的配置文件,而MyGIS服務器在啟動的時候讀取對當前服務器的配置文件,從而對服務器進行調整來適應各種情況,更加靈活的面對不同的需求。實現日志記錄和錯誤處理通過在出錯時顯示用戶友好的出錯信息和錯誤處理提示,以及相應的在日志中記錄一些關鍵信息,不僅能得到很好的用戶體驗,也能使得管理員及時發(fā)現錯誤的原因,使問題得到迅速解決。對系統(tǒng)使用多線程編程以更好的利用硬件資源。當前的GIS服務器只是針對單線程的情況設計,并沒有對關鍵資源進行訪問控制,在面對多客戶端并發(fā)訪問的時候,很有可能產生嚴重錯誤,同時現在的服務器硬件都是多CPU型服務器,可以對整個系統(tǒng)進行改造,支持多線程,提高系統(tǒng)健壯性和更大效率的利用資源。結論本文通過研究GIS系統(tǒng)的類型,結構和特點,提出了自己的GIS系統(tǒng)解決方案,通過引進開源軟件作為系統(tǒng)的一個組成部分,不僅提高了整個系統(tǒng)的開發(fā)效率(數據庫,圖像),而且通過引進開源軟件,可以通過系統(tǒng)需求靈活的定制系統(tǒng)的每一個部分,以達到整個系統(tǒng)對資源最高的利用率。系統(tǒng)完全按照OGC(開放空間協(xié)會)制定的標準實現,使得整個系統(tǒng)能夠很好的與其他異構的GIS系統(tǒng)進行交互。整個GIS資源對用戶開放,提高了GIS資源的利用率。本文主要介紹了MyGIS系統(tǒng)的結構,它的主要組成部分,以及這些組成部分的詳細實現細節(jié)。同時提出了自己的設計思想以及創(chuàng)新之處。但是整個系統(tǒng)的實現還不完善,需要做的工作還有很多,并且隨著開發(fā)和維護的進一步深入,相信會遇到更多的困難和問題。致謝首先,我要感謝我的導師,不論在生活還是學習上給我的幫助和鼓勵。同時五班的同學們也在我遇到困難的時候給與我很大的幫助,由于我是在企業(yè)做的畢業(yè)設計,難免要占用一點工作的時間,對此我向我在企業(yè)的領導對我的寬容表示誠摯的謝意,在工作中,同事也在我遇到困難的時候給我鼓勵,給予我?guī)椭?,感謝你們對我的支持!參考文獻[1]鄔倫,劉瑜,張晶等地理信息系統(tǒng)——原理、方法和應用[M]北京:科學出版社,2001.[2]陳述彭地理信息系統(tǒng)導論[M]科學出版社,1999[3]M.F.WroboysGISAComputingPerspective[M]Taylor&Frarncis,1995[4]李德仁,關澤群空間信息系統(tǒng)的集成與實現[M]武漢:武漢測繪科技大學出版社,2000[5]ShashiShekhar,SanjayChawlaSpatialDatabases:ATour[M]PrenticeHall/Pearson,2004[6]孫家廣等計算機圖形學[M]北京:清華大學出版社,1995[7]梁啟章GIS和計算機制圖[M]北京:科學出版社,1995[8]承繼成等國家空間信息基礎設施與數字地球[M]清華大學出版社,1999[9]StewartFotheringham,PrterRogersonSpatialAnalysisandGIS[M]Taylor&Francis,1994[10]薩師煊,王珊數據庫系統(tǒng)概論[M]高等教育出版社,1983[11]GD[OL][12]PostGIS.[OL][13]ESRI[OL][14]OGC[OL][15]Postgresql[OL]附錄附錄ABNF表達式<點>::=<x><y><幾何對象注記文字>::=<點注記文字>|<線注記文字>|<多邊形注記文字> |<三角形注記文字>|<多面體的表面注記文字>|<三角形不規(guī)則網絡注記文字>|<多點注記文字>|<多線注記文字>|<多多邊形注記文字>|<空間對象集合注記文字><點注記文字>::=點<點文字><線注記文字>::=線<線文字><多邊形注記文字>::=多邊形<多邊形文字><多面體的表面注記文字>::=多面體的表面<多面體的表面文字><三角形注記文字>::=三角形<三角形文字><三角形不規(guī)則網絡注記文字>::=三角形不規(guī)則網絡<多面體的表面文字><多點注記文字>::=多點<多點文字><多線注記文字>::=多線<多線文字><多多邊形注記文字>::=多多邊形<多多邊形文字><幾何對象集合注記文字>::=幾何對象集合<幾何對象集合文字><點文字>::=<空集>|<左小括號><點><右小括號><線文字>::=<空集>|<左小括號><點>{<逗號><點>}*<右小括號><多邊形文字>::=<空集>|<左小括號><線文字>{<逗號><線文字>}*<右小括號><多面體的表面文字>::=<空集>|<左小括號><多邊形文字>{<逗號><多邊形文字>}*<右小括號><多點文字>::=<空集>|<左小括號><點文字>{<逗號><點文字>}*<右小括號><多線文字>::=<空集>|<左小括號><線文字>{<逗號><線文字>}*<右小括號><多多邊形文字>::=<空集>|<左小括號><多邊形文字>{<逗號><多邊形文字>}*<右小括號><空間對象集合文字>::=<空集>|<左小括號><幾何對象注記文字>{<逗號><幾何對象注記文字>}*<右小括號>附錄B幾何對象的WKB表示//基本類型定義//byte:一個字節(jié)//uint32:無符號32位整型(4字節(jié))//double:雙精度數字(8字節(jié))Point{doublex;doubley}PointZ{doublex;doubley;doublez}PointM{doublex;doubley;doublem}PointZM{doublex;doubley;doublez;doublem}LinearRing{uint32numPoints;Pointpoints[numPoints]}LinearRingZ{uint32numPoints;PointZpoints[numPoints]}LinearRingM{uint32numPoints;PointMpoints[numPoints]}LinearRingZM{uint32numPoints;PointZMpoints[numPoints]}enumWKBByteOrder{wkbXDR=0,//BigEndianwkbNDR=1//LittleEndian}enumWKBGeometryType{wkbPoint=1,wkbLineString=2,wkbPolygon=3,wkbTriangle=17wkbMultiPoint=4,wkbMultiLineString=5,wkbMultiPolygon=6,wkbGeometryCollection=7,wkbPolyhedralSurface=15,wkbTIN=16wkbPointZ=1001,wkbLineStringZ=1002,wkbPolygonZ=1003,wkbTrianglez=1017wkbMultiPointZ=1004,wkbMultiLineStringZ=1005,wkbMultiPolygonZ=1006,wkbGeometryCollectionZ=1007,wkbPolyhedralSurfaceZ=1015,wkbTINZ=1016wkbPointM=2001,wkbLineStringM=2002,wkbPolygonM=2003,wkbTriangleM=2017wkbMultiPointM=2004,wkbMultiLineStringM=2005,wkbMultiPolygonM=2006,wkbGeometryCollectionM=2007,wkbPolyhedralSurfaceM=2015,wkbTINM=2016wkbPointZM=3001,wkbLineStringZM=3002,wkbPolygonZM=3003,wkbTriangleZM=3017wkbMultiPointZM=3004,wkbMultiLineStringZM=3005,wkbMultiPolygonZM=3006,wkbGeometryCollectionZM=3007,wkbPolyhedralSurfaceZM=3015,wkbTinZM=3016,}WKBPoint{bytebyteOrder;staticuint32wkbType=1;Pointpoint}WKBPointZ{bytebyteOrder;staticuint32wkbType=1001;PointZpoint}WKBPointM{bytebyteOrder;staticuint32wkbType=2001;PointM

溫馨提示

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

評論

0/150

提交評論