SQL Server Denali supports several new types of spatial geometry, including the CircularString. The CircularString, like the LineString, is an instantiable geometry derived from the abstract curve class. However, unlike the LineString which uses linear interpolation to connect points using straight lines, the paths drawn between the points of a CircularString are circular arcs.
Since there are an infinite number of circular arcs that can be drawn to connect two points, whereas a LineString can consist of only two points, a CircularString must contain at least 3 points – a start point, end point, and an “anchor” point that lies somewhere on the circular arc between the start and end points.
Here’s an example of the WKT for a basic CircularString:
CIRCULARSTRING(1 5, 6 2, 7 3)
and here’s the Circular String it represents (grey dotted line added just to illustrate the complete circle from which the arc is formed):
Here’s another CircularString between the same start and end points, but this time the anchor point has been placed at (5,5) instead:
CIRCULARSTRING(1 5, 5 5, 7 3)
Each additional segment added to the CircularString requires an additional two points – one end point to determine where the segment ends, and one “anchor” point to determine which circular arc path is used to get there. It is worth noting that to define a complete circle requires 5 points (not 3, as you might expect). This is because three points alone would not be sufficient to specify the orientation of the CircularString – it would be ambiguous as to whether the points should be traversed in clockwise or anti-clockwise order.
Instead you must define a circle as follows:
CIRCULARSTRING(4 1, 7 4, 4 7, 1 4, 4 1)
Compare this to geometry created if the same set of points were defined instead as a LineString:
LINESTRING(4 1, 7 4, 4 7, 1 4, 4 1)