全部產品
Search
文件中心

ApsaraDB RDS:ST_Collect

更新時間:Feb 28, 2024

從其他Geometry對象的collection返回一個具體的Geometry值(對應的對象)。

文法

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

參數

參數名稱描述
g1FieldGeometry對象在資料集中的欄位。
g1第一個Geometry對象。
g2第二個Geometry對象。
g1ArrayGeometry對象數組。

描述

  • 輸出類型可以是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)