设为首页 收藏本站
查看: 1794|回复: 0

[经验分享] SQL Server 2008之空间数据应用(二)

[复制链接]

尚未签到

发表于 2015-6-29 15:38:30 | 显示全部楼层 |阅读模式
  在SQL Server 2008之空间数据应用(一)中概略的介绍了SQL Server 2008中支持的两种空间数据类型:Geometry和Geography。
  SQL Server 2008中的空间数据类型遵循Open Geospatial Consortium, Inc.(OGC)的《Simple Feature Access》规范标准,你可以在其网站上下载到该标准的详细文件。
  空间数据的具体类型
  在SQL Server 2008中,Geometry和Geography支持十一种空间数据对象或实例类型。下图所示是可实例化类型(以蓝色背景显示)和其抽象基类(以黄色背景显示)的继承关系图。可实例化类型以蓝色背景显示,共7个,它们分别是Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。
DSC0000.png
  在SQL Server 2008之空间数据应用(一)中也看到了,在定义数据字段的类型时,只提供Geometry和Geography两种,那又是如何来表示上述7中具体的可实例化类呢?这是SQL Server内部机制实现的。表中的一列,它可以混杂多种不同的地理空间信息。某一行可能表示湖北省国土区域,某一行表示从我老家至华中师范大学的行车路线,某一行表示大别山区的一处名胜古迹......
  Point:用X、Y坐标来表示一个确切的位置,作为可选的,可以包含Z值和M值,它是一个零维对象。Point实例没有长度、面积等信息,它是构成其它复杂对象的基础。
  
  LineString:线段是两点间的最短路径。LineString表示一系列的点和连接这些点的线段。它是一个一维对象,具备长度信息,但没有面积信息。
  Polygon:Polygon是由一个环(Ring)所定义的闭合的二维图形。具备长度和面积信息。Polygon是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个Polygon实例。Polygon实例也可以为空。Polygon的外部环和任意内部环定义了其边界。环内部的空间定义了Polygon的内部。Polygon的内部环在单个切点处既可与自身接触也可彼此接触,但如果Polygon的内部环交叉,则该实例无效。
  GeomCollection:除了单实例类型(上述Point、LineString、Polygon三种)之外,还有一种可以表示实例集合的类型。表示这种集合类型的基类是GeomCollection,其实例对象可以是多种单实例类型实例的集合。
  Multipoint:继承自GeomCollection,是零个点或多个点的集合。
  MultiLineString:继承自GeomCollection,是零个或多个geometry或geography LineString实例的集合。
  MultiPolygon:继承自GeomCollection,是零个或多Polygon实例的集合。
  用T-SQL表达空间数据
  任何变量、参数、或者表中的某一列都可以声明为Geometry类型,类型名称是不区分大小写的。Geometry本身是一个抽象类型,必须实例化Geometry的一个可创建的子类来实现空间数据的功能。根据OGC标准,可使用STGeomFromText()静态方法来解析WKT所提供的数据,并根据数据识别出对应的类型。请注意在SQL语法中,CLR方法都是大小写敏感的。
  在.NET下用C#或者VB.NET进行编码时候,通常使用一个圆点符号(.)来请求一个方法,然而在T-SQL中并非如此。在T-SQL中,请求从属于某类型的静态方法是用双冒号(::)。
  示例1——使用Parse()创建Point



DECLARE @g geometry;
SET @g = geometry::Parse('POINT(3 4 7 2.5)');
SELECT @g;
PRINT @g.STX;
PRINT @g.STY;
PRINT @g.Z;
PRINT @g.M;

  定义了一个点,X和Y坐标分别是3和4,Z为7,M为2.5。
  示例2——使用STGeomFromText()创建LineString



DECLARE @g geometry;
SET @g = Geometry::STLineFromText('LINESTRING(0 8, 6 8, 0 0,6 0)',0)
SELECT @g
PRINT @g.STLength() -- Result: 22

  执行结果如下图所示。结果选项卡中显示的是LineString对象在SQL Server中的二进制表示;空间结果选项卡是该对象的实际图形;消息窗口中是执行该语句所返回的消息,该语句中使用STLength()获取该LineString的长度,结果为22。
DSC0001.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81600-1-1.html 上篇帖子: SQL Server日志清空方法 . 下篇帖子: SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表