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


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);