友情提示,您阅读本篇博文的先决条件如下:
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。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE@pgeometry;
SET@p=geometry::Parse('POINT(30.6666587469201 104.062021177233)');
select@p.STXASX;
select@p.STYASY;
如下SQL命令这创建了包含 Z(仰角)和 M(度量)值的点(Point)实例,其中Z(仰角)和 M(度量)值可以显示的指定为“null”。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE@ggeometry;
SET@g=geometry::Parse('POINT(30.6666587469201104.062021177233153.5)');
--SET@g=geometry::Parse('POINT(30.6666587469201104.062021177233nullnull)');
select@g.STXASX
select@g.STYASY
select@g.ZasZ
select@g.MasM
二、点集合(MultiPoint )
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 />-->
--创建点集合实例
DECLARE@cdgeometry;
SET@cd=geometry::STGeomFromText('MULTIPOINT((30.6666587469201104.062021177233),(29.5076372217973106.489384971208))',4326);
--SET@cd=geometry::STMPointFromText('MULTIPOINT((30.6666587469201104.062021177233),(29.5076372217973106.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命令实现了定义重庆到成都两点之间的线条:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE@cdlinegeometry;
SET@cdline=geometry::STGeomFromText('LINESTRING(30.6666104.06202,29.50763106.48938)',4326);
select@cdline.STAsText()as重庆_成都
-------------------------------------------------------------------------------------------
重庆_成都
-------------------------------------------------------------------------------------------
LINESTRING(30.6666104.06202,29.50763106.48938)
在SQL Server 2008的空间结果中所呈现的效果如下图所示:
注:线条有多种外观呈现方式,有非闭合线条、闭合线条以及图形复杂的线条等多种情况出现。如上(右)图示。
四、线集合(MultiLineString)
MultiLineString 是零个或更多 geometry 或 geography LineString 实例的集合。为使 MultiLineString 实例有效,该实例必须满足以下条件:
1、构成 MultiLineString 实例的所有实例必须都是有效的 LineString 实例。
2、在构成 MultiLineString 实例的 LineString 实例中,不能有两个实例在某一段间隔上重叠。LineString 实例只能与自身相交或接触,或者在有限数目的点上与其他 LineString 实例相交或接触。
通过如下SQL代码片段演示MultiLineString的具体使用:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE@mlgeometry;
--SET@ml=geometry::Parse('MULTILINESTRING((30.6666104.06202,29.50763106.48938),(30.6666104.06202,33.78142105.97914))');
SET@ml=geometry::STGeomFromText('MULTILINESTRING((30.6666104.06202,29.50763106.48938),(30.6666104.06202,33.78142105.97914))',4326);
--SET@ml.STSrid=4326;
select@ml;
select@ml.STIsValid(); --验证ml对象是否为正确的空间对象
五、多边形(Polygon )
Polygon 是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个 Polygon 实例。以下SQL命令演示了如何创建多边形以及求多边形的面积函数的应用。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->--创建多边形
DECLARE@pggeometry;
SET@pg=geometry::STPolyFromText('POLYGON((00,03,33,30,00),(11,12,21,11))',10);
select@pg;
select@pg.STArea();--求得多边形的面积
六、多边形集合(MultiPolygon)
多边形集合(MultiPolygon )实例是零个或更多个 Polygon 实例的集合。下面的SQL命令演示了定义一个多边形集合对象并返回第一个对象的WKT。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->--创建多边形集合,并返回第一个多边形的WKT
DECLARE@mpggeometry;
SET@mpg=geometry::Parse('MULTIPOLYGON(((11,12,21,11)),((99,910,109,99)))');
SELECT@mpg.STGeometryN(1).STAsText();
---------------------------------------------------------------------------------------------
执行输出结果:
POLYGON((11,12,21,11))
七、空间对象集合(GeometryCollection )
GeometryCollection 是零个或更多个 geometry 或 geography 实例的集合。GeometryCollection 可以为空。以下SQL演示了定义一个带有一个点(Point)实例和一个多边形(Polygon)实例的空间对象集合对象。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->--空间集合
DECLARE@ggcgeometry;
SET@ggc=geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(331),POLYGON((002,1103,104,002)))',1);
select@ggc;
select@ggc.STAsText();--输出WKT文本(不带Z,M值)
select@ggc.ToString();--输出对象原字符串(带Z,M值)
---------------------------------------------------------------------------------------------
执行输出结果:
---------------------------------------------------------------------------------------------
0x010000000105050000000000000000000840000000000000084000000000000000000000000000000000000000000000F03F0000000000002440000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000
---------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION(POINT(33),POLYGON((00,110,10,00)))
---------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION(POINT(331),POLYGON((002,1103,104,002)))
八、SQL Server 2008函数应用
SQL Server 2008中针对地理空间数据、对象、实例提供了非常丰富的内置函数,使用这些函数可以快速的完成一系列的空间数据分析。关于这些函数的具体使用这里就不逐一介绍,本文中也相应的使用了几个常用的OGC静态几何图形方法,以后的博文使用中会根据使用情况再做介绍,详细请大家查阅MSDN,本文末也提供了相关参考资料的链接。下面代码演示了测距重庆到成都两点之间坐标的距离(单位:米)。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE@chongqinggeography=geography::Point(30.6666587469201,104.062021177233,4326)
DECLARE@chengdugeography=geography::Point(29.5076372217973,106.489384971208,4326)
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
分享到:
相关推荐
本文将对 SQL Server 2019 空间数据库应用系列进行详细的知识点讲解,涵盖空间信息基础、空间数据、坐标系统、空间参考系统等重要概念。 空间信息基础 SQL Server 2019 提供了全面性的空间支持,允许组织通过具...
sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份 【实例截图】 【核心代码】 sqlservr64 ├── sql...
在Win8和Win10下安装SQL Server 2005时无法启动服务的解决办法,替换两个文件,亲测成功,sqlservr32.rar和sqlservr64.zip
5、安装完成之后,如果想要打SP4补丁,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后就能打上SP4补丁了(即安装...
5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的SP4更新轨范)...
安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件)覆盖到Binn文件夹...
在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...
安装到SqlServer服务的时候提示启动服务失败,这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。32位下载sqlservr32.rar,64位下载sqlservr64.rar。
安装sqlser2005中途报错。需要替换两个文件,在执行重试即可完成安装(亲试有用),对我自己是有用的,那就5积分分享给铁子吧,压缩成ZIP格式了。
需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要...
2、下载本文的附件,sqlservr64.rar sqlservr32.rar 3、将下载的文件解压出sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“C:\Program Files\MicrosoftSQLServer\MSSQL.2...
5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的S P4更新轨范...
某些情况下,是不好用的,我就是其一,不过也许别人有用呢,放上来,1分来取吧 看着别人几十分的要,我下来了,但不好用,听说有些人是好用的,1分扔出来了
安装sqlserver2005时候,安装完成后,提示启动失败。 再次有教程,一步步按照教程操作,才能正常成功。 注:win10系统安装sqlserver2005时候,检测IIS总是过不去。原因:win10 IIS没有完全,注意是全部,完全安装...
在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...
我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。
win10安装SQL server 2005 报错 我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。
sqlservr约束.doc
SQLServr优化.docx