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

下載本文檔

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

文檔簡介

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

GIS

Consortium

GIS(OGC[14])”。在這之前由于缺乏統(tǒng)一的標(biāo)準,在組織內(nèi)部的GIS技術(shù)很難與其它信息系統(tǒng)相集成,在系統(tǒng)與系統(tǒng)間,系統(tǒng)與用戶間以及用戶與用戶間共享GIS數(shù)據(jù)需要花費相當(dāng)大的時間和精力?,F(xiàn)在OGC有超過200個會員單位,OGC希望能夠完整地將GIS數(shù)據(jù)和技術(shù)集成進主流的計算機技術(shù)中,能夠在信息基礎(chǔ)設(shè)施建設(shè)中推廣符合標(biāo)準技術(shù)的GIS軟件,并將其貫穿系統(tǒng)的始終。OGC的成員包括世界領(lǐng)先技術(shù)的軟件公司,通訊公司,計算機制造廠商,系統(tǒng)集成商等。本文的結(jié)構(gòu)本文的其他章節(jié)如下:第二章講述了整個GIS系統(tǒng)的設(shè)計目的以及系統(tǒng)的整體架構(gòu)。第三章講述了系統(tǒng)中幾個核心組成部分的設(shè)計和實現(xiàn)方法。第四章講述了MyGIS系統(tǒng)以后可以進行的工作以及需要改進的部分。最后,進行全文的總結(jié),并附上一些示例的源代碼。MyGIS系統(tǒng)架構(gòu)設(shè)計MyGIS系統(tǒng)選型目前的GIS產(chǎn)品越來越豐富。根據(jù)當(dāng)前GIS系統(tǒng)的架構(gòu)和應(yīng)用特點,現(xiàn)在主要有這樣幾種類型:組件(Components)GIS:ComponentsGIS是一種新的GIS開發(fā)思想,它是將GIS功能分散制作成ActiveXControl和Automation,這些標(biāo)準的ActiveXControl和Automation可以被任何支持它們的開發(fā)環(huán)境調(diào)用,以便在原有的或新開發(fā)的信息系統(tǒng)中加入GIS功能。目前國際上比較流行的ComponentsGIS軟件有ESRI的MapObjects,MapInfo公司的MapX等。WebGIS:信息高速公路的建立極大地方便了世界各地用戶間信息交換與信息查詢。由于GIS能提供豐富的空間查詢、空間分析及屬性管理功能,因此GIS正在成為Internet(國際互聯(lián)網(wǎng))或Intranet(企業(yè)局域網(wǎng))的一個主要內(nèi)容。建立InternetGIS的主要目的在于以下幾個方面:遠距離空間數(shù)據(jù)共享與信息查詢和交換;為公眾提供GIS服務(wù);建立大規(guī)模甚至超大規(guī)模的空間網(wǎng)絡(luò)信息系統(tǒng);為其它學(xué)科的研究提供基礎(chǔ)信息資料。 當(dāng)前國內(nèi)流行的WebGIS有GoogleMap,BaiduMap,丁丁地圖等等。DataWarehousing(數(shù)據(jù)倉庫):DataWarehousing的字面意思是建立數(shù)據(jù)倉庫。由于空間數(shù)據(jù)量非常大,這些數(shù)據(jù)大都分散在政府和私人機構(gòu)及公司的各個部門,數(shù)據(jù)的管理與使用變得非常的復(fù)雜。但同時由于這些空間數(shù)據(jù)具有極大的科學(xué)和經(jīng)濟價值,因此大多數(shù)發(fā)達國家都比較重視空間數(shù)據(jù)庫的建庫工作,在這些國家一般都有許多研究機構(gòu)和政府部門參與到空間數(shù)據(jù)庫建立的研究工作中。目前在北美、歐洲、澳大利亞等國提出了SDI或NSDI的概念。SDI的全稱是SpatialDataInfrastructure,NSDI的含義是NationalSpatialDataInfrastructure,其字面意思是(國家)空間數(shù)據(jù)基礎(chǔ)設(shè)施。98年6月份在加拿大首都渥太華召開的第十屆國際地理信息工程學(xué)術(shù)會議更把SDI作為本次會議的主題,可見國際上對地理空間數(shù)據(jù)基礎(chǔ)設(shè)施建設(shè)的重視。3DGIS:地球以及各種物體都是以三維空間的形式存在的,因此目前二維GIS技術(shù)或二維半(平面X,Y坐標(biāo)加高程)GIS對于完整的描述地球上的對象是有一定限制的。需要用三維空間來描述的應(yīng)用領(lǐng)域有如下幾個方面:氣象學(xué)、地質(zhì)學(xué)、采礦學(xué)、石油勘探與開發(fā)、計算機輔助設(shè)計與制造(CAD/CAM)、醫(yī)學(xué)影像和機器人學(xué)等。一個三維GIS空間信息系統(tǒng)應(yīng)該能夠模擬、表示、管理、分析與三維實體相關(guān)的信息,并提供決策支持。時態(tài)GIS(TemporalGIS):時空GIS采集、存儲、管理、分析與顯示地理實體隨時間變化信息(或時空信息)。它不僅包含傳統(tǒng)地理信息系統(tǒng)的空間特性,而且涵蓋時間特性;它不僅反映事物和現(xiàn)象的存在狀態(tài),而且表達其發(fā)展變化過程及規(guī)律。時態(tài)GIS的操作對象是時空信息,其特點是在系統(tǒng)中增加對時間維的分析表達能力,提供歷史分析與趨勢分析的功能。本系統(tǒng)(以下稱MyGIS)旨在建立一個通用的GIS后臺服務(wù)器,與前端的GIS客戶端(組件GIS,WebGIS等)進行交互,解析客戶端的請求,向后端的GIS數(shù)據(jù)源(GIS數(shù)據(jù)倉庫)提取數(shù)據(jù)(二維,三維的地理信息),分析數(shù)據(jù)并返回相應(yīng)的結(jié)果,通過提高系統(tǒng)的可擴展性,能夠支持二維,三維,以致未來的更新的GIS應(yīng)用(時態(tài)GIS)??臻g對象的WKB和WKT標(biāo)準表達方式WKB(theWell-KnownBinary),WKT(theWell-KnownText)是OGC定義的表述空間對象的標(biāo)準方式。BNF(巴科斯范式)BNF定義和內(nèi)容BNF(巴科斯范式)是“BackusNaurForm”的縮寫。JohnBackus和PeterNaur首次引入的一種形式化符號來描述給定語言的語法。BNF包括下面幾點內(nèi)容在雙引號中的字("word")代表著這些字符本身。而double_quote用來代表雙引號。在雙引號外的字(有可能有下劃線)代表著語法部分。尖括號(<>)內(nèi)包含的為必選項。方括號([])內(nèi)包含的為可選項。大括號({})內(nèi)包含的為可重復(fù)0至無數(shù)次的項。豎線(|)表示在其左右兩邊任選一項,相當(dāng)于"OR"的意思。::=是“被定義為”的意思。WKT中BNF的定義WKT對大小寫敏感,并且下面的表達式定義了空間對象的WKB表達式中可能用到的符號或者關(guān)鍵字:<x>::=<有符號數(shù)字><y>::=<有符號數(shù)字><z>::=<有符號數(shù)字><m>::=<有符號數(shù)字><“名稱”>::=<雙引號><name><雙引號><名稱>::=<字符><字符>::=(<字符>)*<字符>::=<英文字母>|<數(shù)字>|<特殊符號><英文字母>::=<英文大寫字母>|<英文小寫字母><有符號的數(shù)字>::={<符號>}<無符號數(shù)字><無符號數(shù)字>::=<準確數(shù)值>|<近似數(shù)值><近似數(shù)值>::=<尾數(shù)>E<指數(shù)><尾數(shù)>::=<準確數(shù)值><指數(shù)>::=<有符號的整數(shù)><準確數(shù)值>::=<無符號的整數(shù)>{<小數(shù)點>{<無符號的整數(shù)>}}|<小數(shù)點><無符號的整數(shù)><有符號整數(shù)>::={<符號>}<無符號的整數(shù)><無符號的整數(shù)>::=(<數(shù)字>)*<左分隔符>::=<左小括號>|<左中括號><右分隔符>::=<右小括號>|<右中括號><特殊字符>::=<右小括號>|<左小括號>|<負號>|<下劃線>|<句號>|<引號>|<空格><符號>::=<加號>|<負號><小數(shù)點>::=<句號>|<逗號><空>::=EMPTY<負號>::=-<左小括號>::=(<右小括號>::=)<左中括號>::=[<右中括號>::=]<句號>::=.<加號>::=+<雙引號>::="<引號>::='<逗號>::=,<下劃線>::=_<數(shù)字>::=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ī)范每一個空間對象類型都有一種相應(yīng)的WKT(Well-knownTextRepresentation)表現(xiàn)形式,用來構(gòu)建一個新的類型對象實例以及把一個空間對象轉(zhuǎn)換成文字表述形式。空間對象的WKT形式是由BNF(Backus-NaurForm,巴科斯范式)來定義的。二維空間對象的WKT表示:附錄A中的BNF表達式定義了在二維坐標(biāo)系中的空間對象(多面體的表面除外)示例下表給出了一些使用WKT來表示幾何對象的例子。坐標(biāo)點是以整數(shù)為單位表2.1使用WKT來表示幾何對象幾何對象類型WKT表示注釋PointPoint(1010)一個點LineStringLineString(1010,2020,3040)一個帶有三個點的線PolygonPolygon((1010,1020,2020,2015,1010))一個有一個外環(huán)和零個內(nèi)環(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服務(wù)器之間以二進制的形式傳輸。介紹幾何對象的WKB形式是通過先將幾何對象序列化成一個數(shù)字序列(無符號整型,浮點型),然后再將它們序列化成為一個字節(jié)的序列來實現(xiàn)的。這些字符的序列使用兩種編碼方式中的一種進行編碼(NDR,XDR)。這兩種編碼方式的唯一區(qū)別就是字節(jié)順序,XDR是BigEndian順序,NDR是LittleEndian順序。數(shù)值類型定義一個無符號的整型是一個32位(4個字節(jié))的數(shù)據(jù)類型,它表示在0到4394967295之間的一個非負數(shù)。一個浮點型(Double)是一個64位(8個字節(jié))的雙精度數(shù)據(jù)類型,他使用IEEE754雙精度格式來表示一個雙精度數(shù)值。以上的定義對XDR和NDR是相同的。幾何類型的編碼表圖2.1是對GIS中所有幾何類型的編碼表,代碼用整數(shù)表示,并且其中灰色的代碼表示為以后所預(yù)留的代碼。 圖2.1幾何對象的編碼表對于數(shù)字類型的XDR編碼和NDR編碼一個無符號整型的XDR編碼是BigEndian形式。 一個浮點型的XDR編碼是BigEndian形式。一個無符號整型的NDR編碼是LittleEndian形式。一個浮點型的NDR編碼是LittleEndian形式。幾何對象的WKB表示方法的描述幾何對象的WKB表示方法見附錄B。其中的基本單位是包括兩個浮點型的點。其他幾何對象的表示方法都是基于點來描述的。圖2.2是一個帶有兩條線的多邊形的例子1:多邊形對象 B:字節(jié)順序2:第一條線對象 T:對象類型編碼3:第二條線對象 NR:線的條數(shù) NP:點的個數(shù)圖2.2一個使用WKB表示的幾何對象的例子MyGIS系統(tǒng)架構(gòu)MyGIS服務(wù)器從系統(tǒng)的應(yīng)用層次結(jié)構(gòu)上來說,屬于GIS應(yīng)用服務(wù)器[9](ApplicationServer),處在整個系統(tǒng)的中間部分,能夠接受上層的請求(WebRequest,富客戶端的API調(diào)用或者其他GIS服務(wù)器的請求)并解析,將請求分配到相應(yīng)的下層系統(tǒng)(空間數(shù)據(jù)庫,其他的GIS服務(wù)器)獲取數(shù)據(jù)并分析數(shù)據(jù),得到相應(yīng)的結(jié)果并返回。整個系統(tǒng)架構(gòu)如圖2.2:圖2.2GIS服務(wù)器的整體體系結(jié)構(gòu)在圖2.2中,客戶端(Web,PC,GISServer)能夠發(fā)送的請求包括:地圖請求:這是最通用的功能,請求一個區(qū)域的地圖數(shù)據(jù)(一個帶有比例尺經(jīng)緯度的矩形區(qū)域),并且希望服務(wù)器返回客戶端所希望形式的響應(yīng)(一段帶有地圖圖片的二進制流,或者生成好的地圖圖片文件,或者一個包含了所請求數(shù)據(jù)的數(shù)據(jù)集)空間分析請求:客戶端通過發(fā)送一個空間分析請求(比如:A道路與B道路是否空間相接,在A城市里面有幾個醫(yī)院等等),由MyGIS服務(wù)器分析,并且返回相應(yīng)的回復(fù)。空間計算請求:計算從A地點到B地點的最近路線,或者搭乘公交車的最近路線等等??臻g數(shù)據(jù)更新請求:隨著時間的變化,MyGIS服務(wù)器的數(shù)據(jù)可能不能真實的表達當(dāng)前真實世界的情況??蛻舳丝梢酝ㄟ^發(fā)送一個請求,修改MyGIS服務(wù)器中的一段數(shù)據(jù),MyGIS服務(wù)器進行數(shù)據(jù)驗證之后,提交修改請求來保持GIS數(shù)據(jù)的更新程度。而服務(wù)器通過解析數(shù)據(jù),計算數(shù)據(jù),以客戶端希望的形式返回相應(yīng)的結(jié)果(二進制流,XML文件,圖片等等)同時,在部署方面,如果一個系統(tǒng)由于客戶端數(shù)量增加,服務(wù)器的壓力過大,可以通過部署多個MyGIS服務(wù)器來進行負載均衡,因為MyGIS服務(wù)器同時也是一個客戶端,可以向其他兼容OGC標(biāo)準的GIS服務(wù)器發(fā)送請求,這樣就能夠在自己負載過重的情況下,把請求分配到其他兼容OGC標(biāo)準的GIS服務(wù)器上去,減少系統(tǒng)響應(yīng)時間,提高系統(tǒng)的整體速度??偠灾?,這樣的系統(tǒng)總體架構(gòu)能夠得到良好的可擴展性,并且使得現(xiàn)有的GIS資源能夠得到最大效率的利用,在系統(tǒng)負載增加的情況下,可以通過增加MyGISServer來得到性能的提高,并且也能夠使得整個系統(tǒng)的負載得到均衡,不至于出現(xiàn)系統(tǒng)瓶頸。MyGIS主要組成部分現(xiàn)在的MyGIS服務(wù)器主要由以下幾個部分組成:MyGIS對象層次結(jié)構(gòu)在GIS內(nèi)部,為了系統(tǒng)的可擴展性和可維護性,實現(xiàn)了一個MyGISObjectHierarchy,它把GIS數(shù)據(jù)封裝到相應(yīng)的類的對象里面,并且提供相應(yīng)的接口,通過遵循面向?qū)ο蟮拈_發(fā)思想,使得對于GIS對象的一些操作都能過在這個部分里面得到實現(xiàn)。數(shù)據(jù)庫擴展和數(shù)據(jù)庫接口(PostGIS[12])PostGIS簡介PostGIS是對象關(guān)系型數(shù)據(jù)庫系統(tǒng)PostgreSQL[15]的一個擴展,PostGIS提供如下空間信息服務(wù)功能:空間對象、空間索引、空間操作函數(shù)和空間操作符。同時,PostGIS遵循OpenGIS的規(guī)范。PostGIS的版權(quán)被納入到GNU的GPL中,也就是說任何人可以自由得到PostGIS的源碼并對其做研究和改進。正是由于這一點,PostGIS得到了迅速的發(fā)展,越來越多的愛好者和研究機構(gòu)參與到PostGIS的應(yīng)用開發(fā)和完善當(dāng)中。PostGIS特性PostGIS支持所有的空間數(shù)據(jù)類型,這些類型包括:點(POINT)、線(LINESTRING)、多邊形(POLYGON)、多點(MULTIPOINT)、多線(MULTILINESTRING)、多多邊形(MULTIPOLYGON)和集合對象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的對象表達方法,比如WKT和WKB。PostGIS支持所有的數(shù)據(jù)存取和構(gòu)造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供簡單的空間分析函數(shù)(如Area和Length)同時也提供其他一些具有復(fù)雜分析功能的函數(shù),比如Distance。PostGIS提供了對于元數(shù)據(jù)的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同時,PostGIS也提供了相應(yīng)的支持函數(shù),如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用于檢測空間對象之間的空間關(guān)系,同時返回布爾值來表征對象之間符合這個關(guān)系。PostGIS提供了空間操作符(如Union和Difference)用于空間數(shù)據(jù)操作。比如,Union操作符融合多邊形之間的邊界。兩個交迭的多邊形通過Union運算就會形成一個新的多邊形,這個新的多邊形的邊界為兩個多邊形中最大邊界。數(shù)據(jù)庫坐標(biāo)變換數(shù)據(jù)庫中的幾何類型可以通過Transform函數(shù)從一種投影系變換到另一種投影系中。在OpenGIS中的幾何類型都將SRID作為自身結(jié)構(gòu)的一部分,但不知什么原因,在OpenGIS的SFSQL規(guī)范中,并沒有引入Transform。球體長度運算存儲在普通地理坐標(biāo)系中的集合類型如果不進行坐標(biāo)變換是無法進行程度運算的,OpenGIS所提供的坐標(biāo)變換使得積累類型的程度計算變成可能。三維的幾何類型SFSQL規(guī)范只是針對二維集合類型。OpenGIS提供了對三維集合類型的支持,具體是利用輸入的集合類型維數(shù)來決定輸出的表現(xiàn)方式。例如,即便所有幾何對象內(nèi)部都以三維形式存儲,純粹的二維交叉點通常還是以二維的形式返回。此外,還提供幾何對象在不同維度間轉(zhuǎn)換的功能??臻g聚集函數(shù)在數(shù)據(jù)庫中,聚集函數(shù)是一個執(zhí)行某一屬性列所有數(shù)據(jù)操作的函數(shù)。比如Sum和Average,Sum是求某一關(guān)系屬性列的數(shù)據(jù)總和,Average則是求取某一關(guān)系屬性列的數(shù)據(jù)平均值。與此對應(yīng),空間聚集函數(shù)也是執(zhí)行相同的操作,不過操作的對象是空間數(shù)據(jù)。例如聚集函數(shù)Extent返回一系列要素中的最大的包裹矩形框,如“SELECTEXTENT(GEOM)FROMROADS”這條SQL語句的執(zhí)行結(jié)果是返回ROADS這個數(shù)據(jù)表中所有的包裹矩形框。柵格數(shù)據(jù)類型PostGIS通過一種新的數(shù)據(jù)類型片,提供對于大的柵格數(shù)據(jù)對象的存儲。片由以下幾個部分組成:包裹矩形框、SRID、類型和一個字節(jié)序列。通過將片的大小控制在數(shù)據(jù)庫頁值(32×32)以下,使得快速的隨即訪問變成可能。一般大的圖片也是通過將其切成32×32像素的片然后再存儲在數(shù)據(jù)庫中的。圖形處理模塊由于需要生成圖片,GIS服務(wù)器也提供了圖形處理和生成模塊。它采用了開源的GD庫來生成圖像,GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。每個幾何對象的類都包含一個公用的Paint函數(shù),來繪出這個類所包含的圖像。MyGIS詳細設(shè)計MyGIS對象層次結(jié)構(gòu)在MyGIS服務(wù)器中,MyGIS對象層次結(jié)構(gòu)是這個服務(wù)器的核心結(jié)構(gòu),它將幾何對象進行了封裝,并且提供了操作了這些對象的接口,同時,這個體系結(jié)構(gòu)也是容易擴展的,它定義了一些通用的接口,當(dāng)新的對象加入的時候,只需要根據(jù)對象的類型繼承相應(yīng)的接口并實現(xiàn),就能使MyGIS服務(wù)器支持更多的特性。同時,MyGIS的對象層次結(jié)構(gòu)盡量和OGC的簡單要素標(biāo)準保持一致,使得能夠最大限度的兼容OGC標(biāo)準,從而提高系統(tǒng)與外部實現(xiàn)了OGC標(biāo)準的系統(tǒng)實現(xiàn)更好的交互?,F(xiàn)有的對象結(jié)構(gòu)為圖3.1。圖3.1GIS服務(wù)器的整體體系結(jié)構(gòu)BaseObject是MyGIS對象層次結(jié)構(gòu)中所有類的基類,基類里面添加了Paint()這個接口,滿足所有的對象都需要繪圖的要求。Base由GeoObject和NonGeoObject繼承。GeoObject繼承自BaseObject,同時也定義了所有的空間對象的一致接口SRSString(),得到當(dāng)前對象的空間參考系統(tǒng)的字符串,使得能夠在生成圖片的時候不至于出現(xiàn)誤差。繼承自GeoObject的類有兩個:Geometry和GeometryCollection,分別代表單個空間對象和空間對象的集合。Geometry類也定義了自己的一個接口:Boundary(),獲得當(dāng)前單個空間對象的最小定界矩形(MBR)。實現(xiàn)這樣的接口將有助于系統(tǒng)大大提高查詢空間對象的速度。GeometryCollection類所定義的接口:GeometryN()和NumGeometries()提高了在一個空間對象集合里面查詢并獲得單個空間對象的API。它返回的對象是一個指向Geometry的指針,實際的空間對象類型可以通過指針的getType()來得到,再進行相應(yīng)的操作。Point類表示在空間中0維的對象,比如世界地圖中北京的位置等。它具有X,Y坐標(biāo)的屬性來標(biāo)識Point類的特點。在取得一個點的坐標(biāo)之后,還需要對這個點進行投影變換,才能得到正確的坐標(biāo)。Curve表示在空間中1維的對象。它是由一些點的集合來組成。比如城市的道路。同時Curve也提供了Length()這個函數(shù)來查詢當(dāng)前對象的長度。一維的線段的類型可以分為這樣集中:簡單非閉合曲線,簡單閉合曲線,復(fù)雜閉合曲線,復(fù)雜非閉合曲線。這里給出閉合曲線和復(fù)雜曲線的定義。當(dāng)一條線的首尾兩個點空間相等的時候,那么這條線就是閉合曲線。當(dāng)一條線經(jīng)過了同一個點兩次或兩次以上,那么這條線就是復(fù)雜曲線。Polygon表示在空間中2維的對象,比如平面,在3維的空間坐標(biāo)系中,Polygon還可以表示一個3維幾何對象的表面。它是由一系列線的集合來組成。Polygon提供了Area()這個接口來實現(xiàn)求這個對象的面積的操作。MultiPoint,MultiCurve,MultiPolygon分別代表了多個點,多條線,多個多邊形的集合。他們擁有共同的GeometryCollection的接口,并且存儲相應(yīng)的單個空間對象。PostGIS的實現(xiàn)PostGIS是現(xiàn)在開源的數(shù)據(jù)庫Postgresql的空間擴展引擎,從而使得Postgresql這個數(shù)據(jù)庫添加了空間查詢和空間操作的功能。PostGIS通過將自定義的類型和函數(shù)導(dǎo)入到Postgresql中來實現(xiàn)對Postgresql的空間擴展。PostGIS的空間查詢函數(shù)都是使用純C實現(xiàn),保證了函數(shù)運行時的效率,通過遵循Postgresql的自定義函數(shù)接口,實現(xiàn)了PostGIS和數(shù)據(jù)庫的無縫集成。在PostGIS中,新添加了一個類型字段geometry,它使用OGC的WKB來表示空間數(shù)據(jù)的組織形式。并且可以通過asText()這個SQL函數(shù)使得geometry這個字段轉(zhuǎn)換成OGC的WKT形式,從而對用戶友好。PostGIS還實現(xiàn)了OGC的空間對象操作標(biāo)準中的接口,比如intersects,equal等等,提高了它的可使用性。MyGIS服務(wù)器與PostGIS的交互由于Postgresql定義了自己獨有的二進制數(shù)據(jù)的存儲方式(bytea),使得不能通過普通的方法來得到二進制數(shù)據(jù)。GIS服務(wù)器的數(shù)據(jù)訪問模塊需要調(diào)用Postgresql特殊的API來得到二進制數(shù)據(jù),下面是一段示例代碼片段: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中最后一個參數(shù)為1,表示客戶端需要原始的二進制流,而不是Postgresql特有的bytea流。在得到數(shù)據(jù)庫中幾何對象的WKB數(shù)據(jù)之后,MyGIS服務(wù)器需要根據(jù)OGC的幾何對象格式定義標(biāo)準(見附錄B)解析這段數(shù)據(jù),由于之前的MyGIS對象體系結(jié)構(gòu)實現(xiàn)了面向?qū)ο蟮脑O(shè)計。在這里可以也可以利用面向?qū)ο蟮姆庋b特性來對數(shù)據(jù)解析這部分實現(xiàn)面向?qū)ο蟮脑O(shè)計。Point.CPPPoint::Point(constUCHAR*uc){ //復(fù)制點對象的數(shù)據(jù) memcpy(&_x,uc,8); memcpy(&_y,uc+8,8);}Curve.CPPvoidCurve::init(constUCHAR*uc)const{ UINTnumber=0; UINTindex=0; doublex=0; doubley=0; //得到線里面點的個數(shù) memcpy(&number,uc,sizeof(UINT)); index+=sizeof(UINT); for(UINTi=0;i<number;i++) { //構(gòu)造一個新的點,并加入到線的集合里面。 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; //得到多邊形里面線的數(shù)目 memcpy(&numRings,uc+index,sizeof(int)); index+=sizeof(int); for(inti=0;i<numRings;i++) { //得到多邊形里面每條線中點的個數(shù) memcpy(&numPoints,uc+index,sizeof(int)); //構(gòu)造一條線并且加入到這個多邊形 Curve*c=newCurve(uc+index); arRings.push_back(c); //增加偏移量使得指針指向正確的位置 index+=sizeof(int); index+=(numPoints)*sizeof(double)*2; } }由上面的代碼可以看出,在幾何對象的構(gòu)造過程中,體現(xiàn)了面向?qū)ο蟮姆庋b和包含的特點,同時也使得代碼不堆積在一個解析函數(shù)里面,使得每個函數(shù)的分工明確,短小精悍。GIS服務(wù)器繪圖模塊的設(shè)計由于輸出數(shù)據(jù)是MyGIS服務(wù)器最常用的一個功能,并且根據(jù)數(shù)據(jù)生成相應(yīng)的數(shù)據(jù)更是最常用的功能之一。在這里,同樣也是使用面向?qū)ο蟮姆椒▉韺L圖模塊進行設(shè)計,同時,使用了面向?qū)ο笞钪匾囊粋€特性:多態(tài)(polymorphism)在繪圖的類中,擁有這樣一個BaseObject接口的指針的數(shù)組,它們分別指向不同子類的對象,Point,Curve,Polygon等等。由于Paint方法是BaseObject公開的一個接口,同時它也是一個虛函數(shù),C++程序可以在運行時找到BaseObject指針指向的子類對象的類型,并且調(diào)用相應(yīng)的真正的Paint函數(shù)。使得在設(shè)計上,整個系統(tǒng)架構(gòu)比較均衡,同時也很容易擴展:只要添加一個新的類,找到它在類繼承層次中的正確位置,再實現(xiàn)相應(yīng)的需要實現(xiàn)的接口即可,不需要改動原有的代碼。在實現(xiàn)真正的繪圖功能時,為了使系統(tǒng)更好的移植,在各個系統(tǒng)上運行,GIS服務(wù)器使用了一個開源的圖形處理庫:GD庫[11]。它將與系統(tǒng)真正繪圖的API(如GDI+)與程序隔離開來,在不同結(jié)構(gòu)的系統(tǒng)下面,只需要使用相對應(yīng)版本的GD庫即可。下面是Point,Curve,Polygon的Paint函數(shù)實現(xiàn)。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工作總結(jié)需要進行的工作由于時間關(guān)系,MyGIS服務(wù)器的設(shè)計并不完善,當(dāng)前存在著這樣幾個缺點。與外部進行交互的接口不統(tǒng)一MyGIS由于在設(shè)計初期就被定位成可以和各種類型的外部系統(tǒng)交互,包括客戶端和后臺數(shù)據(jù)源,但是由于沒有一個通用的訪問接口(API),使得MyGIS在和客戶端和服務(wù)器交互的時候不夠靈活,需要進行大量的工作,同時也降低了系統(tǒng)的工作效率和以后的可維護性不能承受高負載的應(yīng)用隨著時間的推移,在實際應(yīng)用中整個系統(tǒng)存儲的空間數(shù)據(jù)越來愈大,客戶端的數(shù)量和種類也會越來越多,整個系統(tǒng)結(jié)構(gòu)和邏輯愈趨復(fù)雜,并且每一次空間分析或數(shù)據(jù)請求可能需要檢索和分析海量的數(shù)據(jù),這樣單獨提高單個服務(wù)器的性能是遠遠不夠的。而MyGIS在應(yīng)對這種海量請求和海量數(shù)據(jù)時,性能會大幅度的下降。系統(tǒng)配置不夠靈活當(dāng)前的MyGIS服務(wù)器的一些配置都是直接硬編碼在程序中,實際應(yīng)用中遇到的情況各不相同,使用者的要求也不一樣,整個服務(wù)器需要一個靈活的配置管理工具,來滿足各種情況。系統(tǒng)在面對突發(fā)情況或者錯誤時不能很好的應(yīng)對。當(dāng)前的GIS服務(wù)器不能很好的應(yīng)對突發(fā)性的錯誤(比如內(nèi)存不夠,所需要的資源沖突等等)。服務(wù)器在出現(xiàn)錯誤時,只能在終端輸出一條簡單的錯誤信息,甚至操作系統(tǒng)強行終止服務(wù)器進程,關(guān)閉整個應(yīng)用。用戶也不能得知出錯的原因和對整個系統(tǒng)產(chǎn)生的影響。當(dāng)前的解決方案根據(jù)以上發(fā)現(xiàn)的缺點,現(xiàn)提出幾個針對這些缺點的改進方案統(tǒng)一外部系統(tǒng)與MyGIS交互的接口為了更好的實現(xiàn)系統(tǒng)的松耦合以及可擴展性,可以對GIS服務(wù)器與外部(客戶端,其他GIS服務(wù)器,數(shù)據(jù)庫)交互的接口進行提取,封裝,設(shè)計,從而更加優(yōu)化整個系統(tǒng)的設(shè)計,提高系統(tǒng)的可維護性和開發(fā)周期以及降低后續(xù)開發(fā)的成本。例如,對于與數(shù)據(jù)庫的交互,可以實現(xiàn)一個通用的provider接口,對不同數(shù)據(jù)源的讀取模塊,只要實現(xiàn)這個接口,就能夠與GIS服務(wù)器進行良好的交互。為MyGIS添加負載平衡模塊以適應(yīng)高負載的工作在圖2.2描述的系統(tǒng)結(jié)構(gòu)中,GIS服務(wù)器并沒有專門的負載平衡機制,只是簡單將請求進行轉(zhuǎn)發(fā)。在以后的工作中,可以實現(xiàn)一個專門為服務(wù)器集群的情況下使用的ServiceDispatcher,判斷當(dāng)前整個服務(wù)器集群的運行情況,從而選擇最優(yōu)的節(jié)點來轉(zhuǎn)發(fā)請求,達到真正的動態(tài)負載平衡。實現(xiàn)配置文件管理實現(xiàn)一個服務(wù)器的配置類。用戶通過修改相應(yīng)的配置文件,而MyGIS服務(wù)器在啟動的時候讀取對當(dāng)前服務(wù)器的配置文件,從而對服務(wù)器進行調(diào)整來適應(yīng)各種情況,更加靈活的面對不同的需求。實現(xiàn)日志記錄和錯誤處理通過在出錯時顯示用戶友好的出錯信息和錯誤處理提示,以及相應(yīng)的在日志中記錄一些關(guān)鍵信息,不僅能得到很好的用戶體驗,也能使得管理員及時發(fā)現(xiàn)錯誤的原因,使問題得到迅速解決。對系統(tǒng)使用多線程編程以更好的利用硬件資源。當(dāng)前的GIS服務(wù)器只是針對單線程的情況設(shè)計,并沒有對關(guān)鍵資源進行訪問控制,在面對多客戶端并發(fā)訪問的時候,很有可能產(chǎn)生嚴重錯誤,同時現(xiàn)在的服務(wù)器硬件都是多CPU型服務(wù)器,可以對整個系統(tǒng)進行改造,支持多線程,提高系統(tǒng)健壯性和更大效率的利用資源。結(jié)論本文通過研究GIS系統(tǒng)的類型,結(jié)構(gòu)和特點,提出了自己的GIS系統(tǒng)解決方案,通過引進開源軟件作為系統(tǒng)的一個組成部分,不僅提高了整個系統(tǒng)的開發(fā)效率(數(shù)據(jù)庫,圖像),而且通過引進開源軟件,可以通過系統(tǒng)需求靈活的定制系統(tǒng)的每一個部分,以達到整個系統(tǒng)對資源最高的利用率。系統(tǒng)完全按照OGC(開放空間協(xié)會)制定的標(biāo)準實現(xiàn),使得整個系統(tǒng)能夠很好的與其他異構(gòu)的GIS系統(tǒng)進行交互。整個GIS資源對用戶開放,提高了GIS資源的利用率。本文主要介紹了MyGIS系統(tǒng)的結(jié)構(gòu),它的主要組成部分,以及這些組成部分的詳細實現(xiàn)細節(jié)。同時提出了自己的設(shè)計思想以及創(chuàng)新之處。但是整個系統(tǒng)的實現(xiàn)還不完善,需要做的工作還有很多,并且隨著開發(fā)和維護的進一步深入,相信會遇到更多的困難和問題。致謝首先,我要感謝我的導(dǎo)師,不論在生活還是學(xué)習(xí)上給我的幫助和鼓勵。同時五班的同學(xué)們也在我遇到困難的時候給與我很大的幫助,由于我是在企業(yè)做的畢業(yè)設(shè)計,難免要占用一點工作的時間,對此我向我在企業(yè)的領(lǐng)導(dǎo)對我的寬容表示誠摯的謝意,在工作中,同事也在我遇到困難的時候給我鼓勵,給予我?guī)椭?,感謝你們對我的支持!參考文獻[1]鄔倫,劉瑜,張晶等地理信息系統(tǒng)——原理、方法和應(yīng)用[M]北京:科學(xué)出版社,2001.[2]陳述彭地理信息系統(tǒng)導(dǎo)論[M]科學(xué)出版社,1999[3]M.F.WroboysGISAComputingPerspective[M]Taylor&Frarncis,1995[4]李德仁,關(guān)澤群空間信息系統(tǒng)的集成與實現(xiàn)[M]武漢:武漢測繪科技大學(xué)出版社,2000[5]ShashiShekhar,SanjayChawlaSpatialDatabases:ATour[M]PrenticeHall/Pearson,2004[6]孫家廣等計算機圖形學(xué)[M]北京:清華大學(xué)出版社,1995[7]梁啟章GIS和計算機制圖[M]北京:科學(xué)出版社,1995[8]承繼成等國家空間信息基礎(chǔ)設(shè)施與數(shù)字地球[M]清華大學(xué)出版社,1999[9]StewartFotheringham,PrterRogersonSpatialAnalysisandGIS[M]Taylor&Francis,1994[10]薩師煊,王珊數(shù)據(jù)庫系統(tǒng)概論[M]高等教育出版社,1983[11]GD[OL][12]PostGIS.[OL][13]ESRI[OL][14]OGC[OL][15]Postgresql[OL]附錄附錄ABNF表達式<點>::=<x><y><幾何對象注記文字>::=<點注記文字>|<線注記文字>|<多邊形注記文字> |<三角形注記文字>|<多面體的表面注記文字>|<三角形不規(guī)則網(wǎng)絡(luò)注記文字>|<多點注記文字>|<多線注記文字>|<多多邊形注記文字>|<空間對象集合注記文字><點注記文字>::=點<點文字><線注記文字>::=線<線文字><多邊形注記文字>::=多邊形<多邊形文字><多面體的表面注記文字>::=多面體的表面<多面體的表面文字><三角形注記文字>::=三角形<三角形文字><三角形不規(guī)則網(wǎng)絡(luò)注記文字>::=三角形不規(guī)則網(wǎng)絡(luò)<多面體的表面文字><多點注記文字>::=多點<多點文字><多線注記文字>::=多線<多線文字><多多邊形注記文字>::=多多邊形<多多邊形文字><幾何對象集合注記文字>::=幾何對象集合<幾何對象集合文字><點文字>::=<空集>|<左小括號><點><右小括號><線文字>::=<空集>|<左小括號><點>{<逗號><點>}*<右小括號><多邊形文字>::=<空集>|<左小括號><線文字>{<逗號><線文字>}*<右小括號><多面體的表面文字>::=<空集>|<左小括號><多邊形文字>{<逗號><多邊形文字>}*<右小括號><多點文字>::=<空集>|<左小括號><點文字>{<逗號><點文字>}*<右小括號><多線文字>::=<空集>|<左小括號><線文字>{<逗號><線文字>}*<右小括號><多多邊形文字>::=<空集>|<左小括號><多邊形文字>{<逗號><多邊形文字>}*<右小括號><空間對象集合文字>::=<空集>|<左小括號><幾何對象注記文字>{<逗號><幾何對象注記文字>}*<右小括號>附錄B幾何對象的WKB表示//基本類型定義//byte:一個字節(jié)//uint32:無符號32位整型(4字節(jié))//double:雙精度數(shù)字(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論