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

开发
Microsoft SQL Server 2008支持7中举出空间对象实例,并且针对地理空间数据、对象、实例提供了非常丰富的内置函数,使用这些函数可以快速的完成一系列的空间数据分析。

微软SQL Server 2008中支持的7种基础空间对象实例,分别为:点(Point)、点集合(MultiPoint )、线(LineString)、线集合(MultiLineString)、多边形(Polygon )、多边形集合(MultiPolygon)和空间集合(GeometryCollection)。

一、点(Point)

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

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

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

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

二、点集合(MultiPoint )

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

  1. --创建点集合实例  
  2. DECLARE @cd geometry;  
  3. SET @cd = geometry::STGeomFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);  
  4. --SET @cd = geometry::STMPointFromText('MULTIPOINT((30.6666587469201 104.062021177233),(29.5076372217973 106.489384971208))',4326);  
  5. select @cd.STGeometryN(1).STAsText() as 重庆;  
  6. select @cd.STGeometryN(2).STAsText() as 成都;  
  7. ---------------------------------------------------------------------------------------  
  8. 执行输出结果:  
  9. 重庆  
  10. ---------------------------------------------------------------------------------------  
  11. POINT (30.6666587469201 104.062021177233)  
  12.    
  13. 成都  
  14. ---------------------------------------------------------------------------------------  
  15.  
  16. POINT (29.5076372217973 106.489384971208)  
  17.  

 

三、线(LineString)

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

  1. DECLARE @cdline geometry;  
  2. SET @cdline = geometry::STGeomFromText('LINESTRING(30.6666 104.06202, 29.50763 106.48938)', 4326);  
  3. select @cdline.STAsText() as 重庆_成都  
  4. -------------------------------------------------------------------------------------------  
  5. 重庆_成都  
  6. -------------------------------------------------------------------------------------------  
  7. LINESTRING (30.6666 104.06202, 29.50763 106.48938) 

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

3.1

   

 

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

3.2

 

四、线集合(MultiLineString)

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

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

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

 

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

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

4

五、多边形(Polygon )

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

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

六、多边形集合(MultiPolygon)

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

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

 

七、空间对象集合(GeometryCollection )

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

  1. --空间集合  
  2. DECLARE @ggc geometry;  
  3. SET @ggc= geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(3 3 1), POLYGON((0 0 2, 1 10 3, 1 0 4, 0 0 2)))', 1);  
  4. select @ggc;  
  5. select @ggc.STAsText();        --输出WKT文本(不带Z,M值)  
  6. select @ggc.ToString();        --输出对象原字符串(带Z,M值)  
  7. ---------------------------------------------------------------------------------------------  
  8. 执行输出结果:  
  9. ---------------------------------------------------------------------------------------------  
  10. 0x010000000105050000000000000000000840000000000000084000000000000000000000000000000000000000000000F03F0000000000002440000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000  
  11. ---------------------------------------------------------------------------------------------  
  12. GEOMETRYCOLLECTION (POINT (3 3), POLYGON ((0 0, 1 10, 1 0, 0 0)))  
  13. ---------------------------------------------------------------------------------------------  
  14. 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,本文末也提供了相关参考资料的链接。下面代码演示了测距重庆到成都两点之间坐标的距离(单位:米)。

  1. DECLARE @chongqing geography = geography::Point(30.6666587469201,104.062021177233, 4326)  
  2. DECLARE @chengdu geography = geography::Point(29.5076372217973, 106.489384971208, 4326)  
  3. SELECT @chongqing.STDistance(@chengdu)  
  4. -----------------------------------------------------------------------------------------  
  5. 执行结果为: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

【编辑推荐】

  1. SQL Server 2008应用 阻塞(Blocking)
  2. 微软 SQL Server 2008中自动化数据采集器
  3. 并行查询让SQL Server加速运行
  4. 微软SQL Server 2008令商业智能平民化

 

 

责任编辑:佚名 来源: 博客园
相关推荐

2011-02-21 13:06:42

Microsoft S

2011-02-21 10:47:44

Microsoft S

2011-02-21 10:26:53

Microsoft S

2011-03-22 10:20:18

Bing MapsSQL Server

2011-03-22 15:10:49

Bing MapsSQL Server

2011-02-21 13:41:14

SQL Server

2011-03-22 09:17:12

SQLCRLSQL Server

2011-09-01 13:24:42

SQL Server 呈现GeoRSS订阅的Bing Maps

2011-03-22 15:36:44

Spatial TooSQL Server

2009-04-16 17:55:55

SQL Server 空间数据.NET

2011-02-21 13:06:34

SQL Servr 2

2009-08-28 11:38:15

MapPoint

2009-04-16 17:38:24

SQL Server 空间数据智能

2009-01-20 13:39:56

数据挖掘空间数据方法

2010-09-07 16:28:58

DB2 空间数据

2022-03-30 09:30:00

数据库地理空间查询SQL

2022-09-14 11:27:19

物联网大数据智慧城市

2009-04-16 17:53:09

SQL Server 应用程序扩展性

2011-08-15 17:55:49

提取MapInfo地图SQL Server

2024-10-18 17:03:16

Python地理空间数据处理
点赞
收藏

51CTO技术栈公众号