ST_Collect - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

ST_Collect

ST_Collect ha due varianti. Una accetta due geometrie mentre l'altra accetta un'espressione aggregata.

La prima variante di ST_Collect crea una geometria a partire dalle geometrie in input. L'ordine delle geometrie di input viene mantenuto. Questa variante funziona come segue:

  • Se entrambe le geometrie di input sono punti, allora viene restituito un MULTIPOINT con due punti.

  • Se entrambe le geometrie di input sono linestring, allora viene restituito un MULTILINESTRING con due linestring.

  • Se entrambe le geometrie di input sono poligoni, allora viene restituito un MULTIPOLYGON con due poligoni.

  • In caso contrario, viene restituito un GEOMETRYCOLLECTION con due geometrie di input.

La seconda variante di ST_Collect crea una geometria dalle geometrie in una colonna della geometria. Non esiste un determinato ordine di restituzione delle geometrie. Specificare la clausola WITHIN GROUP (ORDER BY...) per specificare l'ordine delle geometrie restituite. Questa variante funziona come segue:

  • Se tutte le righe non NULL nell'espressione di aggregazione di input sono punti, viene restituito un multipunto contenente tutti i punti nell'espressione di aggregazione.

  • Se tutte le righe non NULL nell'espressione di aggregazione sono linestring, viene restituito un elemento multilinestring contenente tutte le linestring nell'espressione di aggregazione.

  • Se tutte le righe non NULL nell'espressione di aggregazione sono poligoni, viene restituito un elemento multipoligono contenente tutti i poligoni nell'espressione di aggregazione.

  • In caso contrario, viene restituito un GEOMETRYCOLLECTION contenente tutte le geometrie nell'espressione aggregata.

ST_Collect restituisce la geometria della stessa dimensione delle geometrie di input. Tutte le geometrie di input devono avere la stessa dimensione.

Sintassi

ST_Collect(geom1, geom2)
ST_Collect(aggregate_expression) [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

Argomenti

geom1

Un valore di tipo GEOMETRY o un'espressione che restituisce un valore di tipo GEOMETRY.

geom2

Un valore di tipo GEOMETRY o un'espressione che restituisce un valore di tipo GEOMETRY.

aggregate_expression

Una colonna di tipo di dati GEOMETRY o un'espressione che restituisce un tipo GEOMETRY.

[WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

Una clausola facoltativa che specifica l'ordinamento dei valori aggregati. La clausola ORDER BY contiene un elenco di espressioni di ordinamento. Le espressioni di ordinamento sono espressioni simili alle espressioni di ordinamento valide in un elenco di query select, ad esempio il nome di una colonna. È possibile specificare l'ordinamento crescente (ASC) o decrescente (DESC). Il valore predefinito è ASC.

Tipo restituito

GEOMETRY di sottotipo MULTIPOINT, MULTILINESTRING, MULTIPOLYGON o GEOMETRYCOLLECTION.

Il valore dell'identificatore del sistema di riferimento spaziale (SRID) dell'oggetto geometrico restituito è il valore SRID degli oggetti geometrici in input.

Se geom1 e geom2 sono entrambi null, allora viene restituito il valore null.

Se tutte le righe di aggregate_expression sono nulle, allora viene restituito un valore nullo.

Se geom1 è null, viene restituita una copia di geom2. Allo stesso modo, se geom2 è nullo, viene restituita una copia di geom1.

Se geom1 e geom2 presentano valori SRID diversi, allora viene restituito un errore.

Se due geometrie in aggregate_expression hanno valori SRID diversi, allora viene restituito un errore.

Se la geometria restituita è maggiore della dimensione massima di un GEOMETRY, allora viene restituito un errore.

Se geom1 e geom2 hanno dimensioni diverse, allora viene restituito un errore.

Se due geometrie in aggregate_expression hanno dimensioni diverse, allora viene restituito un errore.

Esempi

Il seguente SQL restituisce una raccolta di geometrie che contiene le due geometrie di input.

SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
st_astext ----------- GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))

Il seguente SQL raccoglie tutte le geometrie da una tabella in una raccolta geometrica.

WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT NULL::geometry UNION ALL SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326)) SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
st_astext ----------- SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))

Il seguente SQL raccoglie tutte le geometrie nella tabella raggruppate in base colonna id e ordinate in base a questo ID. In questo esempio, le geometrie risultanti vengono raggruppate per ID come segue:

  • id 1: punti in un multipunto.

  • id 2: linestring in una multilinestring.

  • id 3: sottotipi misti in una raccolta di geometrie.

  • id 4: poligoni in un multipoligono.

  • id 5: null e il risultato è null.

WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
id | st_asewkt ----+----------------------------------------------------------------------------------------------------------- 1 | SRID=4326;MULTIPOINT((1 2),(4 5)) 2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5)) 3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))) 4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20))) 5 |

Il seguente comando SQL raccoglie tutte le geometrie da una tabella in una raccolta di geometrie. I risultati sono ordinati in ordine decrescente per id e quindi lessicograficamente in base alle loro coordinate x minime e massime.

WITH tbl(id, g) AS ( SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
st_asewkt --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)