PostGIS函数(二)几何构造函数 Geometry Constructors

以下函数类型均为: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 值

参考:PostGIS 3.2 官方文档

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.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值