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


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;