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


LineString

LineString является одномерным объектом, представляющим последовательность точек и соединяющих их линейных сегментов.

Экземпляры Linestring

На рисунке ниже показаны примеры объектов LineString.

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

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

  • на рисунке 1 представлен простой незамкнутый экземпляр объекта LineString;

  • на рисунке 2 представлен отличный от простого незамкнутый экземпляр объекта LineString;

  • на рисунке 3 продемонстрирован простой замкнутый экземпляр объекта LineString, представляющий собой кольцо;

  • на рисунке 4 продемонстрирован замкнутый непростой экземпляр объекта LineString, не являющийся кольцом.

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

Принятые экземпляры LineString могут быть введены в переменную geometry, однако они могут не быть допустимыми экземплярами LineString. Чтобы быть допустимым, экземпляр LineString должен отвечать следующим требованиям. Экземпляр должен быть сформирован по меньшей мере двумя различными точками или должен быть пустым. Принимаются следующие экземпляры LineString.

DECLARE @g1 geometry = 'LINESTRING EMPTY';
DECLARE @g2 geometry = 'LINESTRING(1 1,2 3,4 8, -6 3)';
DECLARE @g3 geometry = 'LINESTRING(1 1, 1 1)';

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

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

DECLARE @g geometry = 'LINESTRING(1 1)';

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

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

  1. Экземпляр LineString должен быть принятым.

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

  3. Экземпляр LineString не может перекрывать сам себя на интервале.

Следующие экземпляры LineString являются допустимыми.

DECLARE @g1 geometry= 'LINESTRING EMPTY';
DECLARE @g2 geometry= 'LINESTRING(1 1, 3 3)';
DECLARE @g3 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0)';
DECLARE @g4 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();

Следующие экземпляры LineString являются недопустимыми.

DECLARE @g1 geometry = 'LINESTRING(1 4, 3 4, 2 4, 2 0)';
DECLARE @g2 geometry = 'LINESTRING(1 1, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid();
ПредупреждениеВнимание!

Обнаружение перекрытий LineString основано на вычислениях с плавающей запятой, которые не являются точными.

Примеры

В следующем примере показано, как создать экземпляр geometryLineString с тремя точками и значением SRID, равным 0.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);

Каждая точка экземпляра LineString может содержать значения Z (уровень) и M (мера). В данном примере значения М добавляются к экземпляру LineString, созданному в примере выше. M и Z могут принимать значения NULL.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1 NULL 0, 2 4 NULL 12.3, 3 9 NULL 24.5)', 0);