空间数据类型

本文介绍Lindorm Ganos服务的空间数据类型和数据格式。

Geometry类型及其子类

Lindorm Ganos支持的空间数据类型如下表:

数据类型

描述

使用示例

Geometry

表示通用的空间对象,是Point、LineString、Polygon、MultiPoint、MultiPolygon、MultiLineString和GeometryCollection的父类型。不建议直接将空间列定义为Geometry。

说明
  • 如果将宽表列定义为Geometry类型,则该列可以存储任意子类型的数据(Point、LineString、Polygon、MultiPoint、MultiPolygon、MultiLineString或GeometryCollection),但不适合创建针对某一子类型的时空索引。

  • 如果将宽表列的数据类型定义为某个子类型,则不允许向该列写入其他子类型的数据。例如,定义宽表列的数据类型为Point,则该列只允许写入Point类型的数据。

创建时空数据表时指定空间列的数据类型。

Point

表示点类型数据,由坐标经度x和纬度y组成。

说明

不支持三维点坐标的计算,存储的三维点在计算时会被转为二维点。

车辆、船舶接收到的GPS坐标信息。

LineString

表示线类型数据,由两个或多个点组成。前一条线段的终点是下一条线段的起点。

说明

一条线段必须有两个及以上的点,连续顶点可以相等。

  • 一条街道可能由多个LineString组成。

  • 在一定时间范围内,某车辆的多个坐标点组成一条轨迹线。

Polygon

表示面类型数据,面的外边界是一个闭合的环,即起点和终点的坐标x、y是相等的。

说明

一个面至少需要三个点才能组成。

  • 电子围栏。

  • 地图中的土地区块、森林、行政区划等面状类型。

  • 矩形、圆等图形。

MultiPoint

表示零个或多个Point的集合。

游乐园所有售票处。

MultiLineString

表示零条或多条LineString的集合。

一条由多个LineString组成的街道。

MultiPolygon

表示零个或多个Polygon的集合。

一个由多个县或区组成的市。每个县或区都是一个Polygon。

GeometryCollection

表示零个或多个Geometry的集合。

多种图形的集合。

Geometry类型的构造

将点坐标格式构造为Geometry对象

使用时空函数ST_MakePoint将数值类型的点坐标数据构造为Geometry Point对象,或使用时空函数ST_LineFromMultiPoint数值类型的点坐标数据构造为Geometry LineString对象,详细介绍,请参见构造函数

将WKT格式构造为Geometry对象

WKT格式说明

WKT是开放地理空间信息联盟(Open Geospatial Consortium,简称OGC)定义的一种用文本来描述空间对象的格式,有关WKT的介绍请参见Well-know Text。Lindorm Ganos支持通过WKT文本格式来表达点(Point)、线(LineString)、面(Polygon)、多点(MultiPoint)、多线(MultiLineString)、多面(MultiPolygon)、几何对象集合(GeometryCollection)七种空间数据类型,不支持WKT信息中带有SRID(Spatial Reference IDentifier)。

Lindorm Ganos支持的WKT数据类型如下表:

数据类型

语法

WKT示例

Point

POINT(x y):x表示经度,y表示纬度。

  • POINT(-10.1 3.3):表示一个点。

  • POINT EMPTY:表示空的点。

LineString

LINESTRING(x1 y1,x2 y2,...,xn yn):x1~xn表示经度,y1~yn表示纬度。

  • LINESTRING(3 4,10 50,20 25):表示有三个点的线段。

  • LINESTRING EMPTY:表示空的线。

Polygon

POLYGON((x1 y1,x2 y2,...,xn yn),(xa ya,xb b,...,xm ym)):x1~xn和xa~xm表示经度,y1~yn和ya~ym表示纬度。

  • POLYGON((2 2, 2 8, 8 8, 8 2, 2 2)):表示有一个外环的多边形。

  • POLYGON((0.5 0.5,5 0,5 5,0 5,0.5 0.5),(1.5 1,4 3,4 1,1.5 1)):表示有一个外环和一个内环的多边形。

  • POLYGON EMPTY:表示空的多边形。

MultiPoint

MultiPoint(x1 y1, x2 y2, ..., xn yn):x1~xn表示经度,y1~yn表示纬度。

MULTIPOINT (10 40, 40 30, 20 20, 30 10)POINT(10 40)POINT(40 30)POINT(20 20)POINT(30 10)四个点组成的集合。

MultiLineString

MultiLineString ((x11 y11, x12 y12, ..., x1n y1n),(x21 y21, x22 y22, ..., x2m y2m), ...):x11~x1n和x21~x2m表示经度,y11~y1n和y21~y2m表示纬度。

MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10)) :表示由LINESTRING(10 10, 20 20, 10 40)LINESTRING(40 40, 30 30, 40 20, 30 10)两条线段组成的集合。

MultiPolygon

MultiPolygon (((x11 y11, x12 y12, ..., x1n y1n)),((x21 y21, x22 y22, ..., x2m y2m)),...):x11~x1n和x21~x2m表示经度,y11~y1n和y21~y2m表示纬度。

  • MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5))):表示由两个只有一个外环的多边形POLYGON((30 20, 45 40, 10 40, 30 20))POLYGON((15 5, 40 10, 10 20, 5 10, 15 5))组成的集合。

  • MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20))) :表示由以下对象组成的集合:

    • 一个只有一个外环的多边形:POLYGON((40 40, 20 45, 45 30, 40 40))

    • 一个带内环的多边形:POLYGON((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20))

GeometryCollection

GeometryCollection (Point/LineString/Polygon/MultiPoint/MultiLineString/MultiPolygon)

GEOMETRYCOLLECTION (POINT (40 10),LINESTRING (10 10, 20 20, 10 40),POLYGON ((40 40, 20 45, 45 30, 40 40))) 表示由以下对象组成的集合:

  • 一个点:POINT(40 10)。

  • 一条线段:LINESTRING(10 10, 20 20, 10 40)。

  • 一个多边形:POLYGON((40 40, 20 45, 45 30, 40 40))。

构造方法

使用时空函数ST_GeomFromText将WKT构造为Geometry对象。详细介绍,请参见构造函数

Geometry类型的输出

将Geometry对象输出为WKB字符串

WKB是OGC定义的一种通过序列化字节来描述几何对象的格式,有关WKB的介绍请参见Well-known Binary。Lindorm Ganos支持通过WKB来表达点(Point)、线(LineString)、面(Polygon)、多点(MultiPoint)、多线(MultiLineString)、多面(MultiPolygon)、几何对象集合(GeometryCollection)七种空间数据类型。

Geometry类型直接输出时,显示的是Geometry对象WKB格式的16进制字符串。示例如下:

SELECT ST_GeomFromText('POINT(-10.1 3.3)') as p;

返回结果:

+--------------------------------+
|               p                |
+--------------------------------+
| 0020000001000010E6C02433333333 |
| 3333400A666666666666           |
+--------------------------------+

将Geometry对象输出为WKT

使用时空函数ST_AsText将Geometry对象输出为WKT格式。详细介绍,请参见输出函数