SQL Server 2008空間數(shù)據(jù)應(yīng)用系列五:數(shù)據(jù)表中使用空間數(shù)據(jù)類型
前面幾篇文章介紹了關(guān)于SQL Server 2008中空間數(shù)據(jù)類型相關(guān)的知識點,了解到了什么是空間數(shù)據(jù),什么是空間數(shù)據(jù)類型,如何在SQL中變成定義基礎(chǔ)的空間對象實例。這篇文章將繼續(xù)介紹SQL Server 2008中空間數(shù)據(jù)類型的應(yīng)用知識點,主要介紹如何在數(shù)據(jù)表中使用空間數(shù)據(jù)類型列,如何存儲空間數(shù)據(jù)到空間數(shù)據(jù)類型,以及如何查詢、預(yù)覽空間數(shù)據(jù)等相關(guān)知識點。
選擇使用空間數(shù)據(jù)類型,意味著必須在SQL數(shù)據(jù)表中添加空間數(shù)據(jù)類型列以存儲空間數(shù)據(jù)。通常有兩種情況:
1、創(chuàng)建一張帶有空間數(shù)據(jù)類型的新表。
2、向已有數(shù)據(jù)表中添加空間數(shù)據(jù)類型列字段。
一、創(chuàng)建空間數(shù)據(jù)類型新表
創(chuàng)建一個帶有空間數(shù)據(jù)類型的新表和創(chuàng)建普通的表基本沒有區(qū)別,唯一的不同就是使用了空間數(shù)據(jù)類型字段。以下SQL演示了創(chuàng)建帶有空間數(shù)據(jù)類型的數(shù)據(jù)表:
- CREATE TABLE [Cities] (
 - [ID] [int] IDENTITY(1,1) NOT NULL,
 - [CityName] [varchar](255) NOT NULL,
 - [CityLocation] [geometry] NOT NULL
 - )
 - GO
 
二、添加空間數(shù)據(jù)類型到已有表
向已有表中添加空間數(shù)據(jù)類型列和普通表添加新的列是一樣的,同樣使用alter table xxx add yyy datatype命令完成。下面代碼演示了向剛創(chuàng)建的新表添加一空間數(shù)據(jù)類型字段:
- --向已有表中添加空間數(shù)據(jù)類型字段
 - ALTER TABLE [Cities]
 - ADD geo geography
 - GO
 
三、為空間數(shù)據(jù)類型列制定空間引用標(biāo)識(SRID)
任何空間數(shù)據(jù)類型字段都可以向其指派相應(yīng)的空間引用標(biāo)識(SRID),部分空間數(shù)據(jù)類型字段還是必須制定SRID的。實現(xiàn)對空間數(shù)據(jù)類型列指派SRID也非常簡單,SQL提供了指派命令來完成,下面的SQL命令演示了給上面新添加的空間數(shù)據(jù)類型指派SRID的實現(xiàn)。
- --指派空間數(shù)據(jù)類型列的SRID
 - ALTER TABLE [Cities]
 - ADD CONSTRAINT [enforce_srid_geographycolumn]
 - CHECK (geo.STSrid = 4326)
 - GO
 
四、插入空間數(shù)據(jù)到空間數(shù)據(jù)類型字段
插入數(shù)據(jù)導(dǎo)表格中同樣使用“insert into table.....”語法實現(xiàn),不同的是插入空間數(shù)據(jù)的時候需要對數(shù)據(jù)進行格式化處理才能被成功的插入到空間數(shù)據(jù)類型列。針對于兩種(geography和geometry)空間數(shù)據(jù)類型,系統(tǒng)提供了專門的空間格式化語法來處理,比如通過將WKT文本插入到空間數(shù)據(jù)列,可以使用geometry::STGeomFromText()或者geography::STGeomFromText()函數(shù)來對WKT文本進行空間數(shù)據(jù)類型格式轉(zhuǎn)化。
- insert into Cities
 - (CityName,CityLocation)
 - values
 - ('chongqing',geometry::STGeomFromText('POLYGON ((107.04352 28.870554, 107.043891 28.873231......)',4326));
 
注:上面SQL代碼塊實現(xiàn)了將重慶市區(qū)區(qū)域WKT格式的空間數(shù)據(jù)插入到Cities表的CityLocation字段中,由于WKT內(nèi)用太長,代碼段中對其進行了截取。
四、查詢空間數(shù)據(jù)類型數(shù)據(jù)
查詢空間數(shù)據(jù)和普通的數(shù)據(jù)查詢幾乎沒有區(qū)別,同樣使用“select xxx from table where x=y”的方式實現(xiàn)數(shù)據(jù)查詢。下面SQL命令演示了查詢剛剛插入的數(shù)據(jù)記錄:
- select * from Cities;
 
同樣可以使用系統(tǒng)函數(shù)將查詢出的空間結(jié)果轉(zhuǎn)化為WKT文本格式輸出,下面的SQL命令詳細演示了改功能函數(shù)的使用:
- --轉(zhuǎn)換空間數(shù)據(jù)為WKT文本
 - DECLARE @chongqing geometry;
 - select @chongqing = CityLocation from Cities where ID=1;
 - select @chongqing as 重慶市;
 - select @chongqing.ToString() as 重慶市;
 - select @chongqing.STAsText() as 重慶市; --WKT
 
五、相關(guān)資料
[1]、空間數(shù)據(jù)庫(百度百科):http://baike.baidu.com/view/1194566.htm
[2]、使用空間數(shù)據(jù)實現(xiàn)位置智能:http://tech.ddvip.com/2008-04/120816526343873.html
[3]、基礎(chǔ)空間對象(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 靜態(tài)幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx
[7]、擴展靜態(tài)幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933805.aspx
【編輯推薦】
- SQL Server 2008應(yīng)用 阻塞(Blocking)
 - 微軟 SQL Server 2008中自動化數(shù)據(jù)采集器
 - 微軟SQL Server 2008令商業(yè)智能平民化
 - SQL Server 2008幾項新特性概述
 

















 
 
 



 
 
 
 