日期:2014-05-18 浏览次数:20520 次
--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。 使用下面的语句可以打印geometry变量@g的内容。 select @g.Tostring() /* point(3,4) */ geometry变量的STX属性表示其X坐标值,STY属性表示其Y坐标值。使用下面的语句可以打印@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()方法可以获取MultiPoint类型数据中的一个点。例如@g.STGeometryN(1) 表示@g中的第一个点. declare @g geometry set @g=geometry::STGeomFromText('MultiPoint(3,4),(20 21),(1,2)',0) declare @i int set @i=1 print @g.tostring() whlie@i<4 begin print @g.STGeometryN(@i).STX print @g.STGeometryN(@i).STY set @i=@i+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<=@g.STNumPoints()--@g.STNumPoints()表示最后一个点 begin select @g.STPointN(@i).ToString() set @i=@i+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<=@g.STNumterioring() begin select @g.STInteriorRingN(@i).tostring() set @i=@i+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