地理空间数据格式——OGC简单要素标准(WKT/WKB)

来源:互联网 发布:传智播客java基础视频 编辑:程序博客网 时间:2024/06/05 09:02

SFS-简单要素标准

1. 概述

   SFS(OpenGIS® Simple Features Interface Standard)的当前版本是1.2.0。事实上SFS中包括两部分内容,第一部分是描述简单要素的通用模型(Part 1: Common architecture )、另一部分是描述前一部分模型在SQL中的实现(Part 2: SQL option )[1] 。我们平时所熟知的WKT、WKB等就在第一部分中叙述,而在空间SQL语句中常见的AsText、Intersects操作等则在第二部分中有定义。

       下面就SFS中比较重要的内容进行详细的说明,包括第一部分中的几何对象模型、WKT描述的几何对象、WKB描述的几何对象、WKT描述的空间参考和第二部分中的SQL预定义schema、SQL几何类型、SQL空间操作。

2. 几何对象模型 


图1. SFS中定义的几何对象模型

        图 1显示的是SFS中几何对象的关系结构,简单要素中的几何对象主要就是定义了点、线、面和多点、多线、多面。另外,几何对象还涉及一系列的操作,如图 2所示。 


图2 Geometry的操作

3. WKT描述的几何对象

         WKT(Well-known Text)可以通过文本来描述几何对象。下面的例子可以比较快速、直观地说明什么是WKT: 

几何类型

WKT 例子

说明

Point

Point (10 10)

LineString

LineString ( 10 10, 20 20, 30 40)

有3个节点的线

Polygon

Polygon ((10 10, 10 20, 20 20, 20 15, 10 10))

只有1个外环的多边形

MultiPoint

MultiPoint((10 10),(20 20))

多点

MultiLineString

MultiLineString((10 10, 20 20),(15 15, 30 15))

多线

MultiPolygon

MultiPolygon(((10 10, 10 20, 20 20, 20 15, 10 10)),((60 60, 70 70, 80 60, 60 60 )))

多面

GeometryCollection

GeometryCollection
(POINT (10 10),POINT (30 30),LINESTRING (15 15, 20 20))

几何集合

PolyhedralSurface

PolyhedralSurface Z(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
((0 0 1, 1 0 1, 1 1 1, 0 1 1. 0 0 1))

)

多个表面构成的立方体

Tin

Tin Z(
((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
((1 0 0, 0 1 0, 0 0 1, 1 0 0)),

)

4个三角形构成的TIN网格

Point

Point Z (10 10 5)

三维点

Point

Point ZM (10 10 5 40)

带M值的三维点

Point

Point M (10 10 40)

带M值的二维点

表 2 WKT描述几何对象示例 

4. WKB描述的几何对象

       WKB(Well-known Binary)通过序列化的字节对象来描述几何对象。在WKB中主要涉及两种数值类型:一种是uint32,占4个字节,用以存储节点数、几何对象类型等信息;另一种是double,占8个字节,用以存储节点坐标值。其中的几何对象类型对应的整数可以参考下表:


图 3 WKB中几何类型对应的整数值

       除此之外,WKB在第一位还存储了一个额外的字节用来标识字节序[1] (0=Big-Indian,1=Little-Indian)。因此,对于一个点(不带M值的二维点)来说,它的WKB描述应该类似下面的结构,总共占据21个字节:


图 4 WKB描述点的字节结构

      对于有2个节点的线来说,WKB描述应该包含41个字节:


图 5 WKB描述线的字节结构

     对于仅有1个外环,由3个节点构成的多边形来说,WKB描述则应该包含77个字节:


图 6 WKB描述多边形的字节结构 

5. WKT描述的空间参考

       WKT除了可以描述几何对象,也可以描述空间参考。通过2个例子可以很直观地看到如何通过文本来描述空间参考。

对于一个地理坐标系,比如最常见的WGS84坐标系统,WKT描述是这样的:

GEOGCS

[

"GCS_WGS_1984",

DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],

PRIMEM["Greenwich",0.0],

UNIT["Degree",0.0174532925199433],

AUTHORITY["EPSG",4326]

]

      “GEOGCS”表明其后紧随的“[ ]”中描述的是一个地理坐标系统。该坐标系统名称为“GCS_WGS_1984”;采用的大地基准面为“D_WGS_1984”,该基准面近似椭球体的长轴为6378137.0米、扁率为298.257223563;以格林威治0度经线为起始经线;地图单位为度,该单位的转换因子[2] 为0. 0174532925199433(π/180);最后,该坐标系统在EPSG[3] 中的编码为“4326”。

对于一个投影坐标系,比如WGS84 Web Mercator(Auxiliary Sphere)坐标系统,WKT描述是这样的:

PROJCS

[

"WGS_1984_Web_Mercator_Auxiliary_Sphere",

GEOGCS

[

"GCS_WGS_1984",

DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],

PRIMEM["Greenwich",0.0],

UNIT["Degree",0.0174532925199433]

],

PROJECTION["Mercator_Auxiliary_Sphere"],

PARAMETER["False_Easting",0.0],

PARAMETER["False_Northing",0.0],

PARAMETER["Central_Meridian",0.0],

PARAMETER["Standard_Parallel_1",0.0],

PARAMETER["Auxiliary_Sphere_Type",0.0],

UNIT["Meter",1.0],

AUTHORITY["EPSG",3857]

]

       类似的,“PROJCS”代表这是一个投影坐标系。投影坐标系中必然会包括一个地理坐标系,这里的地理坐标系就是“GCS_WGS_1984”,这个地理坐标系的定义和上面的类似。下面紧跟着的是投影的相关参数,“Mercator_Auxiliary_Sphere”是采用投影的名称,这个投影坐标系以0度经线为中央经线进行投影;坐标系的单位为米(显然,转换因子就为1.0),而该坐标系的EPSG编码为“3857”。


[1] 关于字节序可以参考:http://zh.wikipedia.org/zh/%E5%AD%97%E8%8A%82%E5%BA%8F

[2] 转换因子意为一个单位所代表的米(线性单位)或所代表的弧度数(角度单位)。

[3] 在线EPSG编码参考:http://spatialreference.org/ref/epsg/



[1] 原本还有关于CORBA和OLE/COM的实现,当前版本已经不支持了。

1 0
原创粉丝点击