10楼#
发布于:2011-11-28 16:40
<br/>
SQL Server 2008中支持的7种基础空间对象实例,分别为:点(Point)、点集合(MultiPoint )、线(LineString)、线集合(MultiLineString)、多边形(Polygon )、多边形集合(MultiPolygon)和空间集合(GeometryCollection)。本篇意在为大家介绍SQL Server 2008空间数据库系统组成部分中的基础空间对象以及系统内置的相关函数API,并就这些开发API进行介绍基于SQL Server 2008空间数据库系统的开发与应用。<br/> <br/> 一、点(Point)<br/> 在 SQL Server 空间数据中,Point 是表示单个位置的零维对象,可能包含 Z(仰角)和 M(度量)值。可以通过下面SQL创建一个点的示例,默认该点的SRID(空间引用标识)为0。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->DECLARE @p geometry;<br/>SET @p = geometry::Parse('POINT(30.6666587469201 104.062021177233)');<br/>select @p.STX AS X;<br/>select @p.STY AS Y; <br/> 如下SQL命令这创建了包含 Z(仰角)和 M(度量)值的点(Point)实例,其中 Z(仰角)和 M(度量)值可以显示的指定为“null”。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->DECLARE @g geometry;<br/>SET @g = geometry::Parse('POINT(30.6666587469201 104.062021177233 15 3.5)');<br/>--SET @g = geometry::Parse('POINT(30.6666587469201 104.062021177233 null null)');<br/>select @g.STX AS X<br/>select @g.STY AS Y<br/>select @g.Z as Z<br/>select @g.M as M <br/> <br/> 二、点集合(MultiPoint )<br/> MultiPoint 是零个点或更多个点的集合。MultiPoint 实例的边界为空。其实需要使用函数STGeomFromText()来格式化被定义的数据按照OGC标准输出WKT格式的空间数据结果,也可使用函数STMPointFromText()代替STGeomFromText()的使用,通过如下SQL命令可定义一个点集合对象实例,并使用函数STGeometryN()输出空间数据结果:<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->--创建点集合实例<br/>DECLARE @cd geometry;<br/>SET @cd = geometry::STGeomFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);<br/>--SET @cd = geometry::STMPointFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);<br/>select @cd.STGeometryN(1).STAsText() as 重庆;<br/>select @cd.STGeometryN(2).STAsText() as 成都;<br/>---------------------------------------------------------------------------------------<br/>执行输出结果:<br/> 重庆<br/>---------------------------------------------------------------------------------------<br/>POINT (30.6666587469201 104.062021177233)<br/> <br/> 成都<br/>---------------------------------------------------------------------------------------<br/> POINT (29.5076372217973 106.489384971208)<br/> <br/> 三、线(LineString)<br/> LineString 是一个一维对象,表示一系列点和连接这些点的线段。一个 LineString 实例必须由至少两个非重复点组成,也可以为空。线条描述了空间上的两个或多个点之间的距离,必须有两个端点,分别为:起止点(StartPoint)和终止点(EndPoint)。如下SQL命令实现了定义重庆到成都两点之间的线条:<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->DECLARE @cdline geometry;<br/>SET @cdline = geometry::STGeomFromText('LINESTRING(30.6666 104.06202, 29.50763 106.48938)', 4326);<br/>select @cdline.STAsText() as 重庆_成都<br/>-------------------------------------------------------------------------------------------<br/>重庆_成都<br/>-------------------------------------------------------------------------------------------<br/>LINESTRING (30.6666 104.06202, 29.50763 106.48938) <br/> 在SQL Server 2008的空间结果中所呈现的效果如下图所示:<br/> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/LineString.jpg" width="273" height="243"/> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/LineStringS.png" width="317" height="137"/><br/> <br/> 注:线条有多种外观呈现方式,有非闭合线条、闭合线条以及图形复杂的线条等多种情况出现。如上(右)图示。<br/> <br/> 四、线集合(MultiLineString)<br/> MultiLineString 是零个或更多 geometry 或 geography LineString 实例的集合。为使 MultiLineString 实例有效,该实例必须满足以下条件:<br/> 1、构成 MultiLineString 实例的所有实例必须都是有效的 LineString 实例。<br/> 2、在构成 MultiLineString 实例的 LineString 实例中,不能有两个实例在某一段间隔上重叠。LineString 实例只能与自身相交或接触,或者在有限数目的点上与其他 LineString 实例相交或接触。<br/> <br/> 通过如下SQL代码片段演示MultiLineString的具体使用:<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->DECLARE @ml geometry;<br/>--SET @ml = geometry::Parse('MULTILINESTRING((30.6666 104.06202, 29.50763 106.48938),(30.6666 104.06202,33.78142 105.97914))');<br/>SET @ml = geometry::STGeomFromText('MULTILINESTRING((30.6666 104.06202, 29.50763 106.48938),(30.6666 104.06202,33.78142 105.97914))',4326);<br/>--SET @ml.STSrid = 4326;<br/>select @ml;<br/>select @ml.STIsValid(); --验证ml对象是否为正确的空间对象 <br/> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/MulitiLineString.jpg" width="336" height="197"/><br/> 五、多边形(Polygon )<br/> Polygon 是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个 Polygon 实例。以下SQL命令演示了如何创建多边形以及求多边形的面积函数的应用。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->--创建多边形<br/>DECLARE @pg geometry;<br/>SET @pg = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10);<br/>select @pg;<br/>select @pg.STArea(); --求得多边形的面积 <br/> 六、多边形集合(MultiPolygon)<br/> 多边形集合(MultiPolygon )实例是零个或更多个 Polygon 实例的集合。下面的SQL命令演示了定义一个多边形集合对象并返回第一个对象的WKT。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->--创建多边形集合,并返回第一个多边形的WKT<br/>DECLARE @mpg geometry;<br/>SET @mpg = geometry::Parse('MULTIPOLYGON(((1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');<br/>SELECT @mpg.STGeometryN(1).STAsText();<br/>---------------------------------------------------------------------------------------------<br/>执行输出结果:<br/>POLYGON ((1 1, 1 2, 2 1, 1 1))<br/> <br/> 七、空间对象集合(GeometryCollection )<br/> GeometryCollection 是零个或更多个 geometry 或 geography 实例的集合。GeometryCollection 可以为空。以下SQL演示了定义一个带有一个点(Point)实例和一个多边形(Polygon)实例的空间对象集合对象。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->--空间集合<br/>DECLARE @ggc geometry;<br/>SET @ggc= geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(3 3 1), POLYGON((0 0 2, 1 10 3, 1 0 4, 0 0 2)))', 1);<br/>select @ggc;<br/>select @ggc.STAsText(); --输出WKT文本(不带Z,M值)<br/>select @ggc.ToString(); --输出对象原字符串(带Z,M值)<br/>---------------------------------------------------------------------------------------------<br/>执行输出结果:<br/>--------------------------------------------------------------------------------------------- 0x010000000105050000000000000000000840000000000000084000000000000000000000000000000000000000000000F03F0000000000002440000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000<br/>--------------------------------------------------------------------------------------------- GEOMETRYCOLLECTION (POINT (3 3), POLYGON ((0 0, 1 10, 1 0, 0 0)))<br/>--------------------------------------------------------------------------------------------- GEOMETRYCOLLECTION (POINT (3 3 1), POLYGON ((0 0 2, 1 10 3, 1 0 4, 0 0 2))) <br/> 八、SQL Server 2008函数应用<br/> SQL Server 2008中针对地理空间数据、对象、实例提供了非常丰富的内置函数,使用这些函数可以快速的完成一系列的空间数据分析。关于这些函数的具体使用这里就不逐一介绍,本文中也相应的使用了几个常用的OGC静态几何图形方法,以后的博文使用中会根据使用情况再做介绍,详细请大家查阅MSDN,本文末也提供了相关参考资料的链接。下面代码演示了测距重庆到成都两点之间坐标的距离(单位:米)。<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->DECLARE @chongqing geography = geography::Point(30.6666587469201,104.062021177233, 4326)<br/>DECLARE @chengdu geography = geography::Point(29.5076372217973, 106.489384971208, 4326)<br/>SELECT @chongqing.STDistance(@chengdu)<br/>-----------------------------------------------------------------------------------------<br/>执行结果为:266943.740244237 <br/> 九、相关资料<br/> [1]、空间数据库(百度百科):http://baike.baidu.com/view/1194566.htm<br/> [2]、使用空间数据实现位置智能:http://tech.ddvip.com/2008-04/120816526343873.html<br/> [3]、基础空间对象(MSDN):http://msdn.microsoft.com/de-de/library/bb964711.aspx<br/> [4]、几何实例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx<br/> [5]、几何图形实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx<br/> [6]、OGC 静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx<br/> [7]、扩展静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933805.aspx<br/> |
|
|
11楼#
发布于:2011-11-28 16:37
<font size="4"> 友情提示,您阅读本篇博文的先决条件如下:
1、本文示例基于Microsoft SQL Server 2008 R2调测。<br/> 2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。<br/> 3、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。<br/> 4、具备相应的GIS专业理论知识。<br/> 5、其他相关知识。<br/> <br/> <br/> SQL Server 2008为大地测量空间数据提供了geography数据类型,为平面空间数据提供了geometry数据类型。这两个都是Microsoft .NET Framework通用语言运行时(CLR)类型,并且可以用来存储不同种类的地理元素,例如点、线和多边形。这两个数据类型都提供了你可以用来执行空间操作的属性和方法,例如计算位置间的距离和找出两者间交叉的地理特性(例如一条河流经一个城镇)。本篇以SQL Server 2008的数据类型为核心内容,介绍其数据类型的支持以及新的空间数据类型的相关特性及基本应用。 <br/> <img border="0" alt="" src="http://www.microsoft.com/taiwan/sql2008/graphics/homepage/PublishingImages/scrn-planar-model.jpg" width="220" height="162"/><img border="0" alt="" src="http://www.microsoft.com/taiwan/sql2008/graphics/homepage/PublishingImages/scrn-geodetic-model.jpg" width="220" height="215"/><img border="0" alt="" src="http://www.microsoft.com/taiwan/sql2008/graphics/homepage/PublishingImages/scrn-spatial-dataframework.jpg" width="220" height="171"/><br/> <br/> 一、SQL Server 2008通用数据类型<br/> 在SQL Server 2008中的每个变量,参数都会被定义为一个特定的数据类型,这些特定的数据类型主要用于排序、存储等,在SQL Server 2008中的通用数据类型和SQL Server 2005一样,主要的几个通用数据类型为下表所示:<br/> 通用数据类型 数据类型 描述 char 固定长度字符串 datetime 日期时间类型字段 float 单精度字段 int 整型字段 money 货币类型 nvarchar 可变长字符型 <br/> 二、SQL Server 2008空间数据类型<br/> SQL Server 2008中出了兼容低版本的SQL数据库的通用数据类型和其他基础数据类型(比如:real、text等类型),新推出了两个用于支持空间数据存储的空间数据类型,分别为:大地向量空间类型(geography)和几何平面向量空间类型(geometry)。<br/> <br/> 1、geography数据类型<br/> 官方定义:geography数据类型为空间数据提供了一个由经度和纬度联合定义的存储结构。使用这种数据的典型用法包括定义道路、建筑、或者地理特性如可以覆盖到一个光栅图上的向量数据,它考虑了地球的弯曲性,或者计算真实的圆弧距离和空中传播轨道,而这些在一个平面模型中所存在的固有失真引起的错误程度是不可接受的。<br/> <br/> 2、geometry数据类型<br/> 官方定义:geometry数据类型为空间数据提供了一个存储结构,它是由任意平面上的坐标定义的。这种数据通常是用在区域匹配系统中的,例如由美国政府制定的州平面系统,或者是不需要考虑地球弯曲性的地图和内层布置图。geometry 数据类型提供了与开放地理空间联盟(OGC)Simple Features Specification for SQL标准结合的属性和方法,使得你可以对geometry数据执行操作以产生行业标准的行为。<br/> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/SDataTypeMap.jpg"/><br/> <br/> 虽然这两个数据类型都可以用于存储空间数据,在针对不同的空间数据的时候还是有所异同。如果我们需要自己基于SQL Server 2008来做空间数据定义,就需要根据不同的数据在这两种空间数据类型中作出正确的决策了,这点在以后的博文中会进行介绍,这里飘过。此两种空间类型是完美符合空间参照系统标准制定的,包括测距计量单位、空间引用索引、授权标准以及WKT等规范,如下SQL可查看对于空间数据类型所对于的空间引用索引标准中制定的地理空间测距计量单位:<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->SELECT<br/> unit_of_measure<br/>FROM<br/> sys.spatial_reference_systems<br/>WHERE<br/> authority_name = 'EPSG'<br/> AND<br/> authorized_spatial_reference_id = 4326<br/>------------------------------------------------------------<br/>执行结果:metre <br/> 三、空间数据的存储方式<br/> SQL Server 2008中的两种空间数据:大地向量空间类型(geography)和几何平面向量空间类型(geometry)都是可变长度的数据类型,这意味着它们相对于比如int或者datetime等固定长度的数据类型,其存储的数据占用空间根据所存储数据的复杂程度、数据描述文字等不同可自适应数据类型的长度变化。<br/> <br/> 空间数据类型字段的数据存储以8个字节的二进制格式存储,每条记录的数据的头部分就被定义好了空间数据的类型(点、线、面等类型),以及所使用的空间参考系统和地理坐标(经度、纬度)等值。通常情况下二进制数据内容越长所占用的空间数据存储空间就越大。<br/> <br/> 四、空间数据可视化<br/> 在 SQL Server 2008 中Microsoft 引入具有两个新的内置数据类型、 几何图形和地理空间数据支持。 尽管您可能 “ 看到 ” 数据空间列的二进制数据存储但还是不能直观的反应出空间数据的预览效果, SQL Server 2008 的SQL Server Management Studio 中提供了一个空间结果选项卡,专门用于可视化预览空间数据结果。<br/> <br/> 比如当前执行查询重庆大区边界的空间数据,那么对应于重庆大区边界数据库表可以执行以下SQL:<br/> <br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>-->SELECT [ID]<br/> ,[CODE]<br/> ,[ELEV]<br/> ,[NAME]<br/> ,[geom]<br/> FROM [BingMapsDB].[dbo].[CQ_Area_region] <br/> 得到相应的SQL查询记录结果和空间可视化结果为下图所示:<br/> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/SpdView.jpg" width="550" height="450"/> <br/> <br/> 五、参考资料<br/> [1]、空间数据(百度百科):http://baike.baidu.com/view/125911.htm<br/> [2]、空间数据可视化:http://msdn.microsoft.com/zh-cn/magazine/ee335706.aspx<br/> <br/> </font> [此贴子已经被作者于2011-11-28 16:38:12编辑过]
|
|
|
12楼#
发布于:2011-11-28 16:37
<font size="4"> 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体、基准、本初子午线、计量单位、投影等相关理论知识,我们可以使用这些空间参照系统组件来定义一系列应用于地球空间上的几何图像来表示地理空间中的特定功能,表示着地球上一个一个特定的位置点。
本篇主要介绍地理空间索引的概念以及微软SQL Server 2008 R2中的空间索引的应用。 </font><p><font size="4"> </font></p><font size="4"> </font><p><strong><font size="4">一、空间索引</font></strong></p><font size="4"> </font><p><font size="4"> 空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息。作为一种辅助性的空间数据结构,空间索引介于空间操作算法和空间对象之间,它通过筛选作用,大量与特定空间操作无关的空间对象被排除,从而提高空间操作的速度和效率。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 来至</font><a href="http://baike.baidu.com/view/1346795.htm"><font color="#1a8bc8" size="4">百科</font></a><font size="4">的定义:为便于空间目标的定位及各种空间数据操作,按要素或目标的位置和形状或空间对象之间的某种空间关系来组织和存储数据的结构。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 关于更多空间索引的知识点需要深入了解EPSG和SRID,本文主要介绍基于微软SQL Server 2008的空间数据特性实现介绍,故不详细介绍这些基础理论知识点,有兴趣的可以访问文末的推荐资料链接,了解更多关于EPSG核SRID的相关知识。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> SQL Server 2008中的空间数据类型作为CLR系统类型来执行。SQL Server 2008增加了数据库中的CLR类型的最大规模,提高了原来在SQL Server 2005中的8000字节的限制,这使得它可以存储非常复杂的空间数据元素,例如通过许多点定义的多边形。通过在关系表中存储空间数据,SQL Server 2008 使得可以结合空间数据到其他任何商业数据类型中去;这消除了对维护一个单独的只用于空间数据存储的维护要求,并使得可以做高性能查询,它不需要结合从多个外部来源获得的数据。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 在SQL Server 2008中对空间索引的支持进一步增强了对空间数据的查询操作。你可以用一个集成在SQL Server数据库引擎中的适合的多级网格索引来检索空间数据。空间索引包含一个基于网格的层级,在其中每一级索引又细分为由上一级所定义的网格区域。下图为官方给出的一个空间索引的概率模型图:</font></p><font size="4"> </font><p><font size="4"> <img border="0" alt="" src="http://img.ddvip.com/2008_04/1208165249_ddvip_3497.jpg" width="331" height="398"/></font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> SQL Server查询优化器会作出基于成本的决策,决定对给定的查询使用哪种索引,并且因为空间索引是数据库引擎的一个完整部分,可以作出关于是否使用特殊的空间索引的基于成本的决策,就像其它索引一样。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><strong><font size="4">二、SQL Server 2008的空间参考系统</font></strong></p><font size="4"> </font><p><font size="4"> 微软SQL Server 2008的空间系统表(实际上是一个系统视图)"sys.spatial_reference_systems"中存储了详细的支持所有大地测量空间参考系统标准,该表中的每一行数据对应于一个唯一的空间参考系统,可以基于这些空间参考系统在SQL Server 2008中来定义任何形式的空间数据。</font></p><font size="4"> </font><div class="cnblogs_code"><font size="4"> </font><div><!--<br/><br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>--><font size="4"><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);"> sys.spatial_reference_systems</span></font></div></div><font size="4"> </font><p><font size="4"> <img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/beniao/SpaitalData/SRID0.jpg" width="956" height="290"/></font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 系统表“sys.spatial_reference_systems”中实际上仅仅只是存储了应用于SQL Server 2008中地理参照坐标的参考系统,除了空间参考系统可以使用这张表中列出的参考系统标准,也可以基于这些标准来定义基于任何地理投影的空间数据。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><strong><font size="4"> 三、空间参照文本格式(WKT)</font></strong></p><font size="4"> </font><p><font size="4"> Well-Known Text (WKT) Representation of Spatial Reference Systems:顾名思义用众所周知的文字形式来描述看见坐标参考系统,它与EPSG(2005年已经换名)的坐标文字表述模型一致。WKT字符串应用于确定空间参考系统的组成部分的描述,其定义主要包含以下10项内容:</font></p><font size="4"> </font><p><font size="4"> 1、一个总体的坐标系名</font></p><font size="4"> </font><p><font size="4" face="宋体"> 2、一个地理图形坐标系统名<br/> 3、一个基准面定义<br/> 4、一个椭球体的名字。长半轴(semi-major axis)和反扁率(inverse flattening)<br/> 5、本初子午线(prime meridian)名和其与格林威治子午线的偏移值<br/> 6、投影方法类型(如横轴莫卡托)<br/> 7、投影参数列表(如中央经线等)<br/> 8、一个单位的名称和其到米和弧度单位的转换参数<br/> 9、轴线的名称和顺序<br/> 10、在预定义的权威坐标系中的编码(如EPSG)</font></p><font size="4"> </font><p><font face="宋体"></font><font size="4"> </font></p><font size="4"> </font><div class="cnblogs_code"><font size="4"> </font><div><!--<br/><br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>--><span style="color: rgb(0, 0, 255);"><font size="4">select</font></span><font size="4"><span style="color: rgb(0, 0, 0);"> well_known_text <br/> </span><span style="color: rgb(0, 0, 255);">from</span></font><font size="4"><span style="color: rgb(0, 0, 0);"> sys.spatial_reference_systems <br/> </span><span style="color: rgb(0, 0, 255);">where</span><span style="color: rgb(0, 0, 0);"> authorized_spatial_reference_id</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(128, 0, 0); font-weight: bold;">4326</span></font><font size="4"><span style="color: rgb(0, 0, 0);"> <br/> </span><span style="color: rgb(128, 128, 128);">and</span><span style="color: rgb(0, 0, 0);"> authority_name</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">EPSG</span><span style="color: rgb(255, 0, 0);">'</span></font></div></div><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 基于sys.spatial_reference_systems表定义了多种不同的空间参照系统的WKT描述,如上SQL语句查询出的是我们平时在地图应用开发中使用最多的EPSG:4326空间参照系统标准,则对于的WKT如下:</font></p><font size="4"> </font><div class="cnblogs_code"><font size="4"> </font><div><!--<br/><br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>--><font size="4"><span style="color: rgb(0, 0, 0);">GEOGCS</span><span style="color: rgb(255, 0, 0);">[</span></font><font size="4"><span style="color: rgb(255, 0, 0);">"WGS 84", <br/> DATUM["World Geodetic System 1984", <br/> ELLIPSOID["WGS 84", 6378137, 298.257223563</span><span style="color: rgb(255, 0, 0);">]</span></font><font size="4"><span style="color: rgb(0, 0, 0);">], <br/> PRIMEM</span><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">"Greenwich", 0</span><span style="color: rgb(255, 0, 0);">]</span></font><font size="4"><span style="color: rgb(0, 0, 0);">, <br/> UNIT</span><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">"Degree", 0.0174532925199433</span><span style="color: rgb(255, 0, 0);">]</span></font><span style="color: rgb(0, 0, 0);"><br/><font size="4"> ]</font></span></div></div><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 以上KWT字符串确定了EPSG:4326空间参照系统的组成部分元素描述,其主要使用了四种空间配置,分别为:基准(Datum)、椭圆(Ellipsoid)、本初子午线(Primem)和Unit(计量单位)。关于这些空间参考系统参数在上一篇文中中介绍过,这里就不在做重复介绍,以上KWT字符串表述的意思大致是这样的:“WGS 84坐标系,采用1984年订立的世界地理坐标系统标准,地理标准半径为:6378137........”。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><strong><font size="4">四、SQL Server 2008的空间索引</font></strong></p><font size="4"> </font><p><font size="4"> SQL Server 2008 引入了对空间数据和空间索引的支持。“空间索引”是一种扩展索引,允许您对空间列编制索引。空间列是包含空间数据类型(如 geometry 或 geography)数据的表列。本节中的主题介绍了空间索引。 </font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 在 SQL Server 2008 中,空间索引(存储在:sys.spatial_indexes表中)使用 B 树构建而成,也就是说,这些索引必须按 B 树的线性顺序表示二维空间数据。因此,将数据读入空间索引之前,SQL Server 2008 先实现对空间的分层均匀分解。索引创建过程会将空间分解<em></em>成一个四级“网格层次结构”<em></em>。这些级别指的是“第 1 级”<em></em>(顶级)、“第 2 级”<em></em>、“第 3 级”<em></em>和“第 4 级”<em></em>。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 每个后续级别都会进一步分解其上一级,因此上一级别的每个单元都包含下一级别的整个网格。在给定级别上,所有网格沿两个轴都有相同数目的单元(例如 4x4 或 8x8),并且单元的大小都相同。下图显示了网格层次结构每个级别的右上角单元被分解成 4x4 网格的情况。事实上,所有单元都是以这种方式分解的。因此,以此为例,将一个空间分解成四个级别的 4x4 网格际上会总共产生 65,536 个第四级单元。针对空间索引进行的空间分解与应用程序数据使用的度量单位无关。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><a href="http://images.cnblogs.com/cnblogs_com/TerryFeng/WindowsLiveWriter/SQLServer2008_E241/untitled.png"><font color="#1a8bc8" size="4"> <img style="border: 0px="0px" currentColor; display: inline;" title="untitled" border="0" alt="untitled" src="http://images.cnblogs.com/cnblogs_com/TerryFeng/WindowsLiveWriter/SQLServer2008_E241/untitled_thumb.png" width="429" height="216"/></font></a><font size="4"> </font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 网格层次结构的单元是利用多种 Hilbert 空间填充曲线以线性方式编号的。然而,出于演示目的,这里使用的是简单的按行编号,而不是由 Hilbert 曲线实际产生的编号。在下图中,几个表示建筑物的多边形和表示街道的线已经放进了一个 4x4 的 1 级网格中。第 1 级单元的编号为 1 到 16,编号从左上角的单元开始。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><a href="http://images.cnblogs.com/cnblogs_com/TerryFeng/WindowsLiveWriter/SQLServer2008_E241/untitle22d.png"><font color="#1a8bc8" size="4"> <img style="border: 0px="0px" currentColor; display: inline;" title="untitle22d" border="0" alt="untitle22d" src="http://images.cnblogs.com/cnblogs_com/TerryFeng/WindowsLiveWriter/SQLServer2008_E241/untitle22d_thumb.png" width="412" height="266"/></font></a><font size="4"> </font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 沿网格轴的单元数目确定了网格的“密度”<em></em>:单元数目越大,网格的密度越大。例如,8x8 网格(产生 64 个单元)的密度就大于 4x4 网格(产生 16 个单元)的密度。网格密度是以每个级别为基础定义的。网格配置单元数目低 :4X4 =16,中8X8 = 64,高16X16 =256,默认设置所有级别都为 <strong>中</strong>。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 您可以通过指定非默认的网格密度控制分解过程。例如,在不同级别指定不同网格密度对于基于索引空间的大小和空间列中的对象来优化索引可能非常有用。空间索引的网格密度显示在 sys.spatial_index_tessellations 目录视图的 level_1_grid、level_2_grid、level_3_grid 和 level_4_grid 列中。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 将索引空间分解成网格层次结构后,空间索引将逐行读取空间列中的数据。读取空间对象(或实例)的数据后,空间索引将为该对象执行“分割过程”<em></em>。分割过程<em></em>通过将对象与其接触的网格单元集(“接触单元”<em></em>)相关联使该对象适合网格层次结构。从网格层次结构的第 1 级开始,分割过程以“广度优先”<em></em>方式对整个级别进行处理。在可能的情况下,此过程可以连续处理所有四个级别,一次处理一个级别。</font></p><font size="4"> </font><p><font size="4"> </font></p><font size="4"> </font><p><font size="4"> 注:以上内容截取SQL Server 2008帮助文档,详细请查看联机帮助文档。<br/> </font></p><font size="4"> </font><p><strong><font size="4">五、相关资料</font></strong></p><font size="4"> </font><p><font size="4"> [1]、EPSG:</font><a href="http://en.wikipedia.org/wiki/European_Petroleum_Survey_Group"><font color="#1a8bc8" size="4">http://en.wikipedia.org/wiki/European_Petroleum_Survey_Group</font></a></p><font size="4"> </font><p><font size="4"> [2]、SRID:</font><a href="http://en.wikipedia.org/wiki/SRID"><font color="#1a8bc8" size="4">http://en.wikipedia.org/wiki/SRID</font></a></p><font size="4"> </font><p><font size="4"> [3]、WKT:</font><a href="http://en.wikipedia.org/wiki/Well-known_text"><font color="#1a8bc8" size="4">http://en.wikipedia.org/wiki/Well-known_text</font></a></p><font size="4"> </font><p><font size="4"> [4]、空间索引概论:</font><a href="http://www.cnblogs.com/terryfeng/archive/2009/05/27/1490803.html"><font color="#1a8bc8" size="4">http://www.cnblogs.com/terryfeng/archive/2009/05/27/1490803.html</font></a></p> |
|
|
上一页
下一页