OGC 标准梳理

OGC 标准梳理。| 标准 | 简写 | 说明 | | --------------------------- | ---- | -

OGC 标准梳理

OGC 常见标准

标准 简写 说明
Simple Features SFS 简单要素对象的通用描述
Styled Layer Descriptor SLD 用以对地理数据进行符号化
Web Coverage Service WCS 栅格Web服务
Web Feature Service WFS 要素Web服务
Web Map Service WMS 地图Web服务
Web Map Tile Service WMTS 切片地图Web服务
Web Processing Service WPS 地理处理Web服务

SFS-简单要素标准

集合类型:点、线、面、多点、多线、多面

几何类型

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 值的二维点
坐标系
大地坐标系

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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]

]
投影坐标系

“PROJCS”代表这是一个投影坐标系。投影坐标系中必然会包括一个地理坐标系,这里的地理坐标系就是“GCS_WGS_1984”,这个地理坐标系的定义和上面的类似。下面紧跟着的是投影的相关参数,

“Mercator_Auxiliary_Sphere”是采用投影的名称,这个投影坐标系以 0 度经线为中央经线进行投影;坐标系的单位为米(显然,转换因子就为 1.0),而该坐标系的 EPSG 编码为“3857”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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]

]

EPSG编码参考:http://spatialreference.org/ref/epsg/

WKB

WKB 中主要涉及两种数值类型:一种是 uint32,占 4 个字节,用以存储节点数、几何对象类型等信息;另一种是 double,占 8 个字节,用以存储节点坐标值。其中的几何对象类型对应的整数可以参考下表:

image_0

GeoJSON

类型 GeoJSON示例
Point {“type”:“Point”,“coordinates”:[10,10]}
LineString {“type”:“LineString”,“coordinates”:[[10,10],[20,20],[30,40]]}
Polygon {“type”:“Polygon”,“coordinates”:[[[10,10],[10,20],[20,20],[20,15],[10,10]]]}
MultiPolygon {“type”:“MultiPolygon”,“coordinates”:[[[[10,10],[10,20],[20,20],[20,15],[10,10]]],[[[60,60],[70,70],[80,60],[60,60]]]]}
MultiLineString {“type”:“MultiLineString”,“coordinates”:[[[10,10],[20,20]],[[15,15],[30,15]]]}
MultiPoint {“type”:“MultiPoint”,“coordinates”:[[10,10],[20,20]]}
GeometryCollection {“type”:“GeometryCollection”,“geometries”:[{“type”:“Point”,“coordinates”:[10,10]},{“type”:“Point”,“coordinates”:[30,30]},{“type”:“LineString”,“coordinates”:[[15,15],[20,20]]}]}
Feature
FeatureCollection

数据库中的几何存储方式及操作函数

几何字段属性和坐标系

数据库中必须要有一个记录几何字段信息的GEOMETRY_COLUMNS 表和一个记录空间参考信息的 SPATIAL_REF_SYS 表

几何字段值

定义一,在 OGC 标准中几何信息存储在一个 Geometry 表中,这个表可以用常规字段或 WKB 两种方式存储几何对象,Geometry 表通过 GID 字段关联到 Feature 表的几何字段。

定义二,Feature 表的几何字段也可以是 SQL UDT(自定义类型),也就是不需要额外的 Geometry 表来存储几何信息,而直接存储在 Feature 表的几何字段中。大多数数据库都是采用这种自定义类型的方式存储几何信息,比如 ArcSDE 中的 ST_Geometry 类型、PostGIS 中的 Geometry 和 ST_Geometry 类型。

几何函数
几何对象构造 说明
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 获取矩形范围
空间关系判断 说明
ST_Equals image0
ST_Disjoint image1
ST_Intersects 任意部分有相交,等价于判断空间关系的 DE-9IM 字符串表达是否是以下之一:TTT****T
ST_Touches image2
ST_Crosses image3
ST_Within image4
ST_Contains image5
ST_Overlaps image6
ST_Relate 判断是否满足 DE-9IM 字符串表达关系
距离计算 说明
ST_Distance 几何对象间的最短距离
几何运算 说明
ST_Intersection image7
ST_Difference image8
ST_Union image9
ST_SymDifference image10
ST_Buffer image11
ST_ConvexHull image12

SLD - 图层样式描述

SLD 是一种描述地图图层样式的标准,一般用于 WMS。

QGIS 中配置的样式可以导出 SLD 文件

WMTS

瓦片计算

如果知道一个请求的边界范围,可以根据以下的算法获取切片的序号:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// 计算切片序号范围

epsilon = 1e-6[1] //一个不影响坐标精度的小数值

tileMinCol = floor((bBoxMinX - tileMatrixMinX) / tileSpanX + epsilon)

tileMaxCol = floor((bBoxMaxX - tileMatrixMinX) / tileSpanX - epsilon)

tileMinRow = floor((tileMatrixMaxY - bBoxMaxY) / tileSpanY + epsilon)

tileMaxRow = floor((tileMatrixMaxY - bBoxMinY) / tileSpanY - epsilon)

// 避免超出范围

if (tileMinCol < 0) tileMinCol = 0

if (tileMaxCol >= matrixWidth) tileMaxCol = matrixWidth-1

if (tileMinRow < 0) tileMinRow = 0

if (tileMaxRow >= matrixHeight) tileMaxRow = matrixHeight-1
Licensed under CC BY-NC-SA 4.0
Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……