圆形字符串

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 声明和实例化几何图形实例

此代码片段演示如何使用同一geometryCircularString语句声明和实例化实例:

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