天天看點

SQL Servr 2008空間資料應用系列五:資料表中使用空間資料類型

 通過前面幾篇文章介紹了關于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

三、為空間資料類型列制定空間引用辨別(SRID)

  任何空間資料類型字段都可以向其指派相應的空間引用辨別(SRID),部分空間資料類型字段還是必須制定SRID的。實作對空間資料類型列指派SRID也非常簡單,SQL提供了指派指令來完成,下面的SQL指令示範了給上面新添加的空間資料類型指派SRID的實作。

--指派空間資料類型列的SRID

ALTER TABLE [Cities] 

    ADD CONSTRAINT [enforce_srid_geographycolumn] 

    CHECK (geo.STSrid = 4326)

四、插入空間資料到空間資料類型字段

  插入資料導表格中同樣使用“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

         

本文轉自 beniao 51CTO部落格,原文連結:http://blog.51cto.com/beniao/498471,如需轉載請自行聯系原作者