Microsoft SQL Server/地理空间数据/GML
地理标记语言(GML)是由开放地理空间联盟(OGC)定义的 XML 语法,用于表达地理要素。GML 既充当地理系统的建模语言,也充当互联网上地理事务的开放交换格式。请注意,GML 中的要素概念是一个非常通用的概念,不仅包括传统的“矢量”或离散对象,还包括覆盖范围(另请参见 GMLJP2)和传感器数据。集成所有形式的地理信息的能力是 GML 实用性的关键。
OGC 是一个国际自愿性共识标准组织,其成员维护着地理标记语言标准。OGC 与 ISO TC 211 标准组织协调,以保持 OGC 和 ISO 标准工作之间的一致性。GML 正在被采纳为 ISO 标准(ISO 19136),预计将于 2007 年发布为国际标准。
GML 是 GeoWeb 基础设施的 XML 数据标准,使联网设备能够访问地理信息,例如商家位置和交通状况。
GML 也可以包含在美国国家信息交换模型 1.0 版中。
最初的 GML 模型基于万维网联盟的资源描述框架 (RDF)。随后,OGC 将 XML 模式引入 GML 的结构,以帮助连接各种现有的地理数据库,这些数据库的关系结构更容易由 XML 模式定义。由此产生的基于 XML 模式的 GML 保留了 RDF 的许多特性,包括将子元素作为父对象属性(RDFS)的想法以及使用远程属性引用。
GML 包含一套丰富的基元,用于构建特定于应用程序的模式或应用程序语言。这些基元包括
- 要素
- 几何
- 坐标参考系统
- 时间
- 动态要素
- 覆盖范围(包括地理图像)
- 计量单位
- 地图表示样式规则
GML 概要是对 GML 的逻辑限制,可以通过文档、XML 模式或两者来表达。这些概要旨在简化 GML 的采用,促进标准的快速采用。以下由 GML 规范定义的概要已发布或提议供公众使用
- 用于具有点几何数据但不需要完整 GML 语法的应用程序的点概要
- 支持矢量要素请求和事务的GML 简单要素概要,例如使用 WFS
- 用于 GMJP2(JPEG 2000 中的 GML)的 GML 概要
- 用于 RSS 的 GML 概要
请注意,概要与应用程序模式不同。概要是 GML 命名空间的一部分,并定义了 GML 的受限子集。应用程序模式是使用 GML 定义的 XML 词汇表,并且位于应用程序定义的目标命名空间中。应用程序模式可以构建在特定的 GML 概要上,或者使用完整的 GML 模式集。
概要通常是为了支持 GML 派生语言(请参阅应用程序模式)而创建的,这些语言是为了支持特定应用领域(例如商业航空、航海测绘或资源开发)而创建的。
GML 规范(自 GML v3. 起)包含一对 XSLT 脚本(通常称为“子集工具”),可用于构建 GML 概要。
GML 简单要素概要比上述点概要更完整,支持各种矢量要素对象,包括以下内容
- 简化的几何模型,允许 0d、1d 和 2d 线性几何对象(均基于线性插值)以及相应的聚合几何(gml:MultiPoint、gml:MultiCurve 等)。
- 简化的要素模型,只能有一层深度(在一般的 GML 模型中,不允许任意嵌套要素和要素属性)。
- 所有非几何属性必须是 XML 模式简单类型,即不能包含嵌套元素。
- 远程属性值引用(xlink:href),就像在主 GML 规范中一样。
由于该概要旨在提供一个简单的切入点,因此它不支持以下内容
- 覆盖范围
- 拓扑
- 观测
- 值对象(用于实时传感器数据)
- 也不支持动态要素。
尽管如此,它仍然支持各种各样的现实世界问题。
此外,GML 规范提供了一个子集工具,用于生成包含用户指定组件列表的 GML 概要。该工具包含一对 XSLT 脚本。这些脚本生成一个概要,开发人员可以手动扩展或通过模式限制对其进行增强。请注意,作为完整 GML 规范的限制,概要可以生成的应用程序模式本身必须是有效的 GML 应用程序模式。
子集工具还可以出于许多其他原因生成概要。列出要包含在生成的概要模式中的元素和属性,并运行该工具,结果将生成一个单个概要模式文件,其中仅包含用户指定的项目以及指定项目所依赖的所有元素、属性和类型声明。以这种方式创建的一些概要模式支持其他规范,包括 IHO S-57 和 JPEG 2000 中的 GML。
为了使用 GML 公开应用程序的地理数据,社区或组织会创建一个特定于感兴趣的应用程序领域的 XML 模式(应用程序模式)。此模式描述了社区感兴趣的数据对象类型以及社区应用程序必须公开的类型。例如,旅游应用程序可以在其应用程序模式中定义对象类型,包括纪念碑、名胜古迹、博物馆、道路出口和观景点。这些对象类型依次引用 GML 标准中定义的基元对象类型。
正在汇编一份已知的公开可用的 GML 应用程序模式列表。
其他一些地理标记语言使用模式结构,但 GML 基于现有的 XML 模式模型,而不是创建新的模式语言。
请注意,Google 推广的 KML(Keyhole 标记语言)与 GML 相互补充。GML 是一种用于编码地理内容的语言,通过描述各种应用程序对象及其属性(例如桥梁、道路、浮标、车辆等),而 KML 是一种用于可视化地理信息的语言。KML 可用于承载 GML 内容,并且可以将 GML“样式化”为 KML 以用于演示。
GML 将地理对象的GML 几何图形或几何特征编码为 GML 文档中的元素。这些对象的几何图形可以描述例如道路、河流和桥梁。
GML 1.0 和 GML 2.0 中的关键 GML 几何对象类型如下:
- 点
- 线串
- 多边形
请注意,此几何模型与 KML 中的几何模型相同。
GML 将要素与几何对象区分开来。要素是一个表示物理实体的应用程序对象,例如建筑物、河流或人员。要素可能有也可能没有几何方面。几何对象定义位置或区域而不是物理实体,因此与要素不同。GML 中要素和几何对象之间的区别与其他地理信息系统 (GIS) 中使用的模型形成对比,这些模型没有做出这种区分。也就是说,尽管某些其他 GIS 将要素和几何对象可互换地定义为地图上的项目,但 GML 将它们作为单独的实体类型进行维护。
在 GML 中,要素可以具有各种几何属性,这些属性描述要素的几何方面或特征(例如要素的点或范围属性)。GML 还提供了通过在共享几何属性上使用远程属性引用来使要素相互共享几何属性的功能。远程属性是 GML 从 RDF 借鉴的一般功能。GML 几何属性上的xlink:href属性表示该属性的值是链接中引用的资源。
例如,特定 GML 应用程序模式中的建筑物要素可能具有由基本 GML 几何对象类型点给出的位置。但是,建筑物与定义其位置的点是独立的实体。此外,要素可以有多个几何属性(或根本没有),例如范围和位置。
GML 中的坐标表示几何对象的坐标。坐标可以通过以下任何 GML 元素指定:
- <gml:coordinates>
- <gml:pos>
- <gml:posList>
GML 有多种表示坐标的方式。例如,可以使用<gml:coordinates>元素,如下所示:
<gml:Point gml:id="p21" srsName="urn:ogc:def:crs:EPSG:6.6:4326"> <gml:coordinates>45.67, 88.56</gml:coordinates> </gml:Point>
请注意,当以上述方式表达时,各个坐标(例如88.56)无法通过 XML 文档对象模型单独访问,因为<gml:coordinates>元素的内容只是一个字符串。
为了使 GML 坐标能够通过 XML DOM 访问,GML 3.0 引入了<gml:pos>和<gml:posList>元素。(请注意,尽管 GML 版本 1 和 2 具有<gml:coord>元素,但它被视为缺陷,未使用。)使用<gml:pos>元素代替<gml:coordinates>元素,同一个点可以表示如下:
<gml:Point gml:id="p21" srsName="urn:ogc:def:crs:EPSG:6.6:4326"> <gml:pos dimension="2">45.67 88.56</gml:pos> </gml:Point>
<gml:LineString>几何对象的坐标可以用<gml:coordinates>元素表示:
<gml:LineString gml:id="p21" srsName="urn:ogc:def:crs:EPSG:6.6:4326"> <gml:coordinates>45.67, 88.56 55.56,89.44</gml:coordinates> </gml:LineString >
<gml:posList>元素用于表示坐标元组列表,如线性几何图形所需的那样:
<gml:LineString gml:id="p21" srsName="urn:ogc:def:crs:EPSG:6.6:4326"> <gml:posList dimension="2">45.67 88.56 55.56 89.44</gml:posList> </gml:LineString >
对于仅支持 GML 1 或 GML 2(即仅支持<gml:coordinates>元素)的 GML 数据服务器 (WFS) 和转换工具,<gml:coordinates>没有替代方案。但是,对于 GML 3 及更高版本的文档,<gml:pos>和<gml:posList>优于<gml:coordinates>。
有关srsName属性的更多信息,请参见下面的坐标参考系统。
坐标参考系统 (CRS) 确定 GML 文档中每个几何元素的几何图形。
与 KML 或 GeoRSS 不同,GML 在未提供坐标系时不会默认使用任何坐标系。相反,必须使用坐标参考系统 (CRS) 或空间参考系统 (SRS) 明确指定所需的坐标系。其坐标相对于此类 CRS 解释的元素包括:
- <gml:coordinates>
- <gml:pos>
- <gml:posList>
附加到几何对象的srsName属性指定对象的 CRS,如以下示例所示:
<gml:Point gml:id="p1" srsName="#srs36"> <gml:coordinates>100,200</gml:coordinates> </gml:Point>
srsName属性的值是统一资源标识符 (URI)。它指的是用于解释几何图形中坐标的坐标参考系统的定义。CRS 定义可能位于文档(即平面文件)或在线 Web 服务中。
srsName URI 也可以是统一资源名称 (URN),用于引用常见的 CRS 定义。OGC 开发了一种 URN 结构和一组特定的 URN,用于编码一些常见的坐标参考系统。URN 解析器将这些 URN 解析为 GML CRS 定义。
多边形、点和线串对象在 GML 1.0 和 2.0 中编码如下:
<gml:Polygon> <gml:outerBoundaryIs> <gml:LinearRing> <gml:coordinates>0,0 100,0 100,100 0,100 0,0</gml:coordinates> </gml:LinearRing> </gml:outerBoundaryIs> </gml:Polygon> <gml:Point> <gml:coordinates>100,200</gml:coordinates> </gml:Point> <gml:LineString> <gml:coordinates>100,200 150,300</gml:coordinates> </gml:LineString>
请注意,线串对象以及线性环对象假定指定点之间进行线性插值。
以下 GML 示例说明了要素和几何对象之间的区别。建筑物要素具有多个几何对象,其中一个(标识符为p21的点)与测量纪念碑要素共享。
<abc:Building gml:id="SearsTower"> <gml:name>Sears Tower</gml:name> <abc:height>52</abc:height> <abc:position> <gml:Point> <gml:coordinates>100,200</gml:coordinates> </gml:Point> </abc:position> <app:extent> <gml:Polygon> <gml:exterior> <gml:LinearRing> <gml:coordinates>100,200</gml:coordinates> </gml:LinearRing> </gml:exterior> </gml:Polygon> </app:extent> </abc:Building> <abc:Building gml:id="SearsTower"> <abc:position xlink:type="Simple" xlink:href="#p21"/> </abc:Building> <abc:SurveyMonument gml:id="g234"> <abc:position> <gml:Point gml:id="p21"> <gml:coordinates>100,200</gml:coordinates> </gml:Point> </abc:position> </abc:SurveyMonument>
请注意,引用的是共享的点,而不是测量纪念碑,因为任何要素对象都可以有多个几何对象属性。
GML 点剖面包含单个 GML 几何图形,即<gml:Point>对象类型。任何 XML 模式都可以通过导入它并引用主题<gml:Point>实例来使用点剖面。
<PhotoCollection xmlns="http://www.myphotos.org" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.myphotos.org MyGoodPhotos.xsd"> <items> <Item> <name>Lynn Valley</name> <description>A shot of the falls from the suspension bridge</description> <where>North Vancouver</where> <position> <gml:Point srsDimension="2" srsName="urn:ogc:def:crs:EPSG:6.6:4326"> <gml:pos>49.40 -123.26</gml:pos> </gml:Point> </position> </Item> </items> </PhotoCollection>
请注意,在使用点剖面时,唯一的几何对象是“<gml:Point>”对象。其余地理位置由照片集合模式定义。