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演示了創建帶有空間數據類型的數據表:
- CREATE TABLE [Cities] (
- [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的實現。
--指派空間數據類型列的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文本進行空間數據類型格式轉化。
- insert into Cities
- (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命令演示了查詢剛剛插入的數據記錄:
- select * from Cities;
同樣可以使用系統函數將查詢出的空間結果轉化為WKT文本格式輸出,下面的SQL命令詳細演示了改功能函數的使用:
--轉換空間數據為WKT文本
- DECLARE @chongqing geometry;
- select @chongqing = CityLocation from Cities where ID=1;
- select @chongqing as 重慶市;
- select @chongqing.ToString() as 重慶市;
- select @chongqing.STAsText() as 重慶市; --WKT
原文鏈接:http://www.cnblogs.com/beniao/archive/2011/02/21/1959347.html
【編輯推薦】