google-code-prettify

星期二, 9月 01, 2015

[MSSQL] Geometry 裡面畫圈圈,用.STBuffer()、STGeomFromText() 搭配wkt 的CURVEPOLYGON與CIRCULARSTRING!

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

這次是我們要在 MS SQLServer 資料庫裡的 Geometry 欄位內畫圈圈!

Geometry 要怎麼畫圈圈呢?
根據卜朧共的腦袋,第一個念頭,圓圈畫法就是線段畫一圈阿,這簡單
跑個公式把圓上的每個點都算出來~化成一個圓的面就搞定啦...
可是目前數學只剩下簡單加減乘除的程度耶....另想它法...
跑個公式把圓上的每個點都算出來~化成一個圓的線段就搞定啦...
可是再次強調數學只剩下簡單加減乘除的程度耶....又只能另想它法...

好吧!科技始終始於惰性~我相信有更簡單的辦法可以處理掉
圓要怎麼畫呢?拿出了圓規觀察吧....
先取得一個圓心,拉出半徑,轉一圈~ya 圈圈畫出來了...
好吧~用點的方式來畫圓看看吧!

方法一:
DECLARE @gPOINT geometry = 'POINT(1 0 )';
Select @gPOINT.STBuffer(0.8),@gPOINT.STGeometryType(), @gPOINT.STBuffer(0.8).STGeometryType() ;

說明:
1. 定義一個 Geometry 變數,給它中心點
2. 利用 STBuffer() 函數來畫吧,半徑給 0.8


結果驗證想法是對的~人還是懶一點複雜的事情還是給資料庫去處理吧,果然程度不好只能靠懶來征服!

不行!看到魚兒逆流而上!人要上進阿!
查吧~先查MSDN吧,傳送門 原本的想法一定還是可以靠懶來解決!

方法二:
DECLARE @gCURVEPOLYGON geometry = 'CURVEPOLYGON(CIRCULARSTRING(0 0, 1 1, 2 0, 1 -1, 0 0))';
Select @gCURVEPOLYGON , @gCURVEPOLYGON.STGeometryType();

說明:
1. 定義一個 Geometry 變數,給它一個 wkt 的 CURVEPOLYGON 字串,主要是由四個弧形線段 (CIRCULARSTRING)所組成!




看!!!為什麼人要上進?果然最懶的方法是最快的方式!
看!!!科技果然始於惰性!為什麼要脫褲子放屁?

想到的理由:萬一剉賽才不用洗褲子!

參考文獻︰
1. STBuffer()
2. CIRCULARSTRING
3. CURVEPOLYGON