Go to content Go to navigation and search

Home

Current SQL Server Blog Articles


Search

Browse

RSS / Atom

Email me

textpattern

Creative Commons License
All Blog Articles, Data Models and Free Source Code by Simon Greener, The SpatialDB Advisor is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

COGO: Compute arc length subtended by angle centre of circle

Thursday May 05 2011 at 11:27

In working with circles (and circular arcs) in spatial data one must be able to compute the length of an arc defined by an angle subtended at the centre of a circle.

In particular this is important for converting circles to vertex-stroked polygons and vice versa.

Here is an encoding of the calculation of the length of a arc defined by an angle subtended at the centre of a circle for use in SQL Server 2008 spatial.

Note that I have a schema call cogo in which I create functions like this. You can use anything you like.

/* ----------------------------------------------------------------------------------------
* @function   : ComputeArcLength
* @precis     : Computes the length of the arc on the circumference of a circle subtended 
*               at its centre by the the supplied angle
* @version    : 1.0
* @usage      : FUNCTION ComputeArcLength( @p_dRadius Float,
*                                               @p_dAngle Float)
*                        RETURNS INTEGER 
*               eg select cogo.ComputeArcLength(10,90.0) as arcLength;
* @param      : @p_dRadius  : Radius of Circle
* @paramtype  : @p_dRadius  : Float
* @param      : @p_dAngle   : Angle subtended at centre of circle expressed as 
*                             degree value > 0 and <= 360
* @paramtype  : @p_dAngle   : Float
* @return     : ArcLength   : the length of the arc on the circumference subtended by the supplied angle
* @rtnType    : ArcLength   : INTEGER
* @note       : Does not throw exceptions
* @note       : Assumes planar projection eg UTM.
* @history    : Simon Greener - Feb 2005 - Original coding.
* @history    : Simon Greener - May 2011 - Converted for use in TSQL
  * @copyright  : Licensed under a Creative Commons Attribution-Share Alike 2.5 Australia License. (http://creativecommons.org/licenses/by-sa/2.5/au/)
*/
Create Function cogo.ComputeArcLength(@p_dRadius Float,
                                      @p_dAngle  Float)
Returns Float
AS
BEGIN
   DECLARE
      @dArc      Float,
      @dAngleRad Float;
   BEGIN
      SET @dAngleRad = RADIANS(@p_dAngle);
      SET @dArc      = @p_dRadius * @dAngleRad;
      Return @dArc;
   END;
END
GO

An example of how to execute this function is as follows:

select ( 2 * PI() * 10 ) as circumference,
       cogo.ComputeArcLength(10,90.0) as arcLength,
       cogo.ComputeArcLength(10,90.0) / ( 2 * PI() * 10 ) as ratio;

circumference arcLength ratio
62.8318530717959 15.707963267949 0.25


I hope this helps someone.

Creative Commons License

post this at del.icio.uspost this at Diggpost this at Technoratipost this at Redditpost this at Farkpost this at Yahoo! my webpost this at Windows Livepost this at Google Bookmarkspost this to Twitter

Comment