毕业设计论文基于GML的多源数据转换方法实现.doc

上传人:sccc 文档编号:4863696 上传时间:2023-05-20 格式:DOC 页数:26 大小:930.52KB
返回 下载 相关 举报
毕业设计论文基于GML的多源数据转换方法实现.doc_第1页
第1页 / 共26页
毕业设计论文基于GML的多源数据转换方法实现.doc_第2页
第2页 / 共26页
毕业设计论文基于GML的多源数据转换方法实现.doc_第3页
第3页 / 共26页
毕业设计论文基于GML的多源数据转换方法实现.doc_第4页
第4页 / 共26页
毕业设计论文基于GML的多源数据转换方法实现.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《毕业设计论文基于GML的多源数据转换方法实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于GML的多源数据转换方法实现.doc(26页珍藏版)》请在三一办公上搜索。

1、基于GML的多源数据转换方法实现摘要:论文对应用GML(Geography Markup Language,地理标识语言)解决地理信息共享的国内外研究现状进行了分析,针对目前地理信息共享的需求,提出了运用GML解决地理信息共享问题。对GML进行了分析,详细说明了读取多源空间数据并向GML转换的关键技术,开发了一个多源GIS数据向GML转换的工具,利用该工具基本实现了多源空间数据在数据格式层次上的集成和共享,并利用ArcGIS软件及其数据互操作扩展模块对转换结果进行了分析,结果表明此转换工具转换前后除汉字编码问题外并无空间和属性数据的损失,工具与现有GIS平台自带转换软件相比更加简单方便、费用低

2、,满足了数据转换的基本要求,最后提出了基于GML和地理信息服务标准的地理信息共享架构,为今后的地理信息共享研究提供了一个可行的解决方案。关键词:GML;多源空间数据;数据转换;信息共享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问题的提出近年来,随着计算机技术的飞速发展,GIS(Geographic Information System,地理信息系统)技

7、术也得到了快速的发展和广泛的应用。然而,随之而来的各种问题和弊端也逐渐显露。尤其是各种GIS软件、硬件和数据格式并存,使得地理信息很难共享,这一方面造成了系统间的隔阂,另一方面也造成了极大的人力、物力和财力浪费。在这种情况下,人们意识到只有软件、硬件、数据等要素进行必要的标准化才能更有效、广泛地使用GIS,标准化的真正实现将使人们能在一个共同理解基础上共享信息和资源1。这其中,不同的GIS数据格式带来的问题首当其冲,为了利用其他数据格式的地理数据,各种GIS 软件纷纷花费大量精力和物力开发了不同GIS数据格式之间的转换工具,但由于各种GIS数据格式的模型差别较大,使得这些数据转换往往会有很多数

8、据精度的损失,给人们共享地理信息带来了极大的困难。当前及未来将建设的“数字城市”、“数字中国”乃至“数字地球”,就必须实现GIS基础数据的高度共享和集成。为了解决地理数据共享这一问题,OGC(OpenGIS Consortium,开放式地理信息系统联合会)在XML(eXtensible Markup Language,可扩展标记语言 )的基础上,于1999年提出了GML(Geography Markup Language,地理标识语言)这一标准的地理信息标识语言,用于统一地存储和传输地理数据,并得到了众多GIS软件的支持。由于GML的标准作用,GML技术将成为解决地理数据共享和集成的有效方法。

9、但是现存的大量GIS数据为非GML数据,因此必须要有相应的数据转换工具将现存GIS数据转换成GML格式,以便实现所有GIS数据的集成与共享。1.2国内外研究现状当前GML规范已发布至GML 3.1.1版本,GML自发布以来得到了行业内包括Oracle、ESRI、Galdos、MapInfo 、CubeWerx 等众多公司的支持。其中Galdos公司专门从事GML研究,它制定了GML的各个版本,在GML的基础研究方面做的最具体、最为深入和全面,是GML技术的领头羊,它的GML SDK产品描述和整合了GML到已有应用、产品或者服务的有效方法2。 ESRI在ArcIMS 3.0中集成了XML,Arc

10、XML是其针对XML的产品,内容是GML 的超集,而在ArcGIS 8.0中则增添了对GML的支持3。MapInfo公司在MapInfo7. 0也开始支持GML4。Intergraph公司在新近推出的产品中声称完全支持OGC的GML标准,该公司的GeoMedia和GeoMedia Professional能够读写GML格式的空间数据,而它的新版本的GeoMedia WebMap和GeoMedia WebEnterprise则能根据GML规范生成符合该规范的空间特征数据5。近年来,国产GIS软件也部分实现了对GML的支持,如超图公司最新出的SuperMap III 全面支持GML和XML等规范,

11、它可直接接受GML等规范的数据,同时,每个几何对象都可以单独输入输出XML节点字符串6。中地数码公司的MAPGIS-IMS 70专业版也声称支持GML3.0标准7。此外吉奥公司的GeoSurf MapServe也提供了GML矢量地图服务8。除了这些GIS商业软件,国内外还有一些研究机构的科学项目也在做GML相关的研究工作,相继开发出了一些支持GML和GML转换的软件。张竞等用Java语言开发了Shapefile文件转换成GML文件的软件9。旷建中等人在提出基于GML的多源空间数据集成模型的基础上用Visual Basic语言编程实现了多源空间数据到GML 之间的转换和集成10。陈玉敏等采用基于

12、XML的空间数据互操作与可视化系统,将存储在ArclMS中的数据利用ArclMS提供的二次开发函数将其转换为GML格式;将存储在Oracle数据库的数据采用GeoStar4.0组件转换为GML格式的中间数据,将存储在文件系统的数据采用GeoSurf4.0的JavaBean组件转换为GML数据。基于Microsoft Visual StudioNet软件,编写Web应用服务,将GML数据叠加处理,提取出所需的数据信息11。1.3 本文的研究内容和意义通过上文介绍可以看出,现行的GIS软件许多只是很有限的支持和转换GML数据(如MapInfo,其他一些软件可能也存在这种情况),ArcGIS 9 的

13、数据互操作扩展模块虽能较好的支持和转换GML数据,但由于其属于扩展模块还需要另外购买,提高了数据成本。基于这种情况,笔者认为,对于一些简单的数据转换有必要自行开发一个简单而经济的基于GML的空间数据转换工具,达到多源地理数据共享的目的。本文在熟悉了GML2.0规范的基础上,运用Microsoft(MS) .Net平台编程实现了不同GIS格式的数据向GML的转换。考虑到本次设计仅是对运用GML技术解决空间数据集成进行的一次尝试,所以仅选择了两种较为流行的GIS数据格式作为拟转换的格式,分别是ESRI Shapefile格式和MapInfo数据交换格式Mif/Mid,初步达到了利用GML这一标准地

14、理标记语言实现GIS数据共享的目的,并提出了自己对运用地理信息数据和服务标准实现地理信息共享这一问题的思路,在地理信息共享与互操作方面做了一些探索。2 GML技术分析要将源数据转换成GML必须要熟悉GML的相关规范,掌握其对空间数据模型的描述,而GML是基于XML的标识语言,是XML在地理空间信息领域的重要应用,因而要了解GML必须首先了解XML。本次设计对XML和GML的规范进行了研究,现简要介绍如下。2.1 XML简介XML是可扩展标志语言(eXtensible Markup Language)的简称。同HTML(Hypertext Markup Language,超文本标记语言)一样,X

15、ML是从SGML(Standard Generalized Markup Language,标准通用标记语言)那里派生出来的。它是由W3C(World Wide Web Consortium,万维网联盟)创建的,并于1998年发布了XML1.0规范12。相对于HTML,XML是可扩展的,实现了数据存储与数据显示分离,具有更大的灵活性,并且已成为一种国际标准,得到了众多企业的支持,在许多行业得到了广泛的应用。XML的核心包括其基本的语法、XML命名空间以及XML模式。XML文档中任何东西不是标记就是字符数据。标记包括标签,标签总是括在尖括号()中的,且标记区分大小写。XML命名空间(namesp

16、aces)提供了一种复合命名语法,它扩展了XML1.0对名字的定义,以保证为共享的词汇表产生唯一的名字。早期的XML是利用DTD(Document Type Definition,文档类型定义)来规范和验证XML文档的,XML Schema(XML模式)是第二种用于为XML文档定义数据模型的技术,与DTD相比它具有更多的功能和灵活性。2.2 GML简介GML是由OGC制定的基于XML的地理信息编码规范,主要用于地理信息的传输和存储。2000年正式推出了GML1.0版本,2001年2月推出了GML2.0,2003年2月推出了GML3.0,目前GML的最新版本为2004年4月发布的GML3.1.1

17、。GML1.0是基于XML DTD的, GML从2.0开始完全基于XMLSchema13。与其它数据格式相比,GML具有以下优点:(1)GML是一个开放的框架结构,可以对其进行扩展和继承来完成数据编码;(2)GML具有自描述性,可描述性很强,这有益于保持数据的完整性;(3)GML是由国际组织OGC提出的开放标准,现已被很多大公司支持,易于被各种GIS接受;(4)GML可以描述不同的GIS数据,其结构简单,易于操作(5)GML采用开放的基于文本格式,可用Web的最基本的Http协议传送,这样易于数据的远程动态集成;(6)GML可以与非空间数据集成,二进制数据与其它数据的集成是非常困难的,对于二进

18、制数据结构,必须了解其文件结构和数据库设计才能对其进行修改,而GML语言的改变是十分容易的,所以数据组织也相当容易。2.3 GML框架GML2提供了三个基于XML的基本的Schema,即要素(Feature)Schema-Feature.xsd,几何(Geometry)Schema-Geometry.xsd和链接(XLinks)Schema-Xlink.xsd。此三类Schema的关系,见“图2-1” 14。图2-1 GML定义的Schema之间的关系在GML中,每个Feature和Geometry都对应一个相应的类型(Type)。该类型等同于对象建模中的类(Class),Feature和Ge

19、ometry的状态由类型和类型中的属性决定。GML中的Schema对这些类型和属性等元素进行了定义14。(1)Geometry Schema。描述了详细的几何模型,包括抽象几何对象、坐标(Coordinate)、边界框(Box)、Point、LineString、LinearRing、Polygon、 MultiPoint、MultiLineString、MultiPolygon、MultiGeometry等几何元素的定义,并通过元素引入Xlink.xsd的定义。(2)Feature Schema。描述了全面的要素模型,与Geometry Schema一样,Feature Schema定义了抽

20、象和具体元素和类型,并通过元素引入了几何Schema中的定义和声明。Feature包括一系列的属性和相应的几何信息,一般来说,属性有名字、类型。GML的Feature.xsd描述了地理要素的编码,可以象一般XML语言定义一些不包含几何信息的普通元素,这些元素可以嵌套或者参照,还可以定义相应的属性信息。这些属性信息加上几何信息,就可以定义具体的地理实体,即地理对象。GML定义了抽象的元素类型,同时也定义了一些具体的类型,并且用户可以扩充模型的定义,以满足特定的需要。(3)Xlink Schema。定义xlink属性,用于实现链接功能。GML提供了一种以万维网可关联Xlinking语言为基础的普通

21、机制来表达GML对象间的关联。简单关联模式是xlink:type=”simple”和xlink:href所隶属的属性的应用。xlinks.xsd模式文档的内容在http:/www.w3.org/1999/xlink命名空间中描述,通常使用前缀xlink。所有其它模式文档的内容在2.4 GML对空间数据模型的描述GML3可以描述各种复杂的几何实体、空间参考系统、拓扑关系、元数据、栅格数据、时态数据等。但最新的GML基本模式已经被模块化,因此,应用模式不需要完全的GML定义,可以仅仅引入需要的GML子集。对于坐标参考系统,拓扑,覆盖,支柱要素,缺省样式,以及观测,不需要导入或解析GML版本定义。但

22、是,需要引入或解析GML3中添加的新的基本类型。由于本次设计所涉及的都是简单实体对象,因此在这里仅介绍GML对一些简单的几何实体的描述。GML对简单要素的几何模型描述见“图2-2” 13。图2-2 GML对简单要素的几何模型下面简要的介绍一下GML对一些主要的空间要素的描述方法13。2.4.1 GML对坐标和点(Point)的编码几何图形的坐标可以用一系列的元素组或元素的单一字符串来编码,元素中数据的组数由数据类型决定,其Geometry schema如下:点(Point)只含有一组坐标组,其基于坐标编码的示例如下:Point srsName=5.040.0其中srsName=而与作用一样,但

23、更具有弹性,将所有坐标值储存在一个字符串内,缺省的坐标值间隔符是“,”,坐标组的间隔符号是Unicode的空白,用户也可以根据需要改变上述间隔符。上面所述的例子用编码如下:Point srsName=5.0,40.02.4.2 GML对直线串(LineString)的编码这里的直线串是由两组以上的点坐标所构成的,编码方式示例如下:LineString srsName=0.00.020.035.0100.0100.02.4.3 GML对线环(LinearRing)和多边形(Polygon)的编码线环是封闭的直线串,其第一个坐标值与最后一个坐标值一样,它是被用来建构多边形的。其用法示例见下面的多边

24、形编码介绍。多边形的边界是由线环(LinearRing)组成的,且区分外边界(Outer boundary)和内边界(inner boundary),内边界可以有多个但彼此不能交叉及包含,边界点的顺序是顺时针或逆时针不重要。其用法示例如下,该多边形有两个内部边界: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所预先定义的几何图形集合(geometry collection),可分为同质几何图形集合(homogeneous geometry collection)及异质几何图形集合(heterogeneous geometry collection)两种。同质几何图形集合指同类型几何元素的集合,包括MultiPoint、MultiLineString、MultiPolygon等三种。异质几何图形集合指不同类型几何元素的集合,GML Geometry Schema中的MultiGeometry元素即为异质几何图形集合,

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 应用程序模式(Application Schema)的应用GML为各应用程序的模式提供了基本的类型和结构,但这些类型和结构往往不

27、能完全满足各应用程序的需要,这些应用程序可以在那些GML定义的基本类型和结构的基础上扩展得到应用程序所需要的类型和结构。2.5.1定义新的要素类型应用程序创建的新的要素类型和结构必须基于gml:AbstractFeatureType 或者gml:AbstractFeatureCollectionType13。其模式(Schema)定义如下:2.5.2定义新的几何类型应用程序创建的新的几何类型和结构必须基于AbstractGeometryType 或者GeometryCollectionType。其模式定义如下:2.5.3声明目标名称空间用户必须为他们自己的应用声明一个目标命名空间,这一命名空间

28、按习惯是一个由应用模式设计者组织控制的URI(Uniform Resource Identifier,统一资源标示符),以确保其内定义的同名成员变量之间不会互相冲突和影响。目标命名空间在应用模式中用引自XML模式的模式元素属性targetNamespace 声明。用来标识命名空间的网络地址并不被XML解析器调用,XML解析器不需要从这个网络地址中查找信息,该网络地址的作用仅仅是给命名空间一个唯一的名字,因此这个网络地址也可以是虚拟的,如在本次设计中,将用targetNamespace = 一个应用模式可以由多个具有相同目标命名空间的模式文档组成,但在模块化的应用模式中,最顶层的模式文档应该直接

29、或间接地包含其它的模式文档。2.5.4引入GML Schema每个应用程序在创建自己的模式(Schema)时,需要引入(import)相关使用到的GML标准Schema及其名称空间,如一般都需要引入定义了GML标准要素的feature.xsd,方法如下:Import schemaLocation= feature.xsd namespace= 同时,在GML文件中,一般要声明本GML所遵循的Schema文件,如在本设计中将在GML文件中声明如下:“xs:schemaLocation = *.xsd。3 多源数据向GML转换的实现3.1多源数据转换GML总体流程为了达到数据转换的目的,在此对转换

30、的技术路线进行了设计,要生成GML数据,首先要生成该GML文件的模式(Schema)文件.xsd,该xsd文件定义了GML文件中的ComplexType要素和各个子要素及其遵循的格式等。整个流程见“图3-1”所示。图3-1 转换GML总体技术流程即首先分别读取shapefile和Mif/Mid文件中的属性数据和空间数据,然后根据所读取文件的字段信息生成GML Schema文件,再根据此Schema文件,写同时含有属性和空间数据的GML文件,最后还需要对生成的GML进行验证。3.2 读取Shapefile的实现根据Shapefile的数据格式,可以设计出读取Shapefile数据的流程见“图3-

31、2”(以读取包含polygon类型的数据为例)。图3-2 读取shapefile技术流程打开所选择的.shp文件后,分别通过后缀名获取其索引文件.shx和属性数据文件.dbf(如果都存在),判断其是否有属性数据文件,如果有则先读属性数据表dbf文件,按照dbf文件的格式依次读取dbf文件头信息、字段头信息和每条记录的信息。然后再分别读取主文件和索引文件的文件头信息,再读取每条记录的信息,判断其空间数据的类型(点、线、面等),分别读取相应的每条空间数据记录存入到定义的数据结构集合中。如果没有属性数据文件,则直接从读取主文件和索引文件的文件头信息开始。3.3 读取MapInfo交换格式的实现Mif

32、/Mid文件均为文本文件,结构比Shapefile文件要简单,其读取的方法和读其他文件一样也是按照它的文件结构读取,即首先根据Mif数据格式建立存储Mif文件头信息的结构体FeatureHeader,分别构造读取Mif和Mid的文件流对象fReader和mReader,然后开始读取Mif文件头,获取字段信息,再读取Mif文件数据部分,循环读取每条空间记录和属性记录信息,将空间信息存放至类GeometryField的对象中,属性信息存放至类MapData对象中,其读取的流程图见“图3-3”。图3-3 读取Mif/Mid文件流程图3.4 生成GML Schema 3.4.1 生成GML Schem

33、a的技术流程本次设计生成GML Schema的总体技术流程图见“图3-4”。 图3-4 生成GML Schema流程首先构造.Net中XmlSchema类的对象,给此对象添加名称空间和版本信息,再将GML规范的标准Schema(如feature.xsd等) 引入(import)此对象中,然后为导入的每个源文件创建SchemaType,最后创建文件流写GML Schema文件。生成GML Schema需要应用 Microsoft .Net System.Xml.Schema命名空间及其中包含的和XML模式相关的类,这些类包括XmlSchema、XmlSchemaAll、XmlSchemaXPat

34、h以及XmlSchemaType等类。3.4.2 GML Schema对象的构造Microsoft .Net System.Xml.Schema命名空间中的类XmlSchema相当于包含schema各个部分的一个容器,可以通过它的Read()方法来读现有的schemas;当从头创建一个schema时,也可以用它来包含给它添加的各个定义(元素、特性、complexTypes等等)。本质上,XmlSchema代表了schema的root tag并有几个属性,可以用这些属性来给schema标签添加属性,如Version、TargetNamespace、ElementFormDefault和Attri

35、buteFormDefault等18。本次设计GML Schema对象的构造部分实现如下:/构造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包含标准几何要素类型定义的Schema feature.xsdSystem.Xml.Schema.XmlSchemaImport ximport = new XmlSchemaImport();ximport.Namespace = getNS(gml);ximport.SchemaLocation = feature.xsd;xs.Includes.Add(ximport);然后构造GML

37、Schema中的基数据类型和子数据类型名称,XmlQualifiedName类表示 XML 限定名,如下:XmlQualifiedName thebase = new XmlQualifiedName(AbstractFeatureType, getNS(gml);XmlQualifiedName thesub = new XmlQualifiedName(_Feature, getNS(gml);3.4.3创建SchemaType创建SchemaType即循环对每个读取的数据文件由数据的属性字段创建GML Schema的复杂数据类型ComplexType和各子数据元素类型,对这些元素添加属性

38、信息,并将各子元素按照一定的顺序添加到复杂数据类型中。这一实现过程涉及到.Net中的类System.Xml.Schema.XmlSchemaComplexType、类System.Xml.Schema. XmlSchemaElement和System.Xml.Schema. XmlSchemaComplexContentExtension等类15。其中类XmlSchemaComplexType定义了一个复杂类型,它确定了属性集和元素的内容,表示“万维网联合会”(W3C) complexType 元素。XmlSchemaComplexType对象的内容由读取的属性数据字段获得,在本程序中,将一个

39、源文件的GML Schema的复杂类型名定为源文件的文件名加上“_Type”。XmlSchemaElement类是用来表示一个schema中的元素,它包含MinOccurs、MaxOccurs、IsNullable和SchemaTypeName等属性,可以用来在schema元素标签上建立并设置特性。并通过XmlSchema.Items.Add()实现向XmlSchema要素对象集合添加XmlSchema要素对象。XmlSchemaComplexContentExtension类是通过扩展而派生的具有复杂内容模型的复杂类型的类,通过添加属性或元素扩展复杂类型,表示复杂内容的W3C extensi

40、on 元素。创建Schema Type函数如下: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);/构造元素XmlSchemaElement对象XmlSchemaElement xsge = new XmlSchemaElement();xsge.Name = this.Name; xsge.SchemaTypeName = new XmlQualifiedName(xsct.N

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号