Линейная строка (LineString)

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

Экземпляры LineString

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

Примеры экземпляров Geometry LineString

Как показано на рисунке:

  • Рис. 1 — простой незамкнутый LineString экземпляр.

  • Рис. 2 — это несложный и незамкнутый LineString экземпляр.

  • Рис. 3 — это закрытый, простой LineString пример, поэтому, это кольцо.

  • Рис. 4 является закрытым, неимплым LineString экземпляром, поэтому не является кольцом.

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

Допустимые LineString экземпляры могут вводиться в геометрическую переменную, однако они могут быть недействительными 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 основано на вычислениях с плавающей запятой, которые не являются точными.

Примеры

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

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

Каждая точка в экземпляре LineString может содержать значения Z (повышение) и M (мера). В этом примере значения 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);

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

DECLARE @g geometry
SET @g = geometry::STGeomFromText('LINESTRING(1 3, 1 3)',0);
IF @g.STIsValid() = 1
  BEGIN
     SELECT @g.ToString() + ' is a valid LineString.';  
  END
ELSE
  BEGIN
     SELECT @g.ToString() + ' is not a valid LineString.';
     SET @g = @g.MakeValid();
     SELECT @g.ToString() + ' is a valid Point.';  
  END

Приведенный выше фрагмент кода вернет следующее:

LINESTRING(1 3, 1 3) is not a valid LineString
POINT(1 3) is a valid Point.

См. также

STLength (тип данных geometry)STStartPoint (тип данных geometry)STEndpoint (тип данных geometry)STPointN (тип данных geometry)STNumPoints (тип данных geometry)STIsRing (тип данных geometry)STIsClosed (тип данных geometry)STPointOnSurface (тип данных geometry)Пространственные данные (SQL Server)