ST_Affine -对几何图形应用三维仿射变换。
geometry ST_Affine(geometry geomA, float a, float b, float c, float d, float e, float f, float g, float h, float i, float xoff, float yoff,
float zoff);
geometry ST_Affine(geometry geomA, float a, float b, float d, float e, float xoff, float yoff);
应用三维仿射变换到几何图形,可以在一步内完成平移、旋转、缩放等操作。
ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)
/ a b c xoff \
| d e f yoff |
| g h i zoff |
\ 0 0 0 1 /
x' = a*x + b*y + c*z + xoff
y' = d*x + e*y + f*z + yoff
z' = g*x + h*y + i*z + zoff
下面所有的平移/缩放函数都是通过这样的仿射变换表示的。
版本2:对几何图形应用二维仿射变换。调用
ST_Affine(geom, a, b, d, e, xoff, yoff)
/ a b 0 xoff \ / a b xoff \
| d e 0 yoff | rsp. | d e yoff |
| 0 0 1 0 | \ 0 0 1 /
\ 0 0 0 1 /
顶点变换如下:
x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z
在1.3.4之前,如果与包含CURVES的几何图形一起使用,这个函数会崩溃。这在1.3.4+中得到了修正
--Rotate a 3d line 180 degrees about the z axis. Note this is long-hand for doing ST_Rotate();
SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0)) As using_affine,ST_AsEWKT(ST_Rotate(the_geom, pi())) As using_rotate FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo;
| using_affine | using_rotate |
|---|---|
| LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3) |
SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo;
| st_asewkt |
|---|
| LINESTRING(-1 -2 -3,-1 -4 -3) |
ST_Rotate -围绕原点旋转几何图形。
geometry ST_Rotate(geometry geomA, float rotRadians);
geometry ST_Rotate(geometry geomA, float rotRadians, float x0, float y0);
geometry ST_Rotate(geometry geomA, float rotRadians, geometry pointOrigin);
围绕原点逆时针旋转几何体。旋转原点可以指定为POINT几何图形,也可以指定为x和y坐标。如果未指定原点,则几何图形将围绕点(0 0)旋转。
增强:2.0.0支持多面体曲面,三角形和TIN。
增加了用于指定旋转原点的附加参数。
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()));
| st_asewkt |
|---|
| LINESTRING(-50 -160,-50 -50,-100 -50) |
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160));
| st_asewkt |
|---|
| LINESTRING(50 160,105 64.7372055837117,148.301270189222 89.7372055837117) |
SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom))) FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo;
| st_asewkt |
|---|
| LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708) |
ST_RotateX -绕X轴旋转几何图形。
geometry ST_RotateX(geometry geomA, float rotRadians);
绕X轴旋转几何体geomA - rotRadians。
SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
| st_asewkt |
|---|
| LINESTRING(1 -3 2,1 -1 1) |
ST_RotateY -绕Y轴旋转几何图形
geometry ST_RotateY(geometry geomA, float rotRadians);
绕y轴旋转几何体geomA - rotRadians
ST_RotateZ -绕Z轴旋转几何图形
geometry ST_RotateZ(geometry geomA, float rotRadians);
绕Z轴旋转几何体geomA - rotRadians
SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
| st_asewkt |
|---|
| LINESTRING(-2 1 3,-1 1 1) |
SELECT ST_AsEWKT(ST_RotateZ(the_geom, pi()/2)) FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) As the_geom) As foo;
| st_asewkt |
|---|
| CURVEPOLYGON(CIRCULARSTRING(-567 237,-564.87867965644 236.12132034356,-564 234,-569.12132034356 231.87867965644,-567 237)) |
ST_Scale -根据给定的因子缩放几何图形
geometry ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);
geometry ST_Scale(geometry geomA, float XFactor, float YFactor);
geometry ST_Scale(geometry geom, geometry factor);
geometry ST_Scale(geometry geom, geometry factor, geometry origin);
通过将坐标与相应的因子参数相乘,将几何图形缩放到新的大小。
采用几何图形作为因子参数的版本允许通过2d、3dm、3dz或4d点来设置所有支持维度的缩放因子。因子点中缺失的维数等同于不缩放相应的维数。
三几何变体允许传入缩放的“假原点”。这允许“就地缩放”,例如使用几何图形的质心作为假原点。没有假原点,缩放发生相对于实际原点,所以所有坐标都乘以缩放因子
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75, 0.8));
| st_asewkt |
|---|
| LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8) |
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75));
| st_asewkt |
|---|
| LINESTRING(0.5 1.5 3,0.5 0.75 1) |
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'),ST_MakePoint(0.5, 0.75, 2, -1)));
| st_asewkt |
|---|
| LINESTRING(0.5 1.5 6 -4,0.5 0.75 2 -1) |
SELECT ST_AsText(ST_Scale('LINESTRING(1 1, 2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry));
| st_astext |
|---|
| LINESTRING(1 1,3 3) |
ST_Translate -通过给定的偏移量转换几何图形。
geometry ST_Translate(geometry g1, float deltax, float deltay);
geometry ST_Translate(geometry g1, float deltax, float deltay, float deltaz);
返回一个新的几何图形,其坐标为平移的delta x,delta y,delta z单位。单位是基于空间参考(SRID)中为这个几何定义的单位。
在1.3.4之前,如果与包含CURVES的几何图形一起使用,这个函数会崩溃。这在1.3.4+中得到了修正
SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) As wgs_transgeomtxt;
| wgs_transgeomtxt |
|---|
| POINT(-70.01 42.37) |
SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)',4326) ,1,0.5)) As wgs_transgeomtxt;
| wgs_transgeomtxt |
|---|
| LINESTRING(-70.01 42.87,-70.11 42.88) |
SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' As geometry), 5, 12,3));
| st_asewkt |
|---|
| POINT(5 12 3) |
SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2));
| st_astext |
|---|
| GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 7.1213,7 9,9 11,5 5)),POINT(2 5)) |
ST_TransScale -通过给定的偏移量和因子来平移和缩放几何图形。
geometry ST_TransScale(geometry geomA, float deltaX, float deltaY, float XFactor, float YFactor);
使用deltaX和deltaY参数转换几何图形,然后使用XFactor和YFactor参数缩放它,只在2D中工作。
SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2));
| st_asewkt |
|---|
| LINESTRING(1.5 6 3,1.5 4 1) |
SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4));
| st_astext |
|---|
| CURVEPOLYGON(CIRCULARSTRING(714 2276,711.363961030679 2267.51471862576,705 2264,698.636038969321 2284.48528137424,714 2276)) |