Коллекция геометрии

A GeometryCollection — это коллекция из нуля или более экземпляров geometry или geography. GeometryCollection может быть пустым.

Экземпляры коллекции геометрии

Принятые экземпляры

Чтобы экземпляр GeometryCollection был принят, он должен быть пустым экземпляром GeometryCollection, или все экземпляры, которые составляют экземпляр GeometryCollection, должны быть принятыми экземплярами. В следующем примере показаны допустимые экземпляры.

DECLARE @g1 geometry = 'GEOMETRYCOLLECTION EMPTY';  
DECLARE @g2 geometry = 'GEOMETRYCOLLECTION(LINESTRING EMPTY,POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';  
DECLARE @g3 geometry = 'GEOMETRYCOLLECTION(LINESTRING(1 1, 3 5),POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';  

В следующем примере происходит ошибка System.FormatException, потому что экземпляр LinesString в GeometryCollection не принимается.

DECLARE @g geometry = 'GEOMETRYCOLLECTION(LINESTRING(1 1), POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';  

Допустимые примеры

Экземпляр GeometryCollection действителен, если все экземпляры, составляющие GeometryCollection экземпляр, являются допустимыми. Ниже показаны три допустимых GeometryCollection экземпляра и один экземпляр, недопустимый.

DECLARE @g1 geometry = 'GEOMETRYCOLLECTION EMPTY';  
DECLARE @g2 geometry = 'GEOMETRYCOLLECTION(LINESTRING EMPTY,POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';  
DECLARE @g3 geometry = 'GEOMETRYCOLLECTION(LINESTRING(1 1, 3 5),POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';  
DECLARE @g4 geometry = 'GEOMETRYCOLLECTION(LINESTRING(1 1, 3 5),POLYGON((-1 -1, 1 -5, -5 5, -5 -1, -1 -1)))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();  

Экземпляр Polygon в экземпляре GeometryCollection недопустим, поэтому @g4 недопустим.

Дополнительные сведения о принятых и допустимых экземплярах см. в разделе Point, MultiPoint, LineString, MultiLineString, Polygon и MultiPolygon.

Примеры

В следующем примере создается экземпляр geometry``GeometryCollection с использованием значений Z в SRID 1, включающей экземпляр Point и экземпляр Polygon.

DECLARE @g geometry;  
SET @g = geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(3 3 1), POLYGON((0 0 2, 1 10 3, 1 0 4, 0 0 2)))', 1);  

См. также

Пространственные данные (SQL Server)