meface/docs/article/gis/geoserver/sfs.md

13 KiB
Raw Blame History

title date author tags categories
SFS-简单要素标准 2020-02-24 ac
SFS
GIS基础知识
OGC
GIS

SFS是对现实世界中的地理实体抽象描述包括通用模型和数据库存储上的实现。

简单要素标准

简单要素标准包含两部分:Common architectureSQL option

  • Common architecture通用模型是对简单要素的描述包括几何对象模型、WKT描述的几何对象、WKB描述的几何对象、WKT描述的空间参考;
  • SQL option:是上一部分在SQL中的实现,包括SQL预定义的Schema、SQL几何类型、SQL空间操作。

几何对象模型

image-20201013142502054

SFS 中定义的几何对象模型

上图是SFS中几何对象的关系结构Geometry作为抽象的根类派生出点Point、曲线Curve、表面Surface和几何要素的集合类GeometryCollection。主要定义了点、线、面和多点、多线、多面。

image-20201013152016907

Geometry的操作

另外SFS也定义了描述几何对象的的属性和方法。

WKT描述的几何对象

Well-known text (WKT)是一种文本标记语言,用于表示地图上的几何对象、地理空间坐标系。该格式由开放地理空间联盟(OGC)制定。

几何对象WKT文本例子

几何类型 WKT 说明
Point Point(6 10)
LineString LineString(3 4,10 50,20 25) 有3个节点的线
Polygon Polygon((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)) 有内环和外环的多边形
MultiPoint MultiPoint(
(10 10),
(4 10)
)
多点
MultiLineString MultiLineString(
(3 4,10 50,20 25),
(-5 -8,-10 -8,-15 -4)
)
多线
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(4 6,7 10)
)
几何集合

WKT描述的空间参考

地理坐标系GCS的WKT格式以WGS1984的地理坐标系为例

GEOGCS[
	'名称',
	'大地基准面椭球体'['名称','参考椭球'['名称','长半轴a','扁率α']],
	'起始经线'['名称',0.0],
	'单位'['Degree','单位的转换因子'],
	'制定的权威机构'['']
]
GEOGCS[
	"WGS 84",
	DATUM["WGS_1984",SPHEROID["WGS 84", 6378137, 298.257223563]],
	PRIMEM["Greenwich", 0.0],
	UNIT["Degree", 0.0174532925199433],
	AUTHORITY["EPSG", "4326"]
]

π/180 = 0.0174532925199433

投影坐标系PCS的WTK格式以WGS84 Web MercatorAuxiliary Sphere坐标系为例

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]
]

投影坐标系中必然包含一个地理坐标系,还有投影方法和一些参数。

WKB描述的几何对象

WKB(well-known binary)是WKT的二进制形式,通过序列化的字节对象来描述几何对象,常用于数据传输与数据库存储(PostgreSQL)。

WKB 中主要涉及两种数值类型:

  • 一种是 uint32占 4 个字节,用以存储节点数、几何对象类型等信息;
  • 另一种是 double占 8 个字节,用以存储节点坐标值。

其中的几何对象类型对应的整数可以参考下表:

image-20201024135228010

另外,WKB在第一位还存储了一个字节用来标识字节序0=Big-Indian1=Little-Indian

现代的计算机系统一般采用字节(Octet, 8 bit Byte)作为逻辑寻址单位。当物理单位的长度大于1个字节时就要区分字节顺序(Byte Order, orEndianness)。常见的字节顺序有两种:

  • Big Endian(High-byte first):低地址存放最高有效位MSB既高位字节排放在内存的低地址端低位字节排放在内存的高地址端
  • Little Endian(Low-byte first):低地址存放最低有效位LSB既低位字节排放在内存的低地址端高位字节排放在内存的高地址端。

对于一个点不带M值的二位点来说WKB描述应该类似如下结构总占21个字节

image-20201024152157978

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

image-20201024162309261

SQL Option

image-20201120181517949

SQL 预定义schema

Schema,即XML SchemaXSD (XML Schema Definition)W3C于2001年5月发布的推荐标准指出以何种形式描述XML文档的元素的规范。schema是元数据的一个抽象集合,包含一套schema component: 主要是元素与属性的声明、复杂与简单数据类型的定义。

数据库中的schema为一组数据结构的逻辑集合称之为schema对象包含索引index、视图view、表table、分区partitions、序列sequences、维度dimensions、同义词synonyms等。不同的数据库厂商对schema的定义略有不同。

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

image-20201103142109273

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

从上图可以看出,要素表(Feature Table)中用一个几何类型的字段(Geomentry Column)记录空间几何信息。通过定义几何字段列的信息表(GEOMETRY_COLUMNS)和一张记录空间参考信息表(SPATIAL_REF_SYS)指定几何字段以何种形式(结构)存储几何信息。从支持OCG标准空间数据库中可以找到这两张表,如安装了空间扩展组件(PostGIS)的PostgreSQL。但不同的数据库或地信厂商提供的空间扩展,对这两张表的命名也会有所不同:

  • PostGISGEOMETRY_COLUMNSSPATIAL_REF_SYS

  • Oracle SpatialOGIS_GEOMETRY_COLUMNSOGIS_SPATIAL_REFERENCE_SYSTEMS

  • ArcSDE for OracleGEOMETRY_COLUMNSSPATIAL_REFERENCES

image-20201103151619376

SQL 几何对象存储

从预定义的schema中可以知道OGC标准中几何信息存储在一个Geometry表中,该表有两种存储形式:常规的字段和二进制的WKB。通过GID字段关联Feature表的几何字段。但实际上,OGC标准还规定了要素表(Feature)中的几何字段(Geometry)可以使用自定义类型(SQL UDT),这样就不需要额外的Geometry表来存储几何信息,而是直接保存到要素表(Feature)的几何字段中,如:

  • ArcGIS中的st_shape_lib库中的ST_Geometry类型
  • PostGIS中的GeometryST_Geometry类型。

自定义类型可以采用SFS标准定义的几何类型,也可以采用SQL/MM标准。

SQL/MM趣闻

  • 1991~1992年--IEEE的赞助--文本搜索引擎厂商发表SFQL结构化查询语言Structured Full-text Query Language的语言规范
  • 遭到了其他数据处理机构的批评,因为SFQL“劫持”了许多其它机构已经通用的关键字CONTAINS
  • 此时一部分数据库厂商已经申明他们支持“对象关系模型”。基于这些厂商的建议,东京研讨会提出了第二个标准的概念
    • 结构化数据是第一类SQL类通过普通的SQL99版本进行存取。
    • 增加定义其他的SQL对象“类库”每个类库对应一类复杂数据
  • 建议的标准很快以SQL/MM这里的MM表示多媒体为人所共知

image-20201120165626763

SQL/MM Geometry模型
Simple feature access/SQL(SFA-SQL) ISO/IEC (SQL/MM-Spatial)
Point ST_Point
Curve ST_Curve
LineString ST_Linestring
ST_Circularstring
Surface ST_Surface
ST_CurvePolygon
Polygon ST_Polygon
PolyhedralSurface ST_PolyhedralSurface
Multipoint ST_MultiPoint
Multicurve ST_MultiCurve
Multilinestring ST_MultiLineString
Multisurface ST_MultiSurface
Multipolygon ST_MultiPolygon
GeomCollection ST_Collection
ST_CompoundCurve
SFS和SQL/MM几何类型的对应关系

用户即可以遵循SFS的定义使用类似“Geometry”、“Point”的命名也可以遵循SQL/MM定义的采用“ST_”作为前缀进行命名“ST_Geometry”、“ST_Point”等

SQL

SQL空间操作

SQL/MM中定义的空间操作:

空间操作函数 说明
ST_WKTToSQL 从 WKT 构造几何对象
ST_WKBToSQL 从 WKB 构造几何对象
ST_AsText 获取 WKT 描述
ST_AsBinary 获取 WKB 描述
ST_Dimension 获取维数
ST_GeometryType 获取几何类型
ST_SRID 获取空间参考 ID
ST_IsEmpty 是否为空
ST_IsSimple 是否是简单对象
ST_Boundary 获取边界
ST_Envelope 获取矩形范围

此外还有空间拓扑关系、几何运算相关的操作函数具体内容可查看ArcGIS和PostGIS中对SQL/MM 标准的实现:

SFSQL与SQL/MM的对比

  • SFSQL与SQL/MM的Geometry总体框架近似
  • SFSQL与SQL/MM有相互融合的趋势
    • SFSQL对部分类和函数按SQL/MM的形式进行封装
    • SQL/MM提供了亮哥符合SFSQL的短名字视图
  • SFSQL与SQL/MM优势互补总体而言SQL/MM的覆盖面更广
SFSQL SQL/MM
3D数据类型
参数化数据类型
文本标注
Geometry存储方式Numric
Geometry存储方式Binary
Geometry存储方式UDT
拓扑结构
网络拓扑
图/影像存储
图/影像的检索
对GML的支持

参考文章

[1] SFSQL和SQLMM标准 http://www.doc88.com/p-734475445183.html

[2] Simple Feature Access - Part 2: SQL Option https://www.ogc.org/standards/sfs