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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

  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

 





本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/497327,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
7天前
|
SQL 人工智能 自然语言处理
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
|
25天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
1月前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
186 2
|
1月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
2月前
|
SQL 存储
SQL Server基本函数
SQL Server基本函数
|
2月前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
35 0
|
3月前
|
SQL Perl
PL/SQL的函数和包
PL/SQL的函数和包
27 1
|
3月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
33 0
|
3月前
|
SQL 关系型数据库 MySQL
五、SQL常用函数
五、SQL常用函数
30 0
|
4月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
45 0