Поделиться через


GeometryCollection

Тип данных 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();

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

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

Примеры

В следующем примере создается коллекция GeometryCollection экземпляров geometry; значения 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);