CircularString

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

CircularString 是零个或多个连续圆弧线段的集合。 圆弧线段是二维平面中由三个点定义的曲线段;第一个点不能与第三个点相同。 如果圆弧线段的所有三个点共线,则将该圆弧线段视为一条直线段。

CircularString 实例

下面的图形显示了有效的 CircularString 实例:

CircularString 示例

接受的实例

如果 CircularString 实例为空或包含奇数点,则接受该实例,其中 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)。

示例

A. 使用空的 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∏,这是圆的实际周长。

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 实例化一个地域实例

下面的示例演示如何使用 geography 声明和实例化 CircularString实例:

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 实例化一个几何图形实例

下面的示例演示如何创建一个直线 CircularString 实例:

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

另请参阅

空间数据类型概述
CompoundCurve
MakeValid(geography 数据类型)
MakeValid(geometry 数据类型)
STIsValid(geometry 数据类型)
STIsValid(geography 数据类型)
STLength(geometry 数据类型)
STStartPoint(geometry 数据类型)
STEndpoint(geometry 数据类型)
STPointN(geometry 数据类型)
STNumPoints(geometry 数据类型)
STIsRing(geometry 数据类型)
STIsClosed(geometry 数据类型)
STPointOnSurface(geometry 数据类型)
LineString