在sql2008中增加了對地理空間資料型別的支援,該型別分為2種:歐氏(平面)幾何geometry 和地理空間(橢圓體)幾何geography 。歐式幾何大家基本上都學過,是以座標來表示,而地理空間就是使用經度和緯度來表示,由於平面幾何比較簡單(我記得好像是初中時候學的平面解析幾何,高中學立體解析幾何),所以我就從簡單的學起,先學習geometry 資料型別。
在平面幾何中我們有3個基本元素:點、線、面。對應的在geometry 資料型別中也是這3種型別point、linestring、polygon以及各自的集合multipoint、multilinestring、multipolygon 另外還有乙個它們的混合的集合geometrycollection,混合集合中可以包含多個point多個linestring和多個polygon。很容易看出multipoint、multilinestring、multipolygon是geometrycollection的一種特殊情況。官方給出的它們的關係如圖:
當需要申明乙個geometry 物件時需要使用它提供的乙個函式stgeomfromtext將字串形式的申明轉換為物件。例如要申明乙個point,座標為1,2 對應的sql語句就是:
declare @g geometry;
set @g = geometry::stgeomfromtext('point (1 2)', 0);
select @g.tostring();
這裡point除了接受x y這2個引數外,還可以接受z(仰角elevation)和 m(度量measure)值,在平面幾何中好像沒有這個概念啊?不知道是拿來做什麼用的,估計是在地理資料型別中才會使用吧。
除字串之外,stgeomfromtext還有乙個引數就是srid。srid是空間引用識別符號的簡稱,主要用於地理資料型別,在平面幾何資料型別中srid預設是0,關於srid的具體作用在地理資料型別的時候再研究,只需要知道,不同srid的2個例項是不能進行運算的,運算的結果都是null。
這裡的point(1 2)字串是必須符合熟知文字(well-known text,wkt)的格式。點、線、面和對應集合等的字串申明如:
stgeomfromtext太長了不好記也不好打,還是使用另外乙個函式parse安逸。parse函式只有乙個引數,就是符合wkt的字串,不需要指定srid,申明乙個點可以寫為:
set @g = geometry::parse('point (1 2)');
這裡wkt字串是不區分大小寫的,但是由於空間資料型別是clr定義出來的,可以理解為是用c#寫的乙個資料型別,所以在使用的時候是要區分大小寫的,不能寫成parse('point(1 2)')了!
既然可以從字串轉換為幾何物件,那麼肯定也有辦法將幾何物件轉換為字串,sql中提供了2個函式實現該功能:stastext()和tostring()。這兩個函式的區別就在於tostring除了座標外還返回了物件中的仰角和度量(如果定義了的話),而stastext是只返回定義中的座標。
今天學了對平面幾何型別的定義,下次就開始學習使用了。
SQL2008空間資料型別 歐氏幾何1基礎
在sql2008中增加了對地理空間資料型別的支援,該型別分為2種 歐氏 平面 幾何geometry 和地理空間 橢圓體 幾何geography 歐式幾何大家基本上都學過,是以座標來表示,而地理空間就是使用經度和緯度來表示,由於平面幾何比較簡單 我記得好像是初中時候學的平面解析幾何,高中學立體解析幾何...
SQL2008空間資料型別 歐氏幾何1基礎
在sql2008中增加了對地理空間資料型別的支援,該型別分為2種 歐式 平面 幾何geometry 和地理空間 橢圓體 幾何geography 歐式幾何大家基本上都學過,是以座標來表示,而地理空間就是使用經度和緯度來表示,由於平面幾何比較簡單 我記得好像是初中時候學的,高中學立體幾何 所以我就從簡單...
SQL2008空間資料型別 歐氏幾何1基礎
在sql2008中增加了對地理空間資料型別的支援,該型別分為2種 歐式 平面 幾何geometry 和地理空間 橢圓體 幾何geography 歐式幾何大家基本上都學過,是以座標來表示,而地理空間就是使用經度和緯度來表示,由於平面幾何比較簡單 我記得好像是初中時候學的,高中學立體幾何 所以我就從簡單...