SFS-简单要素标准

  • 概述

SFS(OpenGIS® Simple Features Interface Standard)包括俩个部分,第一个部门是描述简单要素的通用模型、另一个部分模型在SQL中实现。我们平时所熟知的WKT、WKB等就在等一部分中叙述,而在空间SQL中常见的AsText、Interstcts操作等则在第二部分中有定义。

下面简单介绍第一部分中的几何对象模型、WKT 描述的几何对象、 WKB 描述的几何对象、WKT 描述的空间参考。和第二部分的 SQL 预定义 schema、SQL 几何类型、SQL 空间操作。

  • 几何对象模型
SFS中定义的几何对象模型

上图中SFS中几何对象的关系结构,简单要素中的几何对象主要就是定义了点、线、面和多点、多线、多面。另外,几何对象有一系列的操作。

Geometry的操作
  • WKT描述的几何对象

WKT(Well-know Text)可以通过文本来描述几何对象。例如:

几何类型 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)),
(())
多面
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 值的二维点
WKT 描述几何对象示例
  • WKB描述几何对象

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

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

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

WKB 描述点的字节结构

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

WKB 描述线的字节结构

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

 1字节(字节序) 4字节(几 4字节(环 4字节(环 8字节(节 8字节(节 8字节(节 8字节(节 8字节(节 8字节(节 8字节(节 8字节(节何类型) 数) 1的节点数) 点1 X坐标) 点1 Y坐标) 点2 X坐标) 点2 Y坐标) 点3 X坐标) 点3 Y坐标) 点1 X坐标) 点1 Y坐标)

关于字节序点击这里

  • 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度经线为起始经线;地图单位为度,该单位的转换因子为0.0174532925199433(π/180),该坐标系统在EPSG中的编码为"4326"。

坐标系统(投影坐标系)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”。

转换因子意为一个单位所代表的米(线性单位)戒所代表的弧度数(觇度单位)。

在线 EPSG编码参考点击这里

  • SQL 预定义 schema

在空间数据中,需要一些表来存储和管理几何字段、空间参考等信息,因此OGC首先规定了在数据库中需要的Schema对象。

OGC 空间数据库中需要预定义的 schema

数据库中必须要有一个记录几何字段信息的GEOMETRY_COLUMNS 表和一个记录空间参考信息的 SPATIAL_REF_SYS 表。从支持 OGC 标准的空间数据库中,我们都可以找到这两张表。

有些空间数据库直接使用“GEOMETRY_COLUMNS”和“SPATIAL_REF_SYS”作为这两张表的名称,比如 PostGIS,有些则采用其它名字,比如 Oracle Spatial 采用 “OGIS_GEOMETRY_COLUMNS”和“OGIS_SPATIAL_REFERENCE_SYSTEMS”、ArcSDE for Oracle 则采用“GEOMETRY_COLUMNS”和“SPATIAL_REFERENCES”,不一而同。

  • SQL 几何对象存储

在 OGC 标准中几何信息存储在一个 Geometry 表中,这个表可以用常规字段或 WKB 两种方式存储几何对象,Geometry 表通过 GID 字段关联到 Feature 表的几何字段。OGC 标准中还有一种定义,Feature 表的几何字段也可以是 SQL UDT(自定义类型),也就是不需要额外的 Geometry 表来存储几何信息,而直接存储在 Feature 表的几何字段中。大多数数据库都是采用这种自定义类型的方式存储几何信息,比如 ArcSDE 中的 ST_Geometry 类型、PostGIS 中的 Geometry 和 ST_Geometry 类型。

自定义类型可以采用 SFS 标准中定义的几何类型,也可以采用 SQL/MM的定义,比如 PostGIS 对这两种定义都进行了支持,下图是 SFS 和 SQL/MM 几何类型定义的一个对应关系:

SFS 和 SQL/MM 几何类型的对应关系

用户既可以遵循 SFS 的定义,使用类似“Geometry”、“Point”这样的命名;也可以遵循 SQL/MM 定义,采用“ST_”作为前缀进行命名,如“ST_Geometry”、“ST_Point”。

SQL 几何类型的继承关系,可以发现 SQL 中实现的几何对象模型和图 1 所示的通用几何对象模型非常类似。

版权声明:
作者:苍狗长风
链接:https://www.develophm.com/index.php/sfs-%e7%ae%80%e5%8d%95%e8%a6%81%e7%b4%a0%e6%a0%87%e5%87%86/1503/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>