以下函数类型均为:geometry
目录
ST_Collect
把多个几何收集入一个几何集。如果输入几何为同类型,则结果为 Multi* ;如果输入几何为不同类型,则结果为 GeometryCollection
geometry ST_Collect(geometry g1, geometry g2);
# 接受两个几何
geometry ST_Collect(geometry[] g1_array);
# 接受一个几何序列
geometry ST_Collect(geometry set g1field);
# 聚合函数,可接受一个行集(rowset)的几何
举例
SELECT ST_AsText(
ST_Collect(
ST_GeomFromText('POINT(1 2)'),
ST_GeomFromText('POINT(2 3)')
)
)
# 类型一基础用法
# 返回结果:MULTIPOINT(1 2,2 3)
select st_collect(
(select geom
from cities
where "name" = '北京'
),
(select geom
from cities
where "name" = '天津'
)
)
# 类型一:两个geometry
select st_collect(
array (select geom from cities)
)
# 类型二:一个几何序列
需要输入的参数信息
- 几何信息
ST_LineFromMultiPoint
由一个 Multipoint 创建一个 LineString
ST_LineFromMultiPoint(geometry aMultiPoint);
举例
SELECT ST_AsEWKT(
ST_LineFromMultiPoint('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)')
);
# 基础用法
#
SELECT st_linefrommultipoint(
st_collect(
(select geom
from cities
where "name" = '北京'
),
(select geom
from cities
where "name" = '天津'
)
)
)
# 把上一步结果的 MultiPoint 转成 LineString
需要输入的参数信息
- 一个 MultiPoint 几何
ST_MakeEnvelope
由 X 和 Y 的最大最小值创建一个矩形多边形
ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax,
integer srid=unknown);
举例
SELECT ST_MakeEnvelope(10, 10, 11, 11, 4326)
# 随便创建一个矩形框
需要输入的参数信息
- 矩形框XY的最大最小值
- SRID 值
ST_MakeLine
创建一个包含 Point, MultiPoint 或 LineString 的点的 LineString。其他几何类型会报错
ST_MakeLine(geometry geom1, geometry geom2);
# 接受两个几何
ST_MakeLine(geometry[] geoms_array);
# 接受一个几何序列
ST_MakeLine(geometry set geoms);
# 接受一个行集的几何
# 为确保输入几何的顺序,可使用 ORDER BY
举例
SELECT ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4));
SELECT ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)');
# 类型一:两个 geometry
SELECT ST_MakeLine(
ARRAY(SELECT ST_Centroid(geom)
FROM boundary_polygon
ORDER BY id
)
);
# 类型二:一个 geometry 序列
需要输入的参数信息
- 几何信息
ST_MakePoint
创建2D, 3D, 4D点
ST_MakePoint(float x, float y);
ST_MakePoint(float x, float y, float z);
ST_MakePoint(float x, float y, float z, float m);
举例
SELECT ST_MakePoint(-71.10, 42.31);
# 创建一个未知 SRID 的点
SELECT ST_SetSRID(ST_MakePoint(-71.10, 42.31),4326);
# 和 ST_SetSRID 共同使用,创建一个带有 SRID 的点
需要输入的参数信息
- 几何信息
ST_MakePointM
创建一个带有 M 值(measure)的点(POINT M)
ST_MakePointM(float x, float y, float m);
举例
SELECT ST_AsEWKT(ST_MakePointM(-71.10, 42.31, 10));
需要输入的参数信息
- 几何信息
- M 值
注意
如果想输出文本信息,应该使用
ST_AsEWKT 函数而不是 ST_AsText 函数,因为后者不支持 M 值,会报错
ST_MakePolygon
创建由给定外层 shell 和可选的内层 holes 序列形成的多边形。输入几何必须是封闭的 LineStrings(环)
ST_MakePolygon(geometry linestring);
ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);
# 输入外层 LineString 和内层洞 LineStrings
举例
SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));
# 由二维 LineString 创建多边形
SELECT ST_MakePolygon(
ST_GeomFromText('LINESTRING(1 1,1 4,4 4,4 1,1 1)'),
array[ST_GeomFromText('LINESTRING(2 2,2 3,3 3,3 2,2 2)')]
);
# 创建带有 hole 的多边形
需要输入的参数信息
- 几何信息(外层shell / 外层shell + 内层holes)
注意
- 该函数 ST_MakePolygon 不接受 MultiLineStrings。可以使用 ST_LineMerge 函数生成一个 LineString, 或者使用 ST_Dump 函数把 MultiLineStrings 拆解出 LineStrings
- 内层 holes 需要为 array 类型,且 array不能为 NULL
ST_Point
用给定的 XY 坐标值返回一个 Point。
是 ST_MakePoint 只输入XY值(类型一)时的别名
ST_Point(float x, float y);
举例
SELECT ST_Point(-71.10, 42.31);
# 一个点(一般不这样用因为没有 SRID 值)
SELECT ST_SetSRID( ST_Point(-71.10, 42.31), 4326);
# 一个设 SRID 值的点
SELECT CAST(ST_SetSRID( ST_Point( -71.10, 42.31), 4326) AS geography);
SELECT ST_SetSRID( ST_Point( -71.104, 42.315), 4326)::geography;
# 将点投影到地图上显示(点本身的坐标属于大地坐标系时)
# 以上两个语句等价,::geography是PGSQL提供的地理投影便捷语句
SELECT ST_Transform(ST_SetSRID( ST_Point( 3637510, 3014852 ), 2273), 4326)::geography;
# 将点投影到地图上显示(点本身的坐标不属于大地坐标系,需要先重投影到大地坐标系,再投影到地图上显示
需要输入的参数信息
- 几何信息
ST_Polygon
用给定的 LineString 返回一个 Polygon,并设置 SRID 值。
本函数与ST_MakePolygon 函数类型一 + ST_SetSRID函数类似;如果像创建带有 holes 的多边形,请使用ST_MakePolygon函数 + ST_SetSRID函数
ST_Polygon(geometry lineString, integer srid);
举例
SELECT ST_AsText( ST_Polygon('LINESTRING(75 29, 77 29, 77 29, 75 29)'::geometry, 4326) );
需要输入的参数信息
- 几何信息
- SRID 值
注意
- 该函数 ST_Polygon 不接受 MultiLineStrings。可以使用 ST_LineMerge 函数生成一个 LineString, 或者使用 ST_Dump 函数把 MultiLineStrings 拆解出 LineStrings
ST_TileEnvelope
使用 XYZ tile system (OSM术语,瓦片系统)在 Web Mercator (SRID:3857)中创建一个矩形多边形。默认使用 Web Mercator 边界(-20037508.342789, 20037508.342789)。
除使用默认3857,也可以自选 SRID 值做输入参数。
ST_TileEnvelope(integer tileZoom, integer tileX, integer tileY, geometry bounds=SRID=3857;LINESTRING(-20037508.342789 -20037508.342789,20037508.342789 20037508.342789));
举例
SELECT ST_AsText( ST_TileEnvelope(2, 1, 1) );
# 输出:POLYGON((-10018754.171394622 0,-10018754.171394622 10018754.171394622,0 10018754.171394622,0 0,-10018754.171394622 0))
需要输入的参数信息
- tileZoom, tileX, tileY
- (可选)使用的 SRID 值
ST_Collect — Creates a GeometryCollection or Multi* geometry from a set of geometries.
ST_LineFromMultiPoint — Creates a LineString from a MultiPoint geometry.
ST_MakeEnvelope — Creates a rectangular Polygon from minimum and maximum coordinates.
ST_MakeLine — Creates a Linestring from Point, MultiPoint, or LineString geometries.
ST_MakePoint — Creates a 2D, 3DZ or 4D Point.
ST_MakePointM — Creates a Point from X, Y and M values.
ST_MakePolygon — Creates a Polygon from a shell and optional list of holes.
ST_Point — Creates a Point with the given coordinate values. Alias for ST_MakePoint.
ST_Polygon — Creates a Polygon from a LineString with a specified SRID.
ST_TileEnvelope — Creates a rectangular Polygon in Web Mercator (SRID:3857) using the XYZ tile system.