LineString
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL в хранилище Microsoft Fabric в базе данных SQL Microsoft Fabric в Microsoft Fabric
LineString — это одномерный объект, представляющий последовательность точек и сегменты линий, соединяющие их в пространственных данных ядра База данных SQL.
Экземпляры LineString
На следующем рисунке показаны примеры экземпляров 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 был действительным, он должен соответствовать следующим критериям.
- Экземпляр LineString должен быть принят.
- Если экземпляр LineString не является пустым, он должен содержать по меньшей мере две разные точки.
- Экземпляр 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 недопустим. Вызов для преобразования экземпляра 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.