извините за поздний ответ.Вы всегда можете написать свой собственный Определяемый пользователем тип , называемый Круг , с двумя свойствами, а именно: Центроид и Радиус .
Внутри недавно сформированного UDT создайте метод, который принимает свойства Centroid ( Point3D ) и Radius ( Double ).После этого создайте метод, который использует SqlGeometry и SqlGeometryBuilder для построения вновь сформированного объекта.
Сначала создайте Point экземпляр Геометрия .Унаследуйте значения Centroid от объекта класса, затем создайте еще одну Geometry Polygon , полученную из объекта Point и STBuffer ( Радиус ) it.
Ниже приведен мой пример: (записано за 30 минут)
public SqlGeometry ToSQLGeometry()
{
int srid = this.SRID; // i.e. 4326
SqlGeometry geom = new SqlGeometry();
SqlGeometryBuilder gb = new SqlGeometryBuilder();
OpenGisGeometryType pt = OpenGisGeometryType.Point;
gb.SetSrid(srid);
gb.BeginGeometry(pt);
gb.BeginFigure(this.Centroid.X, this.Centroid.Y, this.Centroid.Z, this.Centroid.M);
gb.EndFigure();
gb.EndGeometry();
geom = gb.ConstructedGeometry;
geom = geom.MakeValid(); // Optional for Point data
SqlGeometry geomCircle = new SqlGeometry();
geomCircle = geom.STBuffer(this.Radius);
return geomCircle;
}
Когда вы сделали это в VS2010, используя тип проекта CLR, выможет развернуть его в вашей базе данных.
В SQL вы можете вызвать объект как таковой: * Parse (XYZM, R)
declare @c Circle
set @c = Circle::Parse('5 6 7 8,2')
select 'Circle', @c.ToString(), @c.ToSQLGeometry()