A CircularString
是零个或多个连续圆弧线段的集合。 圆弧线段是由二维平面中的三个点定义的曲线段;第一个点不能与第三个点相同。 如果圆弧线段的所有三个点都是合弦线,则弧线段被视为线段。
重要
有关 SQL Server 2012 中引入的新空间功能的详细说明和示例,包括 CircularString
子类型、下载白皮书、 SQL Server 2012 中的新空间功能。
CircularString 实例
下图显示了有效的 CircularString
实例:
接受的实例
CircularString
实例被接受如果它要么为空,要么包含奇数个点 n,其中 n > 1。 接受以下 CircularString
实例。
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';
@g3
表明 CircularString
实例可能会被接受,但可能无效。 以下 CircularString 实例声明不会被接受。 此声明引发一个 System.FormatException
.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
有效实例
有效 CircularString
实例必须为空或具有以下属性:
它必须至少包含一个圆弧线段(也就是说,至少包含三个点)。
序列中每个圆弧段的最后一个终结点(最后一段除外)必须是序列中下一段的第一个终结点。
它必须有奇数的积分。
它不能在间隔内重叠自身。
尽管
CircularString
实例可能包含线段,但这些线段必须由三个共坐标点定义。
以下示例演示了有效的 CircularString
实例。
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();
CircularString
实例必须至少包含两个圆弧线段才能定义完整的圆。
CircularString
实例不能使用单个圆弧线段(例如(1 1、3 1、1 1)来定义完整的圆。 使用 (1 1, 2 2, 3 1, 2 0, 1 1) 定义圆。
以下示例显示了无效的 CircularString 实例。
DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';
SELECT @g1.STIsValid(), @g2.STIsValid();
具有共线点的实例
在以下情况下,圆弧线段将被视为线段:
当所有三个点共线时(例如,1 3、4 4、7 5)。
当第一个点和中间点相同时,但第三个点不同(例如,1 3、1 3、7 5)。
当中间点和最后一个点相同时,但第一个点不同(例如,1 3、4 4、4 4) 。
例子
答: 使用空 CircularString 创建一个几何实例
此示例演示如何创建空 CircularString
实例:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. 使用带一个圆弧线段的 CircularString 实例化几何图形实例
以下示例演示如何创建 CircularString
具有单个圆弧线段(半圆)的实例:
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. 使用带多个圆弧线段的 CircularString 实例化几何图形实例
以下示例演示如何创建 CircularString
包含多个圆弧线段(全圆)的实例:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));
这会生成以下输出:
Circumference = 6.28319
比较使用 LineString
而不是 CircularString
时的输出。
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));
这会生成以下输出:
Perimeter = 5.65685
请注意,该示例的值 CircularString
接近 2π(2 * pi),这是圆的实际周长。
D. 在同一语句中使用 CircularString 声明和实例化几何图形实例
此代码片段演示如何使用同一geometry
CircularString
语句声明和实例化实例:
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E. 使用 CircularString 实例化地理实例
以下示例演示如何使用CircularString
声明和实例化geography
实例:
DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';
F. 使用圆弧字符串实例化一个看起来是直线的几何对象
以下示例演示如何创建一个 CircularString
直线实例:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
另请参阅
空间数据类型概述CompoundCurveMakeValid(地理数据类型)MakeValid(几何数据类型)STIsValid(几何数据类型)STIsValid(地理数据类型)STLength(几何数据类型)STStartPoint(几何数据类型)STEndpoint(几何数据类型)STPointN(几何数据类型)STNumPoints(几何数据类型)STIsRing(几何数据类型)STIsClosed(几何数据类型)STPointOnSurface(几何数据类型)LineString