畢業(yè)設(shè)計(jì)(論文)基于GML的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)_第1頁
畢業(yè)設(shè)計(jì)(論文)基于GML的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)_第2頁
畢業(yè)設(shè)計(jì)(論文)基于GML的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)_第3頁
畢業(yè)設(shè)計(jì)(論文)基于GML的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)_第4頁
畢業(yè)設(shè)計(jì)(論文)基于GML的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于gml的多源數(shù)據(jù)轉(zhuǎn)換方法實(shí)現(xiàn)摘要:論文對應(yīng)用gml(geography markup language,地理標(biāo)識語言)解決地理信息共享的國內(nèi)外研究現(xiàn)狀進(jìn)行了分析,針對目前地理信息共享的需求,提出了運(yùn)用gml解決地理信息共享問題。對gml進(jìn)行了分析,詳細(xì)說明了讀取多源空間數(shù)據(jù)并向gml轉(zhuǎn)換的關(guān)鍵技術(shù),開發(fā)了一個(gè)多源gis數(shù)據(jù)向gml轉(zhuǎn)換的工具,利用該工具基本實(shí)現(xiàn)了多源空間數(shù)據(jù)在數(shù)據(jù)格式層次上的集成和共享,并利用arcgis軟件及其數(shù)據(jù)互操作擴(kuò)展模塊對轉(zhuǎn)換結(jié)果進(jìn)行了分析,結(jié)果表明此轉(zhuǎn)換工具轉(zhuǎn)換前后除漢字編碼問題外并無空間和屬性數(shù)據(jù)的損失,工具與現(xiàn)有g(shù)is平臺自帶轉(zhuǎn)換軟件相比更加簡單方便、費(fèi)用低

2、,滿足了數(shù)據(jù)轉(zhuǎn)換的基本要求,最后提出了基于gml和地理信息服務(wù)標(biāo)準(zhǔn)的地理信息共享架構(gòu),為今后的地理信息共享研究提供了一個(gè)可行的解決方案。關(guān)鍵詞:gml;多源空間數(shù)據(jù);數(shù)據(jù)轉(zhuǎn)換;信息共享abstract:this paper analyzes the actuality of sharing geographic information by using gml (geography markup language) in china and abroad. to satisfy the need of geographic informations sharing, a gml based s

3、cheme is advanced. then the specification of gml is analyzed. it gives a detailed description of the key technologies to retrieval multi-source spatial data and to convert it to gml documents. a converting tool for multi-sources spatial data to gml documents has been developed. in this way, we can a

4、chieve data integration and interoperability from multi-resources and different format in the data format level. then it analyzes the conversion results making use of the arcgis software and its data interoperability expansion module. the results indicate that in addition to chinese character encodi

5、ng, there is no loss of spatial and attribute information between the source and the conversed data by using the developed conversion tool. this tool is lower in expense, more convenient and simple to use comparing the existing gis transform software. it meets the basic demands of data conversion. f

6、inally, gml and geographic information service standard based information sharing framework is put forward, to provide a solution in the future research.keywords:gml; multi-source spatial data; data conversion; information sharing1引言1.1問題的提出近年來,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,gis(geographic information system,地理信息系統(tǒng))技

7、術(shù)也得到了快速的發(fā)展和廣泛的應(yīng)用。然而,隨之而來的各種問題和弊端也逐漸顯露。尤其是各種gis軟件、硬件和數(shù)據(jù)格式并存,使得地理信息很難共享,這一方面造成了系統(tǒng)間的隔閡,另一方面也造成了極大的人力、物力和財(cái)力浪費(fèi)。在這種情況下,人們意識到只有軟件、硬件、數(shù)據(jù)等要素進(jìn)行必要的標(biāo)準(zhǔn)化才能更有效、廣泛地使用gis,標(biāo)準(zhǔn)化的真正實(shí)現(xiàn)將使人們能在一個(gè)共同理解基礎(chǔ)上共享信息和資源1。這其中,不同的gis數(shù)據(jù)格式帶來的問題首當(dāng)其沖,為了利用其他數(shù)據(jù)格式的地理數(shù)據(jù),各種gis 軟件紛紛花費(fèi)大量精力和物力開發(fā)了不同gis數(shù)據(jù)格式之間的轉(zhuǎn)換工具,但由于各種gis數(shù)據(jù)格式的模型差別較大,使得這些數(shù)據(jù)轉(zhuǎn)換往往會有很多數(shù)

8、據(jù)精度的損失,給人們共享地理信息帶來了極大的困難。當(dāng)前及未來將建設(shè)的“數(shù)字城市”、“數(shù)字中國”乃至“數(shù)字地球”,就必須實(shí)現(xiàn)gis基礎(chǔ)數(shù)據(jù)的高度共享和集成。為了解決地理數(shù)據(jù)共享這一問題,ogc(opengis consortium,開放式地理信息系統(tǒng)聯(lián)合會)在xml(extensible markup language,可擴(kuò)展標(biāo)記語言 )的基礎(chǔ)上,于1999年提出了gml(geography markup language,地理標(biāo)識語言)這一標(biāo)準(zhǔn)的地理信息標(biāo)識語言,用于統(tǒng)一地存儲和傳輸?shù)乩頂?shù)據(jù),并得到了眾多gis軟件的支持。由于gml的標(biāo)準(zhǔn)作用,gml技術(shù)將成為解決地理數(shù)據(jù)共享和集成的有效方法。

9、但是現(xiàn)存的大量gis數(shù)據(jù)為非gml數(shù)據(jù),因此必須要有相應(yīng)的數(shù)據(jù)轉(zhuǎn)換工具將現(xiàn)存gis數(shù)據(jù)轉(zhuǎn)換成gml格式,以便實(shí)現(xiàn)所有g(shù)is數(shù)據(jù)的集成與共享。1.2國內(nèi)外研究現(xiàn)狀當(dāng)前gml規(guī)范已發(fā)布至gml 3.1.1版本,gml自發(fā)布以來得到了行業(yè)內(nèi)包括oracle、esri、galdos、mapinfo 、cubewerx 等眾多公司的支持。其中g(shù)aldos公司專門從事gml研究,它制定了gml的各個(gè)版本,在gml的基礎(chǔ)研究方面做的最具體、最為深入和全面,是gml技術(shù)的領(lǐng)頭羊,它的gml sdk產(chǎn)品描述和整合了gml到已有應(yīng)用、產(chǎn)品或者服務(wù)的有效方法2。 esri在arcims 3.0中集成了xml,arc

10、xml是其針對xml的產(chǎn)品,內(nèi)容是gml 的超集,而在arcgis 8.0中則增添了對gml的支持3。mapinfo公司在mapinfo7. 0也開始支持gml4。intergraph公司在新近推出的產(chǎn)品中聲稱完全支持ogc的gml標(biāo)準(zhǔn),該公司的geomedia和geomedia professional能夠讀寫gml格式的空間數(shù)據(jù),而它的新版本的geomedia webmap和geomedia webenterprise則能根據(jù)gml規(guī)范生成符合該規(guī)范的空間特征數(shù)據(jù)5。近年來,國產(chǎn)gis軟件也部分實(shí)現(xiàn)了對gml的支持,如超圖公司最新出的supermap iii 全面支持gml和xml等規(guī)范,

11、它可直接接受gml等規(guī)范的數(shù)據(jù),同時(shí),每個(gè)幾何對象都可以單獨(dú)輸入輸出xml節(jié)點(diǎn)字符串6。中地?cái)?shù)碼公司的mapgis-ims 70專業(yè)版也聲稱支持gml3.0標(biāo)準(zhǔn)7。此外吉奧公司的geosurf mapserve也提供了gml矢量地圖服務(wù)8。除了這些gis商業(yè)軟件,國內(nèi)外還有一些研究機(jī)構(gòu)的科學(xué)項(xiàng)目也在做gml相關(guān)的研究工作,相繼開發(fā)出了一些支持gml和gml轉(zhuǎn)換的軟件。張競等用java語言開發(fā)了shapefile文件轉(zhuǎn)換成gml文件的軟件9。曠建中等人在提出基于gml的多源空間數(shù)據(jù)集成模型的基礎(chǔ)上用visual basic語言編程實(shí)現(xiàn)了多源空間數(shù)據(jù)到gml 之間的轉(zhuǎn)換和集成10。陳玉敏等采用基于

12、xml的空間數(shù)據(jù)互操作與可視化系統(tǒng),將存儲在arclms中的數(shù)據(jù)利用arclms提供的二次開發(fā)函數(shù)將其轉(zhuǎn)換為gml格式;將存儲在oracle數(shù)據(jù)庫的數(shù)據(jù)采用geostar4.0組件轉(zhuǎn)換為gml格式的中間數(shù)據(jù),將存儲在文件系統(tǒng)的數(shù)據(jù)采用geosurf4.0的javabean組件轉(zhuǎn)換為gml數(shù)據(jù)?;趍icrosoft visual studionet軟件,編寫web應(yīng)用服務(wù),將gml數(shù)據(jù)疊加處理,提取出所需的數(shù)據(jù)信息11。1.3 本文的研究內(nèi)容和意義通過上文介紹可以看出,現(xiàn)行的gis軟件許多只是很有限的支持和轉(zhuǎn)換gml數(shù)據(jù)(如mapinfo,其他一些軟件可能也存在這種情況),arcgis 9 的

13、數(shù)據(jù)互操作擴(kuò)展模塊雖能較好的支持和轉(zhuǎn)換gml數(shù)據(jù),但由于其屬于擴(kuò)展模塊還需要另外購買,提高了數(shù)據(jù)成本?;谶@種情況,筆者認(rèn)為,對于一些簡單的數(shù)據(jù)轉(zhuǎn)換有必要自行開發(fā)一個(gè)簡單而經(jīng)濟(jì)的基于gml的空間數(shù)據(jù)轉(zhuǎn)換工具,達(dá)到多源地理數(shù)據(jù)共享的目的。本文在熟悉了gml2.0規(guī)范的基礎(chǔ)上,運(yùn)用microsoft(ms) .net平臺編程實(shí)現(xiàn)了不同gis格式的數(shù)據(jù)向gml的轉(zhuǎn)換??紤]到本次設(shè)計(jì)僅是對運(yùn)用gml技術(shù)解決空間數(shù)據(jù)集成進(jìn)行的一次嘗試,所以僅選擇了兩種較為流行的gis數(shù)據(jù)格式作為擬轉(zhuǎn)換的格式,分別是esri shapefile格式和mapinfo數(shù)據(jù)交換格式mif/mid,初步達(dá)到了利用gml這一標(biāo)準(zhǔn)地

14、理標(biāo)記語言實(shí)現(xiàn)gis數(shù)據(jù)共享的目的,并提出了自己對運(yùn)用地理信息數(shù)據(jù)和服務(wù)標(biāo)準(zhǔn)實(shí)現(xiàn)地理信息共享這一問題的思路,在地理信息共享與互操作方面做了一些探索。2 gml技術(shù)分析要將源數(shù)據(jù)轉(zhuǎn)換成gml必須要熟悉gml的相關(guān)規(guī)范,掌握其對空間數(shù)據(jù)模型的描述,而gml是基于xml的標(biāo)識語言,是xml在地理空間信息領(lǐng)域的重要應(yīng)用,因而要了解gml必須首先了解xml。本次設(shè)計(jì)對xml和gml的規(guī)范進(jìn)行了研究,現(xiàn)簡要介紹如下。2.1 xml簡介xml是可擴(kuò)展標(biāo)志語言(extensible markup language)的簡稱。同html(hypertext markup language,超文本標(biāo)記語言)一樣,x

15、ml是從sgml(standard generalized markup language,標(biāo)準(zhǔn)通用標(biāo)記語言)那里派生出來的。它是由w3c(world wide web consortium,萬維網(wǎng)聯(lián)盟)創(chuàng)建的,并于1998年發(fā)布了xml1.0規(guī)范12。相對于html,xml是可擴(kuò)展的,實(shí)現(xiàn)了數(shù)據(jù)存儲與數(shù)據(jù)顯示分離,具有更大的靈活性,并且已成為一種國際標(biāo)準(zhǔn),得到了眾多企業(yè)的支持,在許多行業(yè)得到了廣泛的應(yīng)用。xml的核心包括其基本的語法、xml命名空間以及xml模式。xml文檔中任何東西不是標(biāo)記就是字符數(shù)據(jù)。標(biāo)記包括標(biāo)簽,標(biāo)簽總是括在尖括號()中的,且標(biāo)記區(qū)分大小寫。xml命名空間(namesp

16、aces)提供了一種復(fù)合命名語法,它擴(kuò)展了xml1.0對名字的定義,以保證為共享的詞匯表產(chǎn)生唯一的名字。早期的xml是利用dtd(document type definition,文檔類型定義)來規(guī)范和驗(yàn)證xml文檔的,xml schema(xml模式)是第二種用于為xml文檔定義數(shù)據(jù)模型的技術(shù),與dtd相比它具有更多的功能和靈活性。2.2 gml簡介gml是由ogc制定的基于xml的地理信息編碼規(guī)范,主要用于地理信息的傳輸和存儲。2000年正式推出了gml1.0版本,2001年2月推出了gml2.0,2003年2月推出了gml3.0,目前gml的最新版本為2004年4月發(fā)布的gml3.1.1

17、。gml1.0是基于xml dtd的, gml從2.0開始完全基于xmlschema13。與其它數(shù)據(jù)格式相比,gml具有以下優(yōu)點(diǎn):(1)gml是一個(gè)開放的框架結(jié)構(gòu),可以對其進(jìn)行擴(kuò)展和繼承來完成數(shù)據(jù)編碼;(2)gml具有自描述性,可描述性很強(qiáng),這有益于保持?jǐn)?shù)據(jù)的完整性;(3)gml是由國際組織ogc提出的開放標(biāo)準(zhǔn),現(xiàn)已被很多大公司支持,易于被各種gis接受;(4)gml可以描述不同的gis數(shù)據(jù),其結(jié)構(gòu)簡單,易于操作(5)gml采用開放的基于文本格式,可用web的最基本的http協(xié)議傳送,這樣易于數(shù)據(jù)的遠(yuǎn)程動態(tài)集成;(6)gml可以與非空間數(shù)據(jù)集成,二進(jìn)制數(shù)據(jù)與其它數(shù)據(jù)的集成是非常困難的,對于二進(jìn)

18、制數(shù)據(jù)結(jié)構(gòu),必須了解其文件結(jié)構(gòu)和數(shù)據(jù)庫設(shè)計(jì)才能對其進(jìn)行修改,而gml語言的改變是十分容易的,所以數(shù)據(jù)組織也相當(dāng)容易。2.3 gml框架gml2提供了三個(gè)基于xml的基本的schema,即要素(feature)schema-feature.xsd,幾何(geometry)schema-geometry.xsd和鏈接(xlinks)schema-xlink.xsd。此三類schema的關(guān)系,見“圖2-1” 14。圖2-1 gml定義的schema之間的關(guān)系在gml中,每個(gè)feature和geometry都對應(yīng)一個(gè)相應(yīng)的類型(type)。該類型等同于對象建模中的類(class),feature和ge

19、ometry的狀態(tài)由類型和類型中的屬性決定。gml中的schema對這些類型和屬性等元素進(jìn)行了定義14。(1)geometry schema。描述了詳細(xì)的幾何模型,包括抽象幾何對象、坐標(biāo)(coordinate)、邊界框(box)、point、linestring、linearring、polygon、 multipoint、multilinestring、multipolygon、multigeometry等幾何元素的定義,并通過元素引入xlink.xsd的定義。(2)feature schema。描述了全面的要素模型,與geometry schema一樣,feature schema定義了抽

20、象和具體元素和類型,并通過元素引入了幾何schema中的定義和聲明。feature包括一系列的屬性和相應(yīng)的幾何信息,一般來說,屬性有名字、類型。gml的feature.xsd描述了地理要素的編碼,可以象一般xml語言定義一些不包含幾何信息的普通元素,這些元素可以嵌套或者參照,還可以定義相應(yīng)的屬性信息。這些屬性信息加上幾何信息,就可以定義具體的地理實(shí)體,即地理對象。gml定義了抽象的元素類型,同時(shí)也定義了一些具體的類型,并且用戶可以擴(kuò)充模型的定義,以滿足特定的需要。(3)xlink schema。定義xlink屬性,用于實(shí)現(xiàn)鏈接功能。gml提供了一種以萬維網(wǎng)可關(guān)聯(lián)xlinking語言為基礎(chǔ)的普通

21、機(jī)制來表達(dá)gml對象間的關(guān)聯(lián)。簡單關(guān)聯(lián)模式是xlink:type=”simple”和xlink:href所隸屬的屬性的應(yīng)用。xlinks.xsd模式文檔的內(nèi)容在/1999/xlink命名空間中描述,通常使用前綴xlink。所有其它模式文檔的內(nèi)容在2.4 gml對空間數(shù)據(jù)模型的描述gml3可以描述各種復(fù)雜的幾何實(shí)體、空間參考系統(tǒng)、拓?fù)潢P(guān)系、元數(shù)據(jù)、柵格數(shù)據(jù)、時(shí)態(tài)數(shù)據(jù)等。但最新的gml基本模式已經(jīng)被模塊化,因此,應(yīng)用模式不需要完全的gml定義,可以僅僅引入需要的gml子集。對于坐標(biāo)參考系統(tǒng),拓?fù)?,覆蓋,支柱要素,缺省樣式,以及觀測,不需要導(dǎo)入或解析gml版本定義。但

22、是,需要引入或解析gml3中添加的新的基本類型。由于本次設(shè)計(jì)所涉及的都是簡單實(shí)體對象,因此在這里僅介紹gml對一些簡單的幾何實(shí)體的描述。gml對簡單要素的幾何模型描述見“圖2-2” 13。圖2-2 gml對簡單要素的幾何模型下面簡要的介紹一下gml對一些主要的空間要素的描述方法13。2.4.1 gml對坐標(biāo)和點(diǎn)(point)的編碼幾何圖形的坐標(biāo)可以用一系列的元素組或元素的單一字符串來編碼,元素中數(shù)據(jù)的組數(shù)由數(shù)據(jù)類型決定,其geometry schema如下:點(diǎn)(point)只含有一組坐標(biāo)組,其基于坐標(biāo)編碼的示例如下:point srsname=5.040.0其中srsname=而與作用一樣,但

23、更具有彈性,將所有坐標(biāo)值儲存在一個(gè)字符串內(nèi),缺省的坐標(biāo)值間隔符是“,”,坐標(biāo)組的間隔符號是unicode的空白,用戶也可以根據(jù)需要改變上述間隔符。上面所述的例子用編碼如下:point srsname=5.0,40.02.4.2 gml對直線串(linestring)的編碼這里的直線串是由兩組以上的點(diǎn)坐標(biāo)所構(gòu)成的,編碼方式示例如下:linestring srsname=0.00.020.035.0100.0100.02.4.3 gml對線環(huán)(linearring)和多邊形(polygon)的編碼線環(huán)是封閉的直線串,其第一個(gè)坐標(biāo)值與最后一個(gè)坐標(biāo)值一樣,它是被用來建構(gòu)多邊形的。其用法示例見下面的多邊

24、形編碼介紹。多邊形的邊界是由線環(huán)(linearring)組成的,且區(qū)分外邊界(outer boundary)和內(nèi)邊界(inner boundary),內(nèi)邊界可以有多個(gè)但彼此不能交叉及包含,邊界點(diǎn)的順序是順時(shí)針或逆時(shí)針不重要。其用法示例如下,該多邊形有兩個(gè)內(nèi)部邊界:polygon gid=_98217 srsname=0.0,0.0 100.0,0.0 100.0,100.0 0.0,100.0 0.0,0.010.0,10.0 10.0,40.0 40.0,40.0 40.0,10.0 10.0,10.060.0,60.0 60.0,90.0 90.0,90.0 90.0,60.0 60.0,

25、60.02.4.4 gml對幾何圖形集合的編碼gml geometry schema所預(yù)先定義的幾何圖形集合(geometry collection),可分為同質(zhì)幾何圖形集合(homogeneous geometry collection)及異質(zhì)幾何圖形集合(heterogeneous geometry collection)兩種。同質(zhì)幾何圖形集合指同類型幾何元素的集合,包括multipoint、multilinestring、multipolygon等三種。異質(zhì)幾何圖形集合指不同類型幾何元素的集合,gml geometry schema中的multigeometry元素即為異質(zhì)幾何圖形集合,

26、它包括point、linestring、polygon、multipoint、multilinestring、multipolygon等幾何圖形元素以及其他的幾何圖形集合。其用法示例如下(它包含point、linestring及polygon三種不同的幾何元素的成員):multigeometry gid=c731 srsname=50.050.00.00.00.050.0100.050.00.0,0.0 100.0,0.0 50.0,100.0 0.0,0.02.5 應(yīng)用程序模式(application schema)的應(yīng)用gml為各應(yīng)用程序的模式提供了基本的類型和結(jié)構(gòu),但這些類型和結(jié)構(gòu)往往不

27、能完全滿足各應(yīng)用程序的需要,這些應(yīng)用程序可以在那些gml定義的基本類型和結(jié)構(gòu)的基礎(chǔ)上擴(kuò)展得到應(yīng)用程序所需要的類型和結(jié)構(gòu)。2.5.1定義新的要素類型應(yīng)用程序創(chuàng)建的新的要素類型和結(jié)構(gòu)必須基于gml:abstractfeaturetype 或者gml:abstractfeaturecollectiontype13。其模式(schema)定義如下:2.5.2定義新的幾何類型應(yīng)用程序創(chuàng)建的新的幾何類型和結(jié)構(gòu)必須基于abstractgeometrytype 或者geometrycollectiontype。其模式定義如下:2.5.3聲明目標(biāo)名稱空間用戶必須為他們自己的應(yīng)用聲明一個(gè)目標(biāo)命名空間,這一命名空間

28、按習(xí)慣是一個(gè)由應(yīng)用模式設(shè)計(jì)者組織控制的uri(uniform resource identifier,統(tǒng)一資源標(biāo)示符),以確保其內(nèi)定義的同名成員變量之間不會互相沖突和影響。目標(biāo)命名空間在應(yīng)用模式中用引自xml模式的模式元素屬性targetnamespace 聲明。用來標(biāo)識命名空間的網(wǎng)絡(luò)地址并不被xml解析器調(diào)用,xml解析器不需要從這個(gè)網(wǎng)絡(luò)地址中查找信息,該網(wǎng)絡(luò)地址的作用僅僅是給命名空間一個(gè)唯一的名字,因此這個(gè)網(wǎng)絡(luò)地址也可以是虛擬的,如在本次設(shè)計(jì)中,將用targetnamespace = 一個(gè)應(yīng)用模式可以由多個(gè)具有相同目標(biāo)命名空間的模式文檔組成,但在模塊化的應(yīng)用模式中,最頂層的模式文檔應(yīng)該直接

29、或間接地包含其它的模式文檔。2.5.4引入gml schema每個(gè)應(yīng)用程序在創(chuàng)建自己的模式(schema)時(shí),需要引入(import)相關(guān)使用到的gml標(biāo)準(zhǔn)schema及其名稱空間,如一般都需要引入定義了gml標(biāo)準(zhǔn)要素的feature.xsd,方法如下:import schemalocation= feature.xsd namespace= 同時(shí),在gml文件中,一般要聲明本gml所遵循的schema文件,如在本設(shè)計(jì)中將在gml文件中聲明如下:“xs:schemalocation = *.xsd。3 多源數(shù)據(jù)向gml轉(zhuǎn)換的實(shí)現(xiàn)3.1多源數(shù)據(jù)轉(zhuǎn)換gml總體流程為了達(dá)到數(shù)據(jù)轉(zhuǎn)換的目的,在此對轉(zhuǎn)換

30、的技術(shù)路線進(jìn)行了設(shè)計(jì),要生成gml數(shù)據(jù),首先要生成該gml文件的模式(schema)文件.xsd,該xsd文件定義了gml文件中的complextype要素和各個(gè)子要素及其遵循的格式等。整個(gè)流程見“圖3-1”所示。圖3-1 轉(zhuǎn)換gml總體技術(shù)流程即首先分別讀取shapefile和mif/mid文件中的屬性數(shù)據(jù)和空間數(shù)據(jù),然后根據(jù)所讀取文件的字段信息生成gml schema文件,再根據(jù)此schema文件,寫同時(shí)含有屬性和空間數(shù)據(jù)的gml文件,最后還需要對生成的gml進(jìn)行驗(yàn)證。3.2 讀取shapefile的實(shí)現(xiàn)根據(jù)shapefile的數(shù)據(jù)格式,可以設(shè)計(jì)出讀取shapefile數(shù)據(jù)的流程見“圖3-

31、2”(以讀取包含polygon類型的數(shù)據(jù)為例)。圖3-2 讀取shapefile技術(shù)流程打開所選擇的.shp文件后,分別通過后綴名獲取其索引文件.shx和屬性數(shù)據(jù)文件.dbf(如果都存在),判斷其是否有屬性數(shù)據(jù)文件,如果有則先讀屬性數(shù)據(jù)表dbf文件,按照dbf文件的格式依次讀取dbf文件頭信息、字段頭信息和每條記錄的信息。然后再分別讀取主文件和索引文件的文件頭信息,再讀取每條記錄的信息,判斷其空間數(shù)據(jù)的類型(點(diǎn)、線、面等),分別讀取相應(yīng)的每條空間數(shù)據(jù)記錄存入到定義的數(shù)據(jù)結(jié)構(gòu)集合中。如果沒有屬性數(shù)據(jù)文件,則直接從讀取主文件和索引文件的文件頭信息開始。3.3 讀取mapinfo交換格式的實(shí)現(xiàn)mif

32、/mid文件均為文本文件,結(jié)構(gòu)比shapefile文件要簡單,其讀取的方法和讀其他文件一樣也是按照它的文件結(jié)構(gòu)讀取,即首先根據(jù)mif數(shù)據(jù)格式建立存儲mif文件頭信息的結(jié)構(gòu)體featureheader,分別構(gòu)造讀取mif和mid的文件流對象freader和mreader,然后開始讀取mif文件頭,獲取字段信息,再讀取mif文件數(shù)據(jù)部分,循環(huán)讀取每條空間記錄和屬性記錄信息,將空間信息存放至類geometryfield的對象中,屬性信息存放至類mapdata對象中,其讀取的流程圖見“圖3-3”。圖3-3 讀取mif/mid文件流程圖3.4 生成gml schema 3.4.1 生成gml schem

33、a的技術(shù)流程本次設(shè)計(jì)生成gml schema的總體技術(shù)流程圖見“圖3-4”。 圖3-4 生成gml schema流程首先構(gòu)造.net中xmlschema類的對象,給此對象添加名稱空間和版本信息,再將gml規(guī)范的標(biāo)準(zhǔn)schema(如feature.xsd等) 引入(import)此對象中,然后為導(dǎo)入的每個(gè)源文件創(chuàng)建schematype,最后創(chuàng)建文件流寫gml schema文件。生成gml schema需要應(yīng)用 microsoft .net system.xml.schema命名空間及其中包含的和xml模式相關(guān)的類,這些類包括xmlschema、xmlschemaall、xmlschemaxpat

34、h以及xmlschematype等類。3.4.2 gml schema對象的構(gòu)造microsoft .net system.xml.schema命名空間中的類xmlschema相當(dāng)于包含schema各個(gè)部分的一個(gè)容器,可以通過它的read()方法來讀現(xiàn)有的schemas;當(dāng)從頭創(chuàng)建一個(gè)schema時(shí),也可以用它來包含給它添加的各個(gè)定義(元素、特性、complextypes等等)。本質(zhì)上,xmlschema代表了schema的root tag并有幾個(gè)屬性,可以用這些屬性來給schema標(biāo)簽添加屬性,如version、targetnamespace、elementformdefault和attri

35、buteformdefault等18。本次設(shè)計(jì)gml schema對象的構(gòu)造部分實(shí)現(xiàn)如下:/構(gòu)造xmlschema對象xmlschema xs = new xmlschema();xs.targetnamespace=getns(gc);xs.version=1.0;xs.elementformdefault = xmlschemaform.qualified; xs.attributeformdefault = xmlschemaform.unqualified; /添加名字空間信息xs.namespaces.add(gc, getns(gc);xs.namespaces.add(gml,

36、getns(gml);xs.namespaces.add(xs, getns(xs);類system.xml.schema.xmlschemaimport用于引入一些schema,其使用如下:/引入gml包含標(biāo)準(zhǔn)幾何要素類型定義的schema feature.xsdsystem.xml.schema.xmlschemaimport ximport = new xmlschemaimport();ximport.namespace = getns(gml);ximport.schemalocation = feature.xsd;xs.includes.add(ximport);然后構(gòu)造gml

37、schema中的基數(shù)據(jù)類型和子數(shù)據(jù)類型名稱,xmlqualifiedname類表示 xml 限定名,如下:xmlqualifiedname thebase = new xmlqualifiedname(abstractfeaturetype, getns(gml);xmlqualifiedname thesub = new xmlqualifiedname(_feature, getns(gml);3.4.3創(chuàng)建schematype創(chuàng)建schematype即循環(huán)對每個(gè)讀取的數(shù)據(jù)文件由數(shù)據(jù)的屬性字段創(chuàng)建gml schema的復(fù)雜數(shù)據(jù)類型complextype和各子數(shù)據(jù)元素類型,對這些元素添加屬性

38、信息,并將各子元素按照一定的順序添加到復(fù)雜數(shù)據(jù)類型中。這一實(shí)現(xiàn)過程涉及到.net中的類system.xml.schema.xmlschemacomplextype、類system.xml.schema. xmlschemaelement和system.xml.schema. xmlschemacomplexcontentextension等類15。其中類xmlschemacomplextype定義了一個(gè)復(fù)雜類型,它確定了屬性集和元素的內(nèi)容,表示“萬維網(wǎng)聯(lián)合會”(w3c) complextype 元素。xmlschemacomplextype對象的內(nèi)容由讀取的屬性數(shù)據(jù)字段獲得,在本程序中,將一個(gè)

39、源文件的gml schema的復(fù)雜類型名定為源文件的文件名加上“_type”。xmlschemaelement類是用來表示一個(gè)schema中的元素,它包含minoccurs、maxoccurs、isnullable和schematypename等屬性,可以用來在schema元素標(biāo)簽上建立并設(shè)置特性。并通過xmlschema.items.add()實(shí)現(xiàn)向xmlschema要素對象集合添加xmlschema要素對象。xmlschemacomplexcontentextension類是通過擴(kuò)展而派生的具有復(fù)雜內(nèi)容模型的復(fù)雜類型的類,通過添加屬性或元素?cái)U(kuò)展復(fù)雜類型,表示復(fù)雜內(nèi)容的w3c extensi

40、on 元素。創(chuàng)建schema type函數(shù)如下:public void createschematype(ref xmlschema xs, xmlqualifiedname thebase, xmlqualifiedname thesubstitute)xmlschemacomplextype xsct=fields.getschemacomplextype(name,thebase);if(this.description!=string.empty) xsct.annotation = this.createannotation(); xs.items.add(xsct);/構(gòu)造元素xm

41、lschemaelement對象xmlschemaelement xsge = new xmlschemaelement();xsge.name = this.name; xsge.schematypename = new xmlqualifiedname(xsct.name, xs.targetnamespace);xsge.substitutiongroup = thesubstitute;/將各元素添加進(jìn)schemaxs.items.add(xsge);其中獲得schemacomplextype的函數(shù)xmlschemacomplextype getschemacomplextype(st

42、ring name,xmlqualifiedname thebase) 部分代碼如下:xmlschemacomplexcontentextension xscontext =new xmlschemacomplexcontentextension();xscontext.basetypename = thebase;/得到要素的各元素組織順序xscontext.particle = getsequenceelements();/初始化一個(gè)xmlschemacomplextype對象xmlschemacomplextype xsct = new xmlschemacomplextype();xs

43、ct.contentmodel = new xmlschemacomplexcontent();xsct.contentmodel.content = xscontext;xsct.name = name+_type; / 給complextype賦名字return xsct;3.4.4 寫gml schema文件構(gòu)造system.io.filestream文件流,通過此文件流寫xmlschema對象得到gml schema,代碼如下:system.io.filestream fs = new system.io.filestream(schemafilestring,system.io.fi

44、lemode.create);xs.write(fs);fs.close();3.5生成gml文件生成gml需要應(yīng)用system.xml.serialization命名空間中的相關(guān)串行化xml的類,串行化是獲取一個(gè)對象,并把它存入磁盤的過程。system.xml.serialization命名空間中包含了和xml文檔的串行化操作相關(guān)的類,xml文檔的串行化操作能將xml格式的數(shù)據(jù)轉(zhuǎn)化為流格式的數(shù)據(jù)并能在網(wǎng)絡(luò)中傳輸,即將流格式的數(shù)據(jù)還原成xml格式的數(shù)據(jù)。xml 串行化中最主要的類是 xmlserializer 類,它的最重要的方法是 serializer 和 deserializer 方法。x

45、mlserializer 生成的 xml 流符合w3c xml schema 1.0 規(guī)范。要串行化一個(gè)對象,首先在本程序中實(shí)例化一個(gè)xmlserializer對象,指定要要串行化的對象類型,然后實(shí)例化一個(gè)流/寫入器對象,把文件寫入流/文檔。最后一步是在xmlserializer的基礎(chǔ)上調(diào)用serializer()方法,給它傳送流/寫入器對象和要串行化的對象??梢源谢臄?shù)據(jù)有基本類型、字段、數(shù)組和xmlelement 和 xmlattribute對象格式的內(nèi)嵌xml20。當(dāng)需要 xml 流符合已知的 xml schema時(shí),可以使用 xmlserializer,屬性控制由 xmlserial

46、izer 類生成的 xml 流,可以設(shè)置 xml 流的 xml 命名空間、元素名、屬性名等。若要串行化對象,首先創(chuàng)建要串行化的對象并設(shè)置它的公共屬性和字段。為此,必須確定要用以存儲 xml 流的傳輸格式(或者作為流,或者作為文件)。如果 xml 流必須以永久形式保存,則創(chuàng)建 filestream 對象。3.5.1生成gml的技術(shù)流程本次設(shè)計(jì)生成gml數(shù)據(jù)文件的流程見“圖3-5”。首先是獲取和創(chuàng)建gml的版本信息和各名稱空間,再指定其所遵循的gml schema文件,然后根據(jù)導(dǎo)入的文件數(shù)目循環(huán)地添加各要素和屬性,最后創(chuàng)建文件流,構(gòu)造串行化類xmlseralizer按照前面生成的schema文件進(jìn)

47、行串行化,完成gml數(shù)據(jù)文件的生成。3.5.2 為gml添加元素屬性為gml添加元素屬性需要得到各自定義的數(shù)據(jù)類型,這需要應(yīng)用到ms.net中的反射類system.type ,system.type類描述了類型定義,一個(gè)類型聲明可以是一個(gè)類、接口、數(shù)組、結(jié)構(gòu)體或者枚舉。在加載了一個(gè)類之后,system.type類可以被用于枚舉該類支持的方法、屬性、事件和接口。在本次設(shè)計(jì)中,為gml添加元素屬性及生成gml的整個(gè)過程如下所示:(1)創(chuàng)建 xmlattributes 對象,xmlattributes表示一個(gè)屬性對象的集合,這些對象控制 xmlserializer 如何序列化和反序列化對象。(2)創(chuàng)

48、建被重寫的對象的屬性對象。若要重寫字段或?qū)傩?,則使用新的派生類型創(chuàng)建 xmlelementattribute,xmlelementattribute 類在 xmlserializer 序列化或反序列化包含對象時(shí),指示公共字段或?qū)傩员硎?xml 元素。圖3-5 生成gml文件流程(3)使用xmlelementattribute .add 方法將 xmlelementattribute 添加到xmlattributes集合中。 (4)創(chuàng)建 xmlattributeoverrides 對象。xmlattributeoverrides類允許在使用 xmlserializer 序列化或反序列化對象時(shí)重寫

49、屬性、字段和類特性。在創(chuàng)建 xmlattributeoverrides 對象之后,將它作為參數(shù)傳遞給 xmlserializer 構(gòu)造函數(shù)。xmlserializer 將使用 xmlattributeoverrides 包含的數(shù)據(jù)來重寫控制如何序列化對象的屬性。因此xmlattributeoverrides需要包含將被重寫的對象類型的集合,以及與各個(gè)重寫對象類型關(guān)聯(lián)的 xmlattributes 對象。(5)使用 xmlattributeoverrides.add方法,將 xmlattributes 對象添加到 xmlattributeoverrides 對象中。(6)在構(gòu)造 xmlseria

50、lizer 時(shí),將 xmlattributeoverrides 傳遞給 xmlserializer 構(gòu)造函數(shù) 。(7)使用xmlserializer 來序列化派生類對象。部分實(shí)現(xiàn)代碼如下:string xsfile = system.io.path.getfilenamewithoutextension(gmlfilestring)+.xsd;/獲得schema文件名string xsloc = getns(gc)+ +xsfile+ + getns(wfs)+ wfs-basic.xsd;features.schemalocation = xsloc;xmlattributes xatts = new xmlattributes();xmlserializernamespaces nsnames = createserializernamespaces();string targetns=getns(gc);system.type customtypes = new typethis.getactivecount();int ctc = -1;for(int i=0;ithis.cou

溫馨提示

  • 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

提交評論