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


LineString

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Экземпляры LineString

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

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

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

  • на рисунке 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 (мера). В данном примере значения М добавляются к экземпляру 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)