PostGIS支持的GIS对象是OpenGIS Consortium (OGC)定义的“简单特性”的超集。
PostGIS支持OGC“SQL简单特性”规范中指定的所有对象和函数。
PostGIS扩展了标准,支持3DZ、3DM和4D坐标。
OpenGIS规范定义了表达空间对象的两种标准方式:众所周知的文本(WKT)形式和众所周知的二进制(WKB)形式。 WKT和WKB都包含关于对象类型和构成对象的坐标的信息。
特征空间对象的文本表示(WKT)示例如下:
OpenGIS规范还要求空间对象的内部存储格式包括空间引用系统标识符(SRID)。 在创建空间对象以插入数据库时,需要SRID。
这些格式的输入/输出可以使用以下接口:
bytea WKB = ST_AsBinary(geometry);
text WKT = ST_AsText(geometry);
geometry = ST_GeomFromWKB(bytea WKB, SRID);
geometry = ST_GeometryFromText(text WKT, SRID);
例如,创建和插入OGC空间对象的有效插入语句是:
INSERT INTO geotable ( the_geom, the_name )
VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');
OGC格式只支持2D几何图形,并且相关的SRID“从未”嵌入到输入/输出表示中。 PostGIS扩展格式目前是OGC扩展格式的超集(每个有效的WKB/WKT都是一个有效的EWKB/EWKT),但这可能在未来有所不同,特别是如果OGC推出了与我们的扩展相冲突的新格式。 因此,你不应该依赖这个特性!
PostGIS EWKB/EWKT添加3DM, 3DZ, 4D坐标支持,嵌入式SRID信息。
特征的扩展空间对象的文本表示(EWKT)示例如下。
这些格式之间的转换可用以下接口:
bytea EWKB = ST_AsEWKB(geometry);
text EWKT = ST_AsEWKT(geometry);
geometry = ST_GeomFromEWKB(bytea EWKB);
geometry = ST_GeomFromEWKT(text EWKT);
例如,创建和插入PostGIS空间对象的有效插入语句是:
INSERT INTO geotable ( the_geom, the_name )
VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )
PostgreSQL类型的“规范形式”是你通过简单查询(不需要任何函数调用)得到的表示,以及通过简单的插入、更新或复制保证可以接受的表示。 PostGIS的“几何”类型如下:
- Output
- binary: EWKB
ascii: HEXEWKB (EWKB in hex form)
- Input
- binary: EWKB
ascii: HEXEWKB|EWKT
例如,该语句在规范ascii输入/输出过程中读取EWKT并返回HEXEWKB:
=# SELECT 'SRID=4;POINT(0 0)'::geometry;
geometry
----------------------------------------------------
01010000200400000000000000000000000000000000000000
(1 row)
SQL多媒体应用程序空间规范通过定义一些循环内插曲线扩展了SQL规范的简单特性。
SQL-MM定义包括3DM、3DZ和4D坐标,但不允许嵌入SRID信息。
众所周知的文本扩展还没有得到完全支持。 一些简单的曲线几何的例子如下所示:
CIRCULARSTRING是基本的曲线类型,类似于线性世界中的LINESTRING。 一个单独的线段需要三个点,起始点和终点点(第一和第三个)以及弧线上的任何其他点。 但对于一个闭合的圆,它的起点和终点是相同的。 在这种情况下,第二点一定是圆弧的中心(即圆的对边)。 要将弧链在一起,前一个弧的最后一个点将成为下一个弧的第一个点,就像LINESTRING中一样。 这意味着一个有效的圆形字符串必须有大于1的奇数个点。
复合曲线是一个单一的,连续的曲线,它既有曲线(圆形)段,也有线段。 这意味着除了具有格式良好的组件外,每个组件(最后一个除外)的结束点必须与以下组件的开始点一致。
曲线多边形中的复合曲线示例:CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1,2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )
曲线多边形就像一个多边形,有一个外圈和零个或多个内圈。 不同的是,一个环可以是圆弦、线弦或复合弦的形式。
从PostGIS 1.4开始,PostGIS支持曲线多边形的复合曲线。
MULTICURVE
是曲线的集合,它可以包括线性弦、圆形弦或复合弦。
这是曲面的集合,可以是(线性)多边形或曲线多边形。
SQL-MM实现中的所有浮点比较都按照指定的公差执行,目前为1E-8。