关于geometry类型,求教高手 60u_zero]

发布时间:2016-12-10 16:47:32 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"关于geometry类型,求教高手 60u_zero]",主要涉及到关于geometry类型,求教高手 60u_zero]方面的内容,对于关于geometry类型,求教高手 60u_zero]感兴趣的同学可以参考一下。

我的数据库表中的一列类型是geometry的,用来存一条线。把数据读出来以后toString的结果是“LINESTRING (0.8157141 47.4624569, 0.8160616 47.4620566, 0.81627420000000006 47.4618914, 0.8165576 47.4617301, 0.8190376 47.4603279)”。我想找到这条线的起点和终点坐标,就是把string中的“0.8157141 47.4624569”这个点和“ 0.8190376 47.4603279”这个点给提取出来。因为数据库中存了很多线,长度是不定的,因此用string操作感觉很费劲。请问懂geometry类型的高手,C#里有没有什么数据类型是对应到SQL2008里的geometry的?比如我定义一个什么类型来存储这条线,然后读一下他的firstpoint和lastpoint属性就能把起点和终点提取出来,有没有像这样比较直接的方法? 请前辈们赐教 拜谢~~

没弄过这个,帮顶...........

有,你得安装Sql2008的扩展类型包才行,可以去M$免费下载 Microsoft.SqlServer.Types.dll 。是sql2008的扩展安装包。 顺便问下,楼主啥公司?在开发新的GIS软件吗

目前来说.net  中没有对应的数据类型。 1,可以设置两个参数是float类型的,存入的时候,转换为geo类型,用point函数。此时.net 中对应的double类型。 2,可以设置两个参数是nvarchar类型,存入的时候,转换为geo类型,用parse函数,此时。net对中对应的是string类型。 3,反向转换亦然。 ok,祝顺利。

帮顶不懂..................

引用 2 楼 ashei 的回复:有,你得安装Sql2008的扩展类型包才行,可以去M$免费下载 Microsoft.SqlServer.Types.dll 。是sql2008的扩展安装包。 顺便问下,楼主啥公司?在开发新的GIS软件吗 牛人啊,这个GIS的空间类型字段还真少见应用的,呵呵

引用 5 楼 netcup 的回复:引用 2 楼 ashei 的回复: 有,你得安装Sql2008的扩展类型包才行,可以去M$免费下载 Microsoft.SqlServer.Types.dll 。是sql2008的扩展安装包。 顺便问下,楼主啥公司?在开发新的GIS软件吗  牛人啊,这个GIS的空间类型字段还真少见应用的,呵呵 嘿嘿,多谢夸奖,那你们公司招人不拉

--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))) */

引用 2 楼 ashei 的回复:有,你得安装Sql2008的扩展类型包才行,可以去M$免费下载  Microsoft.SqlServer.Types.dll 。是sql2008的扩展安装包。  顺便问下,楼主啥公司?在开发新的GIS软件吗 先谢谢啦 我装了个sql2008系统CLR类型的扩展包,在SQLSERVER文件夹里面也找到Microsoft.SqlServer.Types.dll这个文件了,但是在C#里面却没法using Microsoft.SqlServer.Types(在 Microsoft.SqlServer下没有Types这个项.....)请问您是否知道这是什么问题啊?我用的VS2010,再谢

上一篇:sql2000server的DTS转到sql2008里面 0feixianxxx]
下一篇:select 分行语句看不懂 40teacherlxy]

相关文章

相关评论