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


MultiLineString

MultiLineString представляет собой коллекцию экземпляров geometry или geographyLineString.

Экземпляры MultiLineString

На следующем рисунке приведены примеры экземпляров MultiLineString.

Примеры объектов MultiLineString типа geometry

На рисунке представлены:

  • Изображение 1 представляет простой экземпляр MultiLineString , граница которого определяется четырьмя конечными точками двух его элементов LineString.

  • Изображение 2 представляет простой экземпляр MultiLineString, поскольку пересекаются только конечные точки элементов LineString. Граница образована двумя неперекрывающимися конечными точками.

  • Изображение 3 представляет непростой экземпляр MultiLineString, поскольку имеется пересечение внутренней части одного из элементов LineString этого экземпляра. Границей данного экземпляра MultiLineString являются четыре конечные точки.

  • Изображение 4 представляет непростой, незамкнутый экземпляр MultiLineString.

  • Изображение 5 представляет простой, незамкнутый экземпляр MultiLineString. Экземпляр является незамкнутым, поскольку незамкнуты его элементы LineStrings . Экземпляр является простым, поскольку внутренние стороны экземпляров LineStrings не пересекаются.

  • Изображение 6 представляет простой, замкнутый экземпляр MultiLineString. Экземпляр является замкнутым, поскольку все его элементы замкнуты. Экземпляр является простым, поскольку внутренние области его элементов не пересекаются.

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

Для того чтобы экземпляр MultiLineString был принят, он либо должен быть пустым, либо должен состоять из приемлемых экземпляров LineString. Дополнительные сведения о приемлемых экземплярах LineString см. в разделе LineString. В приведенных ниже примерах показаны приемлемые экземпляры MultiLineString.

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';

В следующем примере выдается исключение System.FormatException, поскольку второй экземпляр LineString является недопустимым.

DECLARE @g geometry = 'MULTILINESTRING((1 1, 3 5),(-5 3))';

Допустимые экземпляры

Экземпляр MultiLineString является допустимым, если он удовлетворяет следующим условиям.

  1. Все экземпляры, из которых состоит экземпляр MultiLineString, являются допустимыми экземплярами LineString.

  2. Экземпляры LineString, из которых состоит экземпляр MultiLineString, не должны перекрываться. Экземпляры LineString могут пересекаться или соприкасаться между собой или с другими экземплярами LineString только в конечном числе точек.

В следующем примере показаны три допустимых экземпляра MultiLineString и один недопустимый экземпляр MultiLineString.

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();

@g4 является недопустимым, поскольку экземпляр LineString перекрывается с экземпляром LineString на протяжении интервала. Они соприкасаются в бесконечном числе точек.

Примеры

В следующем примере создается простой экземпляр geometryMultiLineString, в котором содержатся два элемента LineString и значение SRID которого равно 0.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');

Чтобы создать экземпляр с другим значением SRID, используйте функции STGeomFromText() или STMLineStringFromText(). Можно также использовать функцию Parse(), а затем изменить SRID, как показано в следующем примере.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');
SET @g.STSrid = 13;