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

简介: 原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用  友情提示,您阅读本篇博文的先决条件如下:   1、本文示例基于Microsoft SQL Server 2008 R2调测。
原文: 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.06202 29.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   1 1   2 2   1 1   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.062021177233 4326 )
DECLARE   @chengdu  geography  =  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

 

版权说明

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

  作      者:Beniao

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

 

 

目录
相关文章
|
8月前
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
330 6
|
10月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
524 9
|
9月前
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
591 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
SQL 数据库
如何应用SQL约束条件?
【10月更文挑战第28天】如何应用SQL约束条件?
365 11
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
367 4
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
457 9
|
SQL 监控 安全
员工上网行为监控软件:SQL 在数据查询监控中的应用解析
在数字化办公环境中,员工上网行为监控软件对企业网络安全和管理至关重要。通过 SQL 查询和分析数据库中的数据,企业可以精准了解员工的上网行为,包括基础查询、复杂条件查询、数据统计与分析等,从而提高网络管理和安全防护的效率。
254 0
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
195 0
|
SQL 数据库 索引
内连接(INNER JOIN)在SQL中的简单应用与技巧
在SQL查询中,内连接(INNER JOIN)是一种基本且常用的连接类型,用于从两个或多个表中检索匹配的记录
1228 0