二、 PostGIS中的几何类型
PostGIS支持所有OGC规范的“Simple Features”类型,同时在此基础上扩展了对3DZ、3DM、4D坐标的支持。
1. OGC的WKB和WKT格式
OGC定义了两种描述几何对象的格式,分别是WKB(Well-Known Binary)和WKT(Well-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 2),(2 3,3 2,5 4)) ——多线
MULTIPOLYGON(((0 0,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. EWKT、EWKB和Canonical格式
EWKT和EWKB相比OGC WKT和WKB格式主要的扩展有3DZ、3DM、4D坐标和内嵌空间参考支持。
以下以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有点类似,也支持3DZ、3DM、4D坐标,但是不支持嵌入空间参考。 以下以sql-MM语句定义了一些插值几何对象: CIRCULARSTRING(0 0,1 0) ——插值圆弧 COMPOUNDCURVE(CIRCULARSTRING(0 0,1 0),(1 0,0 1)) ——插值复合曲线 CURVEPOLYGON(CIRCULARSTRING(0 0,3 3,3 1,1 1)) ——曲线多边形 MULTICURVE((0 0,5 5),CIRCULARSTRING(4 0,8 4)) ——多曲线 MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0,((10 10,14 12,11 10,10 10),(11 11,11.5 11,11 11.5,11 11))) ——多曲面