PostGIS之路——数据类型

           PostGIS支持所有OGC规范的简单几何要素类型,同时在此基础上扩展了对3DZ3DM4D坐标的支持。

一、几何类型(Geometry Type):他的几何基础是平面,两点之间的距离认为是直线距离,可以用数据笛卡尔或直线向量计算。

1. OGCWKBWKT格式

OGC定义了两种描述几何对象的格式,分别是WKBWell-Known Binary)和WKTWell-Known Text)。

SQL语句中,用以下的方式可以使用WKT格式定义几何对象:

POINT(0 0) ——点

LINESTRING(0 0,1 1,1 2) ——线

POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ——面

MULTIPOINT(0 0,1 2) ——多点

MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ——多线

MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ——多面

GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4))) ——几何集合

以下语句可以使用WKT格式插入一个点要素到一个表中,其中用到的GeomFromText等函数在后面会有详细介绍:

INSERT INTO table ( SHAPE, NAME ) VALUES ( GeomFromText('POINT(116.39 39.9)', 4326), '北京');

2. EWKTEWKBCanonical格式

EWKTEWKB相比OGC WKTWKB格式主要的扩展有3DZ3DM4D坐标和内嵌空间参考支持。

以下以EWKT语句定义了一些几何对象:

POINT(0 0 0) ——3D

SRID=32632;POINT(0 0) ——内嵌空间参考的点

POINTM(0 0 0) ——带M值的点

POINT(0 0 0 0) ——带M值的3D

SRID=4326;MULTIPOINTM(0 0 0,1 2 1) ——内嵌空间参考的带M值的多点

以下语句可以使用EWKT格式插入一个点要素到一个表中:

INSERT INTO table ( SHAPE, NAME ) VALUES ( GeomFromEWKT('SRID=4326;POINTM(116.39 39.9 10)'), '北京' )

Canonical格式是16进制编码的几何对象,直接用SQL语句查询出来的就是这种格式。

3. SQL-MM格式

SQL-MM格式定义了一些插值曲线,这些插值曲线和EWKT有点类似,也支持3DZ3DM4D坐标,但是不支持嵌入空间参考。

以下以SQL-MM语句定义了一些插值几何对象:

CIRCULARSTRING(0 0, 1 1, 1 0) ——插值圆弧

COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) ——插值复合曲线

CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) ——曲线多边形

MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) ——多曲线

MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11))) ——多曲面

二、地理类型(Geography Type)

    地理类型提供支持本地空间特性的“地理”坐标(有时称为“大地”坐标,或“纬度/经度”,或“经度/纬度”)。它的几何基础是球面。计算两点间的距离相当于计算圆弧的距离,不能使用平面几何原理,需要通过其他参考方法计算。由于底层算法复杂,定义的地理类型比空间类型少很多,随之算法的增加,将出现新的地理类型。

    PostGresSQl8.3推出一张表辅助空间参考表:spatial_ref_sys表,它存放的是OGC规范的空间参考。辅助转化。 地理类型只支持简单的简单的元素。标准几何类型数据将自动转换到地理WGS84坐标。您还可以使用EWKT和EWKB约定来插入数据。

如下创建表:

CREATE TABLE global_points (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
location GEOGRAPHY(POINT,4326)
);

插入数据:

INSERT INTO global_points (name, location) VALUES ('London', ST_GeographyFromText('SRID=4326; POINT(-72.1235 42.3521)'));

三、box2d

   box2d是一中包含 x min, ymin, xmax, ymax的二维几何类型,反映封闭箱子状几何对象的范围。ST_Extent函数返回一个box2d对象。

 

四、box3d

 

    box3d是postgis包含 x min, ymin, zmin, xmax, ymax, zmax,反映三维的几何类型。ST_3DExtent 函数返回一个box3d对象。

 

 五、geometry_dump

      一种存储geom和路径两个字段的数据类型,是一个复合数据类型,可以根据数组原理,导航获取路径某个位置的元素,可以反映一个复杂的几何对象的组合部分和定位部分。

 

原文地址:https://www.cnblogs.com/LCGIS/p/2947224.html