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中空间数据类型相关的知识点,了解到了什么是空间数据,什么是空间数据类型,如何在SQL中变成定义基础的空间对象实例,这些知识点主要是为了后续学习空间数据应用和做地理空间分析做准备。本篇将继续介绍SQL Server 2008中空间数据类型的应用知识点,主要介绍如何在数据表中使用空间数据类型列,如何存储空间数据到空间数据类型,以及如何查询、预览空间数据等相关知识点。
选择使用空间数据类型,意味着必须在SQL数据表中添加空间数据类型列以存储空间数据。通常有两种情况:
1、创建一张带有空间数据类型的新表。
2、向已有数据表中添加空间数据类型列字段。
一、创建空间数据类型新表
创建一个带有空间数据类型的新表和创建普通的表基本没有区别,唯一的不同就是使用了空间数据类型字段。以下SQL演示了创建带有空间数据类型的数据表:
[ID] [int] IDENTITY(1,1) NOT NULL,
[CityName] [varchar](255) NOT NULL,
[CityLocation] [geometry] NOT NULL
)
GO
二、添加空间数据类型到已有表
向已有表中添加空间数据类型列和普通表添加新的列是一样的,同样使用alter table xxx add yyy datatype命令完成。下面代码演示了向刚创建的新表添加一空间数据类型字段:
ALTER TABLE [Cities]
ADD geo geography
GO
三、为空间数据类型列制定空间引用标识(SRID)
任何空间数据类型字段都可以向其指派相应的空间引用标识(SRID),部分空间数据类型字段还是必须制定SRID的。实现对空间数据类型列指派SRID也非常简单,SQL提供了指派命令来完成,下面的SQL命令演示了给上面新添加的空间数据类型指派SRID的实现。
ALTER TABLE [Cities]
ADD CONSTRAINT [enforce_srid_geographycolumn]
CHECK (geo.STSrid = 4326)
GO
四、插入空间数据到空间数据类型字段
插入数据导表格中同样使用“insert into table.....”语法实现,不同的是插入空间数据的时候需要对数据进行格式化处理才能被成功的插入到空间数据类型列。针对于两种(geography和geometry)空间数据类型,系统提供了专门的空间格式化语法来处理,比如通过将WKT文本插入到空间数据列,可以使用geometry::STGeomFromText()或者geography::STGeomFromText()函数来对WKT文本进行空间数据类型格式转化。
(CityName,CityLocation)
values
('chongqing',geometry::STGeomFromText('POLYGON ((107.04352 28.870554, 107.043891 28.873231......)',4326));
注:上面SQL代码块实现了将重庆市区区域WKT格式的空间数据插入到Cities表的CityLocation字段中,由于WKT内用太长,代码段中对其进行了截取。
四、查询空间数据类型数据
查询空间数据和普通的数据查询几乎没有区别,同样使用“select xxx from table where x=y”的方式实现数据查询。下面SQL命令演示了查询刚刚插入的数据记录:
同样可以使用系统函数将查询出的空间结果转化为WKT文本格式输出,下面的SQL命令详细演示了改功能函数的使用:
DECLARE @chongqing geometry;
select @chongqing = CityLocation from Cities where ID=1;
select @chongqing as 重庆市;
select @chongqing.ToString() as 重庆市;
select @chongqing.STAsText() as 重庆市; --WKT
五、相关资料
[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