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


LineString

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLКонечная точка аналитики SQL в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

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

Экземпляры 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();  

Warning

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

Examples

Пример A.

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

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

Пример B.

Каждая точка в экземпляре 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);  

Пример C.

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

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.