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