好贷网好贷款

[推荐] -------------我的一些笔记(六)(空间数据)(基于SQL 2008)--------- 20fredrickhu]

发布时间:2016-12-5 20:26:19 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"[推荐] -------------我的一些笔记(六)(空间数据)(基于SQL 2008)--------- 20fredrickhu]",主要涉及到[推荐] -------------我的一些笔记(六)(空间数据)(基于SQL 2008)--------- 20fredrickhu]方面的内容,对于[推荐] -------------我的一些笔记(六)(空间数据)(基于SQL 2008)--------- 20fredrickhu]感兴趣的同学可以参考一下。

本帖最后由 fredrickhu 于 2010-01-27 13:23:19 编辑 --SQL 2008使用空间数据 SQL SERVER 2008支持两种空间数据类型,geometry和geography.其中geometry数据类型支持平面或平面球数据,geography可用于存储GPS经度和纬度坐标等椭球体数据。 geometry和geography数据类型基于geometry层次结构。 ----point类型 在SQL SERVER的空间数据中,Point用于定义一个点。例如: declare @g geometry set @g=geometry::STGeomFromText('POINT(3,4)',0) 在本例中,字符串POINT(3,4)用于表示一个点,其中X坐标为3,Y坐标为4。 [email protected] select @g.Tostring() /* point(3,4) */ geometry变量的STX属性表示其X坐标值,[email protected]g的X和Y坐标值。 select @g.STX select @g.STY 也可以使用geometry::STPointFromText()方法根据指定格式的字符串生成POINT类型的geometry变量 declare @g geometry; set @g=geometry::STGeomFromText('POINT(3,4)',0); select @g.STX; select @g.STY; ----MultiPoint类型 在SQL SERVER的空间数据中,Point用于定义多个点。 declare @g geometry set @g=geometry::STGeomFromText('MultiPoint(3,4),(20 21),(1,2)',0) 使用STGeometryN()[email protected]g.STGeometryN(1) [email protected] declare @g geometry set @g=geometry::STGeomFromText('MultiPoint(3,4),(20 21),(1,2)',0) declare @i int set @i=1 print @g.tostring() [email protected]<4 begin   print @g.STGeometryN(@i).STX   print @g.STGeometryN(@i).STY   set @[email protected]+1 end /*   MultiPoint(3,4),(20 21),(1,2)   3   4   20   21   1   2 */ ----LineString类型 在SQL SERVER的空间数据中,LineString是一维对象,用于表示一系列点和连接这些点的线段。 下面的语句声明一个包含3个点的LineString类型的geometry对象。 declare @g geometry set @g=geometry::STGeomFromText('LineString(3 4, 20 21,1 2)',4322) 使用STNumPoints()方法可以返回构成实例的点数。 declare @g geometry set @g=geometry::STGeomFromText('LineString(3 4, 20 21,1 2)',4322) select @g.STNumPoints() /* 3 */ 使用STPointN()方法可以获取LineString中指定的点。 declare @g geometry set @g=geometry::STGeomFromText('LineString(3 4, 20 21,1 2)',4322) declare @i int set @i=1 while @i<[email protected]()[email protected]()表示最后一个点 begin     select @g.STPointN(@i).ToString()     set @[email protected]+1 end /*  3 4  20 21  1  2 */ ----MultiLineString类型 在SQL SERVER的空间数据中,MultiLineString用于定义多个线段对象,即多个LineString. declare @g geometry set @g=geometry::STGeomFromText('MultiLineString((3 4,20 21),(21 22, 1 2))',13); ----Polygon类型 在SQL SERVER的空间数据中,Polygon是右一系列点和线段组成的二维图形(多边形).这些点和线段可以定义一个外部的边界环。也可以 在外部边界环的内部定义零个或者多个内部环。 declare @g geometry; set @g=geometry::STPolyFromText('Polygon((0 0,0 3,3 3,3 0,0 0),(1 1, 1 2, 2 1, 1 1))',10); Polygon对象的方法 1.STExteriorRing方法 使用STExteriorRing可以返回Polygon对象的外环。 declare @g geometry; set @g=geometry::STPolyFromText('Polygon((0 0,0 3,3 3,3 0,0 0),(1 1, 1 2, 2 1, 1 1))',10); select @g.STExteriorRing().tostring(); /* LINESTRING(0 0, 0 3, 3 3, 3 0, 0 0) */ 2.STNumterioring方法 使用STNumterioring方法可以获取Polygon对象中包含的内环的数量。 declare @g geometry; set @g=geometry::STPolyFromText('Polygon((0 0,0 3,3 3,3 0,0 0),(1 1, 1 2, 2 1, 1 1))',10); select @g.STExteriorRing().tostring(); /* 1 */ 3.STInteriorRingN方法 使用STInteriorRingN方法可以获取Polygon对象中包含的内环对象,即LineString对象。 declare @g geometry; set @g=geometry::STPolyFromText('Polygon((0 0,0 3,3 3,3 0,0 0),(1 1, 1 2, 2 1, 1 1))',10); select @g.STExteriorRing().tostring(); declare @i int set @i=1 whlie @i<[email protected]() begin    select @g.STInteriorRingN(@i).tostring()   set @[email protected]+1 end /* LINESTRING(1 1,1 2, 2 1,1 1) */ ----MultiPolygon类型 在SQL SERVER的空间数据中,MultiPolygon用于定义多个多边形,即多个Polygon. declare @g geometry; set @g=geometry::Parse('MultiPolygon(((0 0,0 3, 3 3,3 0,0 0),(1 1,1 2,2 1,1 1)),((9 9,9 10,10 9,9 9))))'); 使用STGeometryN(1)[email protected]tiPolygon对象中所有多边形的字符串信息 declare @g geometry; set @g=geometry::Parse('MultiPolygon(((0 0,0 3, 3 3,3 0,0 0),(1 1,1 2,2 1,1 1)),((9 9,9 10,10 9,9 9))))'); declare @i int set @i=1 print @g.tostring() while @i<3 begin    print @g.STGeometryN(@i).tostring();    set @[email protected]+1 end /* MultiPolygon(((0 0,0 3, 3 3,3 0,0 0),(1 1,1 2,2 1,1 1)),((9 9,9 10,10 9,9 9)))) Polygon((0 0,0 3, 3 3,3 0,0 0),(1 1,1 2,2 1,1 1)) Polygon((9 9,9 10,10 9,9 9)) */ ----GeometryCollection类型 在SQL SERVER的空间数据中,GeometryCollection用于定义零个或者多个geometry或geography实例的集合。 比如: declare @g geometry; set @g=geometry::STPolyFromText('GeometryCollection(point(3 21),Polygon((0 0,0 3,3 3,3 0,0 0)))',1); 上面的例子中表示2个geometry实例,一个Point实例,一个Polygon实例。 使用STNumGeometyies()方法可以获取集合中包含的几何图形数量。 declare @g geometry; set @g=geometry::STPolyFromText('GeometryCollection(point(3 21),Polygon((0 0,0 3,3 3,3 0,0 0)))',1); select @g.STNumGeometyies() /* 2 */ 使用STGeometryN()方法可以获取GeometryCollection类型数据中指定的几何图形实例。例如STGeometryN(1)[email protected] declare @g geometry; set @g=geometry::STPolyFromText('GeometryCollection(point(3 21),Polygon((0 0,0 3,3 3,3 0,0 0)))',1); declare @i int set @i=1 print @g.Tostring() while @i<[email protected](@i).Tostring(); set @[email protected]+1 end /* GeometryCollection(point(3 21),Polygon((0 0,0 3,3 3,3 0,0 0))) point(3 21) Polygon((0 0,0 3,3 3,3 0,0 0))) */

好深奥。。 up 

.

SF 坐下慢慢看!

丫的 有没有搞GIS的出来讨论下?

引用 4 楼 fredrickhu 的回复:丫的 有没有搞GIS的出来讨论下? ...

真好,慢慢看!

引用 1 楼 feixianxxx 的回复:好深奥。。 up 好深.........

好深.........

UP

哈哈哈

学习

拿分走人 

接分~~~`

帮你顶,接分

是啊

JF

开发图形界面的数据类型

该回复于2010-01-27 16:09:35被版主删除

up

.

上次不是有个兄弟问这两个类型吗?

jf

太深奥了 sqlserver2005还没通了 啊

唔。。。。这么多带勋章的回复的说。。。。。。。

学习了。

顶一个,好好的

学习了。。。

结帖率:99.40%

学习了。。。

数据库研究不是很深,呵呵,学习啦

眼睛都花了。谢谢楼主

该回复于2010-01-28 14:03:56被版主删除

不懂GIS。貌似搞勘探的能用

学习

引用 34 楼 netcup 的回复:不懂GIS。貌似搞勘探的能用 不会吧

引用 4 楼 fredrickhu 的回复:丫的 有没有搞GIS的出来讨论下?看到了lz 侠女的风范

jf

这需要慢慢看。。。学习了

mark

深奥。。。

该回复于2010-12-02 13:08:27被版主删除

学习

该回复于2010-08-02 14:08:50被版主删除

比较深奥,谢谢版主,您辛苦了!

学习~

不错 学习下

很深奥…………………………

该回复于2010-01-29 17:16:11被版主删除

该回复于2010-01-30 03:40:50被版主删除

看不懂!哎~~学习!

up

蹲下慢慢看!

学习

没看懂

很牛,学习下

引用 22 楼 fredrickhu 的回复:上次不是有个兄弟问这两个类型吗? ....

纯学习

学习了

数据库  命根子啊

SQL SERVER的空间数据中,LineString是一维对象,用于表示一系列点和连接这些点的线段。 下面的语句声明一个包含3个点的LineString类型的geometry对象。 declare @g geometry set @g=geometry::STGeomFromText('LineString(3 4, 20 21,1 2)',4322) 使用STNumPoints()方法可以返回构成实例的点数。 declare @g geometry

等有时间我一定来跟你好好学一学

该回复于2010-02-01 10:08:38被版主删除

lz有心人,rp++

这里真是高手如云!

兰州好人。学习了

declare @g geometry set @g=geometry::STGeomFromText('POINT(3,4)',0) 拷贝你的代码在2008上执行报错: 消息 6522,级别 16,状态 1,第 2 行 在执行用户定义例程或聚合 "geometry" 期间出现 .NET Framework 错误:  System.FormatException: 24141: 输入的位置 9 处应为数字,但实际为 ,4。 System.FormatException:     在 Microsoft.SqlServer.Types.OpenGisWktReader.RecognizeDouble()    在 Microsoft.SqlServer.Types.OpenGisWktReader.ParsePointText(Boolean parseParentheses)    在 Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type)    在 Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid)    在 Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid)    在 Microsoft.SqlServer.Types.SqlGeometry.STGeomFromText(SqlChars geometryTaggedText, Int32 srid) 。 帮忙分析下?

这几天正好要弄空间数据库这块,正好用得着,收藏了。

好,一直想找空间数据的操作的,真是帮了大忙,不过我的出现了错误 在执行用户定义例程或聚合 "geometry" 期间出现 .NET Framework 错误:  System.FormatException: 24141: 输入的位置 9 处应为数字,但实际为 ,2。 System.FormatException:     在 Microsoft.SqlServer.Types.OpenGisWktReader.RecognizeDouble()    在 Microsoft.SqlServer.Types.OpenGisWktReader.ParsePointText(Boolean parseParentheses)    在 Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type)    在 Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid)    在 Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid)    在 Microsoft.SqlServer.Types.SqlGeometry.STGeomFromText(SqlChars geometryTaggedText, Int32 srid) 。

今天刚发现2008有这东西

上一篇:【常见的SQL Server连接失败错误以及解决方法】 100feixianxxx]
下一篇:sqlserver 2008 中的analyzer怎么使用 30ShaoAdams]

相关文章

相关评论