sum(expression) aggregate to return a sum for a set of records
count(expression) aggregate to return the size of a set of records
ST_GeometryType(geometry) returns the type of the geometry
ST_NDims(geometry) returns the number of dimensions of the geometry
ST_SRID(geometry) returns the spatial reference identifier number of the geometry
ST_X(point) returns the X ordinate
ST_Y(point) returns the Y ordinate
ST_Length(linestring) returns the length of the linestring
ST_StartPoint(geometry) returns the first coordinate as a point
ST_EndPoint(geometry) returns the last coordinate as a point
ST_NPoints(geometry) returns the number of coordinates in the linestring
ST_Area(geometry) returns the area of the polygons
ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)
ST_ExteriorRing(polygon) returns the outer ring as a linestring
ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring
ST_Perimeter(geometry) returns the length of all the rings
ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection
ST_GeometryN(geometry, integer) returns the specified part of the collection
ST_GeomFromText(text) returns geometry
ST_AsText(geometry) returns WKT text
ST_AsEWKT(geometry) returns EWKT text
ST_GeomFromWKB(bytea) returns geometry
ST_AsBinary(geometry) returns WKB bytea
ST_AsEWKB(geometry) returns EWKB bytea
ST_GeomFromGML(text) returns geometry
ST_AsGML(geometry) returns GML text
ST_GeomFromKML(text) returns geometry
ST_AsKML(geometry) returns KML text
ST_AsGeoJSON(geometry) returns JSON text
ST_AsSVG(geometry) returns SVG text
ST_Equals(geometry A, geometry B)用于测试两个图形的空间相等性。
ST_Intersects、ST_Crosses和ST_Overlaps都用于测试几何图形内部是否相交。
ST_Touches()测试两个几何图形是否在它们的边界上接触,但在它们的内部不相交
ST_Within()和ST_Contains()测试一个几何图形是否完全包含于另一个几何图形内
ST_Distance(geometry A, geometry B)计算两个几何图形之间的最短距离
1、ST_OffsetCurve
geometry ST_OffsetCurve(geometry line, float signed_distance, text style_parameters='');
描述:
对linestring类型的处理,返回输入line在signed_distance上的偏移线,signed_distance是正数,向左偏移,负数则向右偏移。
style_parameters参数中,quad_segs是近似四分之一圆的线段数,默认值是8;连接样式join,可选round|mitre|bevell,默认值是round,mitre与miter同义。
示例:
把LINESTRING(1 1, 1 2)向左偏移1度:
select st_astext(ST_OffsetCurve(st_geomfromtext('LINESTRING(1 1, 1 2)', 4326), 1, 'quad_segs=1 join=mitre'));
得到结果:
LINESTRING(0 1,0 2)
2、ST_Translate
geometry ST_Translate(geometry g1, float deltax, float deltay);
描述:
对geometry对象平移,在经度方向平移deltax,纬度方向平移deltay。
示例:
把POINT(-65.01 21.8),经度方向移动2度,纬度方向移动1度:
SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-65.01 21.8)',4326),2,1)) As result;
得到结果:
POINT(-63.01 22.8)
3、ST_Rotate
geometry ST_Rotate(geometry geom, float rotRadians);
描述:
对geometry类型对象geom,进行旋转,旋转值rotRadians的单位是弧度。
示例:
select st_astext(ST_Rotate(st_geomfromtext('LINESTRING(1 1, 1 2)', 4326),pi()/2));
得到结果:
LINESTRING(-1 1,-2 1)
4、ST_Scale
geometry ST_Scale(geometry geomA, float XFactor, float YFactor);
描述:
对geometry类型对象geom(可以是点线面等类型),进行缩小或放大,在经度方向缩放比例是XFactor,在纬度方向缩放比例是YFactor。
示例:
select st_astext(ST_Scale(st_geomfromtext('LINESTRING(1 1, 1 2)', 4326),0.5,0.5));
得到结果:
LINESTRING(0.5 0.5,0.5 1)
5、ST_Transform
geometry ST_Transform(geometry geom, integer srid);
描述:
投影坐标系转换,把geometry类型对象geom,转换成srid类型坐标系投影。
示例:
select
st_astext(ST_Transform(ST_GeomFromText('POINT(1 2)',4326),3857));
得到结果:
POINT(111319.49079327357 222684.20850554455)
6、ST_Simplify
geometry ST_Simplify(geometry geom, float distanceTolerance);
描述:
用道格拉斯扑克算法,对geometry类型对象geom进行抽稀,distanceTolerance是道格拉斯扑克算法中的距离容差。
道格拉斯扑克算法如下:
1)、连接曲线首尾两点A、B,形成一条虚线,
2)、依次计算曲线上所有点到该虚线的距离
3)、计算得到所有点的最大距离D,如果D小于阈值,则去掉曲线上除A、B外的所有点,如果D大于阈值,则留取该最大距离的点,将该曲线分成两段,
4)、对分段曲线重复1-3步骤,直到所有D均小于阈值,即完成抽稀。
示例:
select st_astext(ST_Simplify(ST_GeomFromText('LINESTRING(-1 -1,0 0,1 -1)',4326),2)) ressult;
得到结果:
LINESTRING(-1 -1,1 -1)
7、string_agg和array_agg
描述:
都是聚合操作,多行转一行,行转列,
string_agg,返回结果是字符串类型。
array_agg,返回结果是数组。
示例:
比如一个表table1,有字段name和tel,有三行数据,分别为:
name,tel
123,134
abc,135
789,136
1)执行select string_agg(name,',') from table1;
得到如下结果:
123,abc,789
2)还可以加order by语法,如下:
select string_agg(name,',' ORDER BY name) from table1;
得到结果如下:
123,789,abc
3)执行select array_agg(name) from table1;
得到结果:
{123,abc,789}
4)可以在上边步骤基础上使用array_to_json函数
select array_to_json(array_agg(name)) from table1;
得到结果:
["123","abc","789"]
5)进一步引申,类似array_to_json函数的还有row_to_json函数
select row_to_json(t) from table1 t;
得到结果:
{"name":"123","tel":"134"}
{"name":"abc","tel":"135"}
{"name":"789","tel":"136"}
8、regexp_split_to_table和regexp_split_to_array
描述:
这两个都是字符串分割函数,都是一行转多行,可以用正则表达式分割。
1)regexp_split_to_table,有两个参数,一个是被分割的字符串,一个是分割符,分割形成虚拟表。
示例:
select re from regexp_split_to_table('11,22,33',',') re where re='11';
得到结果:
11
2)regexp_split_to_array,有两个参数,一个是被分割的字符串,一个是分割符,分割形成数组。
示例:
select (regexp_split_to_array('11,22,33',','))[3];
得到结果:
33
9、ST_AsMVTGeom和ST_AsMVT
PostGIS这两个函数,让动态矢量切片变得很容易,ST_AsMVTGeom函数将几何图形坐标转换成MapBox VectorTile坐标空间里的几何图形,ST_AsMVT函数将基于MapBox VectorTile坐标空间的几何图形转换为MVT二进制矢量切片。实现动态矢量切片,两个函数需要结合起来使用。
1)ST_AsMVTGeom函数
geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);
2)ST_AsMVT聚合函数
bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name);
示例:
SELECT ST_AsMVT(q, 'test', 4096, 'geom') FROM (SELECT 1 AS c1,ST_AsMVTGeom(ST_GeomFromText('POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30))'),ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom) AS q;