Sql server 2008 使用geometry数据类型和WKT在sql server中存储三维形状

Sql server 2008 使用geometry数据类型和WKT在sql server中存储三维形状,sql-server-2008,3d,geometry,wkt,Sql Server 2008,3d,Geometry,Wkt,我正在研究SQLServer2008中的几何数据类型,它看起来很有趣,但文档似乎不太好。我是否能够以WKT格式存储圆锥体、圆柱体和球体?这些特征通常具有半径,而不是数百个点。据我所知,您必须使用外部应用程序将形状渲染为大量点。有关渲染圆的技术,请参见 一个可能考虑的是CLR PROC来呈现您需要的形状和带有索引的视图。我不知道它的性能如何,但它可能会起作用。据我所知,您必须使用外部应用程序将形状渲染为大量点。有关渲染圆的技术,请参见 一个可能考虑的是CLR PROC来呈现您需要的形状和带有索引的

我正在研究SQLServer2008中的几何数据类型,它看起来很有趣,但文档似乎不太好。我是否能够以WKT格式存储圆锥体、圆柱体和球体?这些特征通常具有半径,而不是数百个点。

据我所知,您必须使用外部应用程序将形状渲染为大量点。有关渲染圆的技术,请参见


一个可能考虑的是CLR PROC来呈现您需要的形状和带有索引的视图。我不知道它的性能如何,但它可能会起作用。

据我所知,您必须使用外部应用程序将形状渲染为大量点。有关渲染圆的技术,请参见


一个可能考虑的是CLR PROC来呈现您需要的形状和带有索引的视图。我不知道这会有多好,但它可能会起作用。

快速浏览了一下,在上找到了此MSDN页面。它涵盖了在WKT、WKB和XML(GML)中输入数据的所有方法,以及以人类可读形式查看数据的函数。它还包括MakeValid、STIsValid和STSrid


您可能会发现一些有用的SQL示例

快速浏览了一下,在上找到了此MSDN页面。它涵盖了在WKT、WKB和XML(GML)中输入数据的所有方法,以及以人类可读形式查看数据的函数。它还包括MakeValid、STIsValid和STSrid


您可能会发现有相当多的SQL示例很有用

很抱歉回复太晚。您始终可以编写自己的用户定义类型,称为,具有两个属性,即质心半径

在新形成的UDT中,创建一个采用质心(Point3D)和半径(Double)属性的方法。在此之后,创建一个方法,该方法使用SqlGeometrySqlGeometryBuilder来构建新形成的对象

首先,创建几何体的实例。从类对象继承质心值,然后创建另一个从点对象派生的几何体多边形,并STBuffer(半径)将其删除

下面是我的例子:(用30分钟写)

在VS2010中使用CLR项目类型完成此操作后,可以将其部署到数据库中

在SQL中,可以这样调用对象::Parse(xyzm,R)


很抱歉迟了答复。您始终可以编写自己的用户定义类型,称为,具有两个属性,即质心半径

在新形成的UDT中,创建一个采用质心(Point3D)和半径(Double)属性的方法。在此之后,创建一个方法,该方法使用SqlGeometrySqlGeometryBuilder来构建新形成的对象

首先,创建几何体的实例。从类对象继承质心值,然后创建另一个从点对象派生的几何体多边形,并STBuffer(半径)将其删除

下面是我的例子:(用30分钟写)

在VS2010中使用CLR项目类型完成此操作后,可以将其部署到数据库中

在SQL中,可以这样调用对象::Parse(xyzm,R)


谢谢你的链接!似乎几何体类型不是我要寻找的,因为我不想将其近似存储为数百个点。如果我要使用它,我可能只会使用几何来存储中心点,并将半径作为一个单独的字段。接受,因为博客文章显示数据类型不适合我。感谢链接!似乎几何体类型不是我要寻找的,因为我不想将其近似存储为数百个点。如果我要使用它,我可能只会使用几何来存储中心点,并将半径作为一个单独的字段。接受,因为博客帖子显示数据类型不适合我。
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;
    }
declare @c Circle
set @c = Circle::Parse('5 6 7 8,2')
select 'Circle', @c.ToString(), @c.ToSQLGeometry()