GML-简介

介绍

地理标记语言(GML)是一种用可扩展标记语言(XML)编写地理信息的方式,以方便地理信息的传输和存储。可以将其视为描述应用程序架构的XML语法,应用程序架构描述特定领域或给定上下文中的概念结构。

GML用来模拟地理现象的一些关键概念包括:

  • 特征:现实世界现象的抽象;如果它与相对于地球的某个位置相关联,它就是一个地理特征。

  • 属性:功能的状态由一组属性定义,其中每个属性可以被认为是一个{name,type,value}三元组。

  • 要素集合:本身可以视为要素的要素集合

术语特征可用于指代特征的类型或特征的实例。要素类型的示例是“River”,而要素实例的示例是“Hudson River”。为清楚起见,本课程的这一部分将尽可能使用“类型”或“实例”来限定术语。

使用GML的好处之一是可以在以XML模式定义(XML Schema Definition,XSD)编写的应用程序模式中描述特征类型,该应用程序模式允许软件验证文档是否符合应用程序模式。这降低了不同软件产品交换地理空间数据时信息丢失的风险。描述GML应用程序模式的XSD文档重用了官方OGCGML模式中的几何和其他标准化概念(请参见http://schemas.opengis.net).

背景

历史

GML 1.0于2000年5月被批准为OGC标准。GML 2.0于2001年2月被批准为OGC标准。GML 3.0于2002年12月被批准为OGC标准。GML 3.1.1于2004年2月被批准为OGC标准。GML 3.2.1于2007年8月被批准为OGC标准。GML 3.2.2于2016年12月被批准为OGC标准。

版本

GML 3.3构建在GML 3.2的基础上,并通过附加的模式组件和要求对其进行了扩展。

测试套件

测试套件存在于 OGC repository.

启动位置

实现可以在OGC数据库中找到。 here

使用

除其他用途外,GML用于交换或存储:

  • 矢量要素数据

  • 覆盖范围数据

  • 拓扑复形

  • 坐标参考系

  • 时间参考系

  • 词典

例子

与任何其他XML文档一样,GML文档由使用标记指定的XML元素的分层排列组成。XML中的标记可以由“<”和“>”字符标识。如果标记仅由‘<’和‘>’字符之间的名称组成,则该标记被视为开始标记。如果标记以字符“</”开头,则将其视为结束标记。以‘/>’字符作为后缀的标记被认为是自动结束标记;这样的标记不需要结束标记来定义元素。

以下是同时具有开始标记和结束标记的示例元素:<name>New York</name>

在上面的示例中,开始标记为<name>,结束标记为</name>

以下是自动关闭标记的示例<name value=“New York”/>

GML允许将元素嵌套在其他元素中。也就是说,GML允许将元素包含在其他元素中。将对象放置在其他对象内部的做法称为嵌套。例如,在下面的清单中,<gml:feature ureMember>元素嵌套了<Tiger:POI>元素,而后者又嵌套了<Tiger:the_geom>元素。还要注意,<Tiger:POI>元素嵌套了<Tiger:Name>元素。

 1 <gml:featureMember xmlns:gml="http://www.opengis.net/gml" xmlns:tiger="http://www.census.gov">
 2 <tiger:poi gml:id="poi.1">
 3 <tiger:the_geom>
 4 <gml:Point srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2">
 5 <gml:pos>40.689167 -74.044444</gml:pos>
 6 </gml:Point>
 7 </tiger:the_geom>
 8 <tiger:NAME>Statue of Liberty</tiger:NAME>
 9 </tiger:poi>
10 </gml:featureMember>

在上面的示例中,文本xmlns:gml=“http://www.opengis.net/gml”是一个声明,声明元素及其嵌套元素中的名称空间‘http://www.opengis.net/gml’‘应该用前缀’gml‘表示。这使得使用‘gml’前缀限定标记成为可能。命名空间使应用程序可以区分名称相同但类型不同的元素。例如,假设有两个名为“poi”的元素,一个指的是感兴趣的人,另一个指的是感兴趣的地方。读取上面清单的应用程序将确定上面所示的‘POI’元素来自命名空间的http://www.census.gov‘,因此它描述了感兴趣的地方。

在上面的示例中,Tiger:the_geom元素表示一个特性的属性。该属性由由gml:point元素表示的GML Point几何图形组成。请注意,此gml:point元素的星型标记包括srsName属性。srsName属性的值引用应用于GML点坐标的坐标参考系(CRS)。在这种情况下,代码“urn:ogc:def:crs:epsg::4326”引用注册在epsg数据库中的1984年世界大地测量系统(WGS84)基准面(参见http://www.epsg-registry.org/export.htm?gml=urn:ogc:def:crs:EPSG::4326).srsDimension指定由CRS表示的尺寸数量和GML点中的位置。

GML Point的位置或坐标由gml:pos元素表示。请注意,本例中只有两个数字,这是因为本例在srsDimension属性中声明它使用二维坐标。如果该示例包括三维(3D)坐标,那么srsDimension属性的值应该是3,并且gml:pos元素中应该有三个数字。三维坐标的典型用例是将坐标表示为纬度、经度和高程。

在上面的示例中,只显示了一个非几何属性,即Tiger:Name元素。要素类型中可以包含任意数量的特性,前提是它们是在XML文档使用的应用程序模式中定义的。

现在,让我们考虑一种情况,其中我们希望表示一个线性要素,例如道路。下面的列表显示了一个线性要素的示例。

 1 <ogr:featureMember xmlns:ogr="http://ogr.maptools.org/" xmlns:gml="http://www.opengis.net/gml">
 2 <ogr:roads gml:id="roads.1">
 3 <ogr:geometryProperty>
 4 <gml:LineString srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2"><gml:posList>54.9906466 -2.5773558 54.9908714 -2.5767192 54.9909405 -2.5764712 54.9909618 -2.5764044 54.9909743 -2.5761903 54.9909482 -2.5760361 54.990899 -2.575843 54.9908284 -2.5757244 54.9905421 -2.5754333</gml:posList></gml:LineString>
 5 </ogr:geometryProperty>
 6 <ogr:osm_id>146830031</ogr:osm_id>
 7 <ogr:highway>residential</ogr:highway>
 8 <ogr:name>Hadrian's Crescent</ogr:name>
 9 </ogr:roads>
10 </ogr:featureMember>

请注意,在上面的示例中,空间特性称为ogr:geometryProperty,并且该特性由gml:LineString几何图形组成。与上例中一样,CRS为“urn:ogc:def:crs:epsg::4326”,沿线串的位置以二维坐标表示。上面的示例具有三个非几何图形属性,即ogr:osm_id、ogr:Highway和ogr:name。gml:posList元素将线条顶点的坐标表示为空格分隔的数字数组。

在希望表示面要素(如足球场)的情况下,我们使用名为gml:Polygon的几何图形属性。这种类型的几何体属性嵌套了gml:External元素,而后者又嵌套了gml:LinearRing几何体。请注意,在下面的示例中,gml:posList元素中的第一个坐标等同于同一个gml:posList中的最后一个坐标。还要注意,gml:posList元素将坐标表示为空格分隔的数字数组。

 1<ogr:featureMember xmlns:ogr="http://ogr.maptools.org/" xmlns:gml="http://www.opengis.net/gml">
 2<ogr:landcover gml:id="landcover.1">
 3<ogr:geometryProperty><gml:Polygon srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2"><gml:exterior><gml:LinearRing><gml:posList>51.556272 -0.2803943 51.5562758 -0.2787397 51.5556539 -0.278736 51.5556501 -0.2803906 51.556272 -0.2803943</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogr:geometryProperty>
 4<ogr:osm_id>116539074</ogr:osm_id>
 5<ogr:layer>4</ogr:layer>
 6<ogr:sport>soccer</ogr:sport>
 7<ogr:leisure>pitch</ogr:leisure>
 8<ogr:surface>grass</ogr:surface>
 9<ogr:lit>yes</ogr:lit>
10<ogr:name>Wembley Stadium Soccer Field</ogr:name>
11</ogr:landcover>
12</ogr:featureMember>

请注意,此功能中的任何空心区域都可以使用gml:External元素中的gml:Internal元素表示。在这种情况下,它是一个足球场,所以它没有任何空心区域!