SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用
原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

  友情提示,您阅读本篇博文的先决条件如下:

  1、本文示例基于Microsoft SQL Server 2008 R2调测。

  2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。

  3、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。

  4、具备相应(比如OGC)的GIS专业理论知识。

  5、其他相关知识。


 

  SQL Server 2008中支持的7种基础空间对象实例,分别为:点(Point)、点集合(MultiPoint )、线(LineString)、线集合(MultiLineString)、多边形(Polygon )、多边形集合(MultiPolygon)和空间集合(GeometryCollection)。本篇意在为大家介绍SQL Server 2008空间数据库系统组成部分中的基础空间对象以及系统内置的相关函数API,并就这些开发API进行介绍基于SQL Server 2008空间数据库系统的开发与应用。

  

一、点(Point)

  在 SQL Server 空间数据中,Point 是表示单个位置的零维对象,可能包含 Z(仰角)和 M(度量)值。可以通过下面SQL创建一个点的示例,默认该点的SRID(空间引用标识)为0。

DECLARE @p geometry;
SET @p = geometry::Parse('POINT(30.6666587469201 104.062021177233)');
select @p.STX AS X;
select @p.STY AS Y;

 

  如下SQL命令这创建了包含 Z(仰角)和 M(度量)值的点(Point)实例,其中 Z(仰角)和 M(度量)值可以显示的指定为“null”。

DECLARE @g geometry;
SET @g = geometry::Parse('POINT(30.6666587469201 104.062021177233 15 3.5)');
--SET @g = geometry::Parse('POINT(30.6666587469201 104.062021177233 null null)');
select @g.STX AS X
select @g.STY AS Y
select @g.Z as Z
select @g.M as M

 

二、点集合(MultiPoint

  MultiPoint 是零个点或更多个点的集合。MultiPoint 实例的边界为空。其实需要使用函数STGeomFromText()来格式化被定义的数据按照OGC标准输出WKT格式的空间数据结果,也可使用函数STMPointFromText()代替STGeomFromText()的使用,通过如下SQL命令可定义一个点集合对象实例,并使用函数STGeometryN()输出空间数据结果:

--创建点集合实例
DECLARE @cd geometry;
SET @cd = geometry::STGeomFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);
--SET @cd = geometry::STMPointFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);
select @cd.STGeometryN(1).STAsText() as 重庆;
select @cd.STGeometryN(2).STAsText() as 成都;
---------------------------------------------------------------------------------------
执行输出结果:

重庆
---------------------------------------------------------------------------------------
POINT (30.6666587469201 104.062021177233)

 

成都
---------------------------------------------------------------------------------------

POINT (29.5076372217973 106.489384971208)

 

 三、线(LineString)

   LineString 是一个一维对象,表示一系列点和连接这些点的线段。一个 LineString 实例必须由至少两个非重复点组成,也可以为空。线条描述了空间上的两个或多个点之间的距离,必须有两个端点,分别为:起止点(StartPoint)和终止点(EndPoint)。如下SQL命令实现了定义重庆到成都两点之间的线条:

DECLARE @cdline geometry;
SET @cdline = geometry::STGeomFromText('LINESTRING(30.6666 104.06202, 29.50763 106.48938)'4326);
select @cdline.STAsText() as 重庆_成都
-------------------------------------------------------------------------------------------
重庆_成都
-------------------------------------------------------------------------------------------
LINESTRING (30.6666 104.0620229.50763 106.48938)

 

  在SQL Server 2008的空间结果中所呈现的效果如下图所示:

            

 

  注:线条有多种外观呈现方式,有非闭合线条、闭合线条以及图形复杂的线条等多种情况出现。如上(右)图示。

 

四、线集合(MultiLineString)

  MultiLineString 是零个或更多 geometry 或 geography LineString 实例的集合。为使 MultiLineString 实例有效,该实例必须满足以下条件:

  1、构成 MultiLineString 实例的所有实例必须都是有效的 LineString 实例。

  2、在构成 MultiLineString 实例的 LineString 实例中,不能有两个实例在某一段间隔上重叠。LineString 实例只能与自身相交或接触,或者在有限数目的点上与其他 LineString 实例相交或接触。

 

  通过如下SQL代码片段演示MultiLineString的具体使用:

DECLARE @ml geometry;
--SET @ml = geometry::Parse('MULTILINESTRING((30.6666 104.06202, 29.50763 106.48938),(30.6666 104.06202,33.78142 105.97914))');
SET @ml = geometry::STGeomFromText('MULTILINESTRING((30.6666 104.06202, 29.50763 106.48938),(30.6666 104.06202,33.78142 105.97914))',4326);
--SET @ml.STSrid = 4326;
select @ml;
select @ml.STIsValid();   --验证ml对象是否为正确的空间对象

 

        

五、多边形(Polygon

   Polygon 是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个 Polygon 实例。以下SQL命令演示了如何创建多边形以及求多边形的面积函数的应用。

--创建多边形
DECLARE @pg geometry;
SET @pg = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))'10);
select @pg;
select @pg.STArea(); --求得多边形的面积

 

 六、多边形集合(MultiPolygon

   多边形集合(MultiPolygon )实例是零个或更多个 Polygon 实例的集合。下面的SQL命令演示了定义一个多边形集合对象并返回第一个对象的WKT。

--创建多边形集合,并返回第一个多边形的WKT
DECLARE @mpg geometry;
SET @mpg = geometry::Parse('MULTIPOLYGON(((1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');
SELECT @mpg.STGeometryN(1).STAsText();
---------------------------------------------------------------------------------------------
执行输出结果:
POLYGON ((
1 11 22 11 1))

 

七、空间对象集合(GeometryCollection )

  GeometryCollection 是零个或更多个 geometry 或 geography 实例的集合。GeometryCollection 可以为空。以下SQL演示了定义一个带有一个点(Point)实例和一个多边形(Polygon)实例的空间对象集合对象。

--空间集合
DECLARE @ggc geometry;
SET @ggc= geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(3 3 1), POLYGON((0 0 2, 1 10 3, 1 0 4, 0 0 2)))'1);
select @ggc;
select @ggc.STAsText();        --输出WKT文本(不带Z,M值)
select @ggc.ToString();        --输出对象原字符串(带Z,M值)
--
-------------------------------------------------------------------------------------------
执行输出结果:
---------------------------------------------------------------------------------------------
0x010000000105050000000000000000000840000000000000084000000000000000000000000000000000000000000000F03F0000000000002440000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000
--
-------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION (POINT (3 3), POLYGON ((0 0, 1 10, 1 0, 0 0)))
--
-------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION (POINT (3 3 1), POLYGON ((0 0 2, 1 10 3, 1 0 4, 0 0 2)))

 

八、SQL Server 2008函数应用

   SQL Server 2008中针对地理空间数据、对象、实例提供了非常丰富的内置函数,使用这些函数可以快速的完成一系列的空间数据分析。关于这些函数的具体使用这里就不逐一介绍,本文中也相应的使用了几个常用的OGC静态几何图形方法,以后的博文使用中会根据使用情况再做介绍,详细请大家查阅MSDN,本文末也提供了相关参考资料的链接。下面代码演示了测距重庆到成都两点之间坐标的距离(单位:米)。

DECLARE @chongqing geography = geography::Point(30.6666587469201,104.0620211772334326)
DECLARE @chengdu geography = geography::Point(29.5076372217973106.4893849712084326)
SELECT @chongqing.STDistance(@chengdu)
-----------------------------------------------------------------------------------------
执行结果为:266943.740244237

 

九、相关资料

  [1]、空间数据库(百度百科):http://baike.baidu.com/view/1194566.htm

  [2]、使用空间数据实现位置智能:http://tech.ddvip.com/2008-04/120816526343873.html

  [3]、基础空间对象(MSDN):http://msdn.microsoft.com/de-de/library/bb964711.aspx

  [4]、几何实例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx

  [5]、几何图形实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx

  [6]、OGC 静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

  [7]、扩展静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933805.aspx

 

版权说明

  本文属原创文章,欢迎转载且注明文章出处,其版权归作者和博客园共有。为了保存作者的创作热情,请在转载后的明显位置标记本文出处。  

  作      者:Beniao

 文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

 

 

posted on 2015-11-12 11:00 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4958313.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase-1.2.4LruBlockCache实现分析(一)

一、简介 BlockCache是HBase中的一个重要特性,相比于写数据时缓存为Memstore,读数据时的缓存则为BlockCache。 LruBlockCache是HBase中BlockCache的默认实现,它采用严格的LRU算法来淘汰Block。 二、缓存级别 目前有三种缓存级别&#xf…

c .net ajax,Asp.net mvc 2中使用Ajax的三种方式

在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板。首先看一下原始的Ajax的调用的:定义CommentController&am…

爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

本文来自网易云社区。 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行。本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术、新实践,如AR、区块链、安全、大数据等。 网易AR游戏生态合作负责人杨鹏表示,传统游戏模式…

景深决定照相机什么特性_照相机光圈与景深的关系

展开全部「光圈」,光圈是一个用来控制光线透过镜头,进入机身636f70793231313335323631343130323136353331333264663664内感光面的光量的装置,它通常是在镜头内。表达光圈大小我们是用f值。光圈f值镜头的焦距/镜头口径的直径从以上的公式可知要…

润乾V4导出TXT时自定义分隔符

◆ 背景说明 报表中,导出text时,默认没有分隔符;应用中对导出Text,希望能自定义分隔符。在tag中定义了 textDataSeparator属性,让用户在导出Text时自定义分隔符,从而确保满足应用…

Spark学习体会

在去年图计算工作中,和公司里实习的博士生尝试过Spark后,发现Spark比Hadoop在计算速度上后很大的提高。Spark的计算使用Scala语言编写代码,其中图计算用到了GraphX。对Spark技术的学习已经非常重要。 最近半年多时间里,经常看…

fastadmin自定义按钮不是ajax,Fastadmin 自定义按钮实现审核功能

功能描述新增自定义审核按钮,点击审核按钮后,按钮变为取消审核按钮,同理点击取消审核按钮后,按钮变为审核按钮实现功能如下图微信图片_20200827112914.png上代码{field: operate, title: __(Operate), table: table, events: Tabl…

函数的命名空间以及作用域

转载于:https://www.cnblogs.com/mpfei/p/9451208.html

python获取路由器数据包pppoe_PPPoE协议***4:如何得到PPPoE服务器的mac地址

在局域网中,怎样得到PPPoE服务器的mac地址是一件头疼的事情,特别是在windows环境下;得到PPPoE服务器mac地址的实现方法有两种:1.在windows下,我们运行wireshark软件,可以得到所有进出网卡的数据包格式和内容…

使用vs自带的性能诊断工具

visual studio是个强大的集成开发环境,内置了程序性能诊断工具。下面通过两段代码进行介绍。 static void Main( string[] args){Test1();Test2();Console.ReadKey();}protected static void Test1(){Stopwatch sp new Stopwatch();sp.Start();string str "&…

Avg_row_length是怎么计算的?

通过一下命令我们可以获取表的使用情况: rootmysql 05:49:33>show table status like tbname\G 结果: *************************** 1. row ***************************Name: tbnameEngine: InnoDBVersion: 10Row_format: CompactRows: 3425Avg_row_…

1.用代码演示String类中的以下方法的用法 (2018.08.09作业)

1 public class Test_001 {2 3 public static void main(String[] args) {4 String a "德玛西亚!";5 String b "";6 String c "aBcDefG";7 String d " 123321 ";8 System.out.println…

【Java基础】List迭代并修改时出现的ConcurrentModificationException问题

现在有一个需求,要遍历一个List,假设List里面存储的是String对象,然后该需求事判断里面如果有某个对象,则添加一个新的对象进去。自然,我们得出下面的代码: import java.util.ArrayList; import java.util.…

tp5框架原理详解_TP5框架安全机制实例分析

本文实例讲述了TP5框架安全机制。分享给大家供大家参考,具体如下:防止sql注入1、查询条件尽量使用数组方式,具体如下:$wheres array();$wheres[account] $account;$wheres[password] $password;$User->where($wheres)->f…

碧蓝航线8.20服务器维护,碧蓝航线半人马来袭 8.20更新公告

半人马来袭!碧蓝航线将于8月20日9:00~11:00对安卓、iOS全港区进行为期2小时的改造建设,维护后将开启限时活动「盛夏的半人马座」,一起来看看吧。一、内容新增1.开启限时活动「盛夏的半人马座」,活动时间8月20日维护后~8月30日&…

MySQL安装与设置

下载zip,配置 1,系统变量添加:...\mysql-5.7.10-winx64,环境变量添加:%MYSQL_HOME%\bin 2,修改MySQL.ini basedir(同系统变量路径) datadir(系统变量路径\data) port 33…

后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案...

后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况。例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440。 解决方法: 方法一:在后台将这个Long类型的字段转换成String类型…

传奇服务端各文件用途说明

MirServer(服务器目录)├DBServer(数据库服务端)│ ├Connection│ ├FDB(人物数据库,数据库格式为传奇自定义格式)│ ├Log(角色选择服务端日志)│ ├!AddrTable.txt(IP地址配置)│ ├!IdList.txt(交费账号列表,!Setup.exe中ServiceModeTRUE时起作用)│…

认证服务器协议,基于口令的客户端/服务器认证协议

摘要:Identity authentication is the precondition for secure communication between the client and the server. Kim and Chung presented a mutual authentication scheme for client/server scene. The authors realized the mutual authentication with the …

印章仿制工具_仿制图章工具怎么用

在日常生活中,有时候我们需要帐单表格上的文字,用PS的防制图章工具,可以十分方便快捷的处理出来。我想最恨学霸的就是学渣了吧,因为他们每次考试成绩都是科科满分。是家长嘴里别人家的孩子。那么今天就教学渣一个神技能&#xff0…