Sql server 2008 使用geometry数据类型和WKT在sql server中存储三维形状
我正在研究SQLServer2008中的几何数据类型,它看起来很有趣,但文档似乎不太好。我是否能够以WKT格式存储圆锥体、圆柱体和球体?这些特征通常具有半径,而不是数百个点。据我所知,您必须使用外部应用程序将形状渲染为大量点。有关渲染圆的技术,请参见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来呈现您需要的形状和带有索引的
一个可能考虑的是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)属性的方法。在此之后,创建一个方法,该方法使用SqlGeometry和SqlGeometryBuilder来构建新形成的对象 首先,创建几何体的点实例。从类对象继承质心值,然后创建另一个从点对象派生的几何体多边形,并STBuffer(半径)将其删除 下面是我的例子:(用30分钟写) 在VS2010中使用CLR项目类型完成此操作后,可以将其部署到数据库中 在SQL中,可以这样调用对象::Parse(xyzm,R)
很抱歉迟了答复。您始终可以编写自己的用户定义类型,称为圆,具有两个属性,即质心和半径 在新形成的UDT中,创建一个采用质心(Point3D)和半径(Double)属性的方法。在此之后,创建一个方法,该方法使用SqlGeometry和SqlGeometryBuilder来构建新形成的对象 首先,创建几何体的点实例。从类对象继承质心值,然后创建另一个从点对象派生的几何体多边形,并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()