Sql 创建椭圆地理表示

Sql 创建椭圆地理表示,sql,tsql,sql-server-2008-r2,spatial,sqlgeography,Sql,Tsql,Sql Server 2008 R2,Spatial,Sqlgeography,我希望在SQLServer2008R2中创建一个表示椭圆的空间对象 我有点坐标,最小值和长轴值 我能找到的最接近的内置函数是STBuffer,它在点周围创建了一个缓冲半径,但并不能完全满足我的要求,例如: DECLARE @g geography; SET @g = geography::STGeomFromText('POINT(-122.360 47.656)', 4326); SELECT @g.STBuffer(5); 我错过什么了吗?这似乎很基本 我真的不想创建一组多边形坐标来表示这

我希望在SQLServer2008R2中创建一个表示椭圆的空间对象

我有点坐标,最小值和长轴值

我能找到的最接近的内置函数是STBuffer,它在点周围创建了一个缓冲半径,但并不能完全满足我的要求,例如:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.360 47.656)', 4326);
SELECT @g.STBuffer(5);
我错过什么了吗?这似乎很基本

我真的不想创建一组多边形坐标来表示这个形状——这看起来太过分了


提前谢谢。

这是不可能的。我通过在C#中创建WKT多边形字符串表示法解决了这个问题

总结公式如下:

var step = 2*Math.PI/40; // creates 40 points (1 for each "step")
var radians = 5.868;
var semiMajMetres = 400;
var semiMinMetres = 200;
var latMetres = latVal*110575; // converts degree value to metres value
var lonMetres = lonVal*111303; // assumes you have variables with these known values

for(double theta = 0; theta <= 2 * Math.PI; theta += step)
{
    var lon = lonMetres + semiMajMetres * Math.Cos(theta) * Math.Cos(radians) - semiMinMetres * Math.Sin(theta) * Math.Sin(radians);
    var lat = latMetres + semiMajMetres * Math.Cos(theta) * Math.Sin(radians) + semiMinMetres * Math.Sin(theta) * Math.Cos(radians);

    lat /= 110575; // convert metres back to degrees
    lon /= 111303;

    // Create your POLYGON string with these values in format POLYGON((lon lat, lon lat, lon lat, lon lat))
    // Note that the last coordinate set MUST be identical to the first coordinate set - confirm this and rectify the last coordinate double precision, if required
}

魔法数字110575和111303来自哪里?此外,是否有必要将乘法与除法相加?纬度和经度转换需要110575和111303-请参阅以下内容了解更多信息-
DECLARE @g geography;
SET @g = geography::STPolyFromText('POLYGON(([lonValue] [latValue], POINT([lonValue] [latValue], POINT([lonValue] [latValue], POINT([lonValue] [latValue]))', 4326);
SELECT @g;