从其他Geometry对象的collection返回一个具体的Geometry值(对应的对象)。

语法

geometry  ST_Collect(geometry set  g1Field);
geometry  ST_Collect(geometry  g1 , geometry  g2);
geometry  ST_Collect(geometry[]  g1Array);

参数

参数名称 描述
g1Field Geometry对象在数据集中的字段。
g1 第一个Geometry对象。
g2 第二个Geometry对象。
g1Array Geometry对象数组。

描述

  • 输出类型可以是Multi或GeometryCollection类型。该函数有两种形式:
    • 形式1:输入参数是两个Geometry对象。该函数会根据输入的两个Geometry对象,返回一个Collection对象,输出类型可能是Multi或GeometryCollection类型。
    • 形式2:是一个聚合功能函数,输入对象是一个Geometry对象的集合,返回一个ST_Geometry函数值对应的Geometry对象。
  • 该函数支持CircularString和CurveGeometry对象,但可能不会返回预期的一个MultiCurve类型或Multi类型对象。
  • 函数ST_Collect 和函数ST_Union 经常可以互换使用,除了ST_Collect将始终返回GeometryCollection或Multi类型,而ST_Union溶解边界时可能返回单个Geometry对象。 ST_Union还将在节点相交处分割LineString,而ST_Collect则仅仅返回为MultiLineString。
    • 一般来说函数ST_Collect要比函数ST_Union快很多,因为ST_Collect 函数不会去分解输入Geometry对象的边界或者检查一个MultiPolygon对象是否有重叠部分。它仅仅是把单个的Geometry对象组合成一个Multi类型对象,或者将Multi类型对象组合成一个GeometryCollection集合对象。
    • 为了阻止函数ST_Collect把Multi类型对象变成GeometryCollection类型对象,用户可以使用如下小技巧:利用函数ST_Dump把Multi类型对象转换成单个Geometry对象,再重新聚合他们。

示例

  • 输出MULTI对象:
    SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'POINT(0 1)'::geometry));
          st_astext
    ---------------------
     MULTIPOINT(0 0,0 1)
    (1 row)
                        
  • 输出GEOMETRYCOLLECTION对象:
    SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'LINESTRING(0 2,0 3)'::geometry));
                         st_astext
    ----------------------------------------------------
     GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 2,0 3))
    (1 row)
                        
  • 聚合数据集:
    select ST_AsText(ST_Collect(t.geom)) from (select (ST_DumpPoints(st_buffer('POINT(0 0)'::geometry,1,'quad_segs=2'))).geom as geom) as t;
                               st_astext
    ----------------------------------------------------------------
     MULTIPOINT(1 0,0.707106781186548 -0.707106781186547,0 -1,-0.70.
    .7106781186546 -0.707106781186549,-1 0,-0.70710678118655 0.7071.
    .06781186545,0 1,0.707106781186544 0.707106781186551,1 0)
    (1 row)