PostgreSql對空間資料的操作函式
GIS開發對資料的操作,主要是對空間資料的操作。PostgreSql提供了一些處理空間資料的函式,操作起來是比較方便的。下面就記錄一下,最近做專案裡面用到的一些,也是比較常用的。
空間資料
介紹這些函式之前,先了解一下什麼是空間資料。空間資料是指用來表示空間實體的位置、形狀、大小及其分佈特徵諸多方面資訊的資料,它可以用來描述來自現實世界的目標,它具有定位、定性、時間和空間關係等特性。空間資料是一種用點、線、面以及實體等基本空間資料結構來表示人們賴以生存的自然世界的資料。簡單來說,操作空間資料主要是對點、線、面等基本結構的操作。
地圖上的圖層有面圖層、點圖層和線圖層之分,就拿一個城市的地圖來說,該城市的公園圖層就相當於面圖層,因為可能需要表示公園有多大;一個城市醫院或者銀行的分佈可以看做是點圖層;城市的道路交通可以認為是線圖層。
這些空間資料可以在資料庫中儲存,儲存時可以是geometry格式;也可以以檔案的形式儲存,儲存成shape檔案。在資料庫中儲存時,geometry是以十六進位制串組成的,表示的是幾何形狀。shape檔案儲存時,對應點線面分別由三種類型,point、line、polygon,這是單一的型別,對應聯合的型別又有multipoint、multiline、multipolygon,所以說,shape檔案儲存的是wkt型別的資料。本篇部落格暫且把空間資料分為這兩種型別:geometry和wkt。
函式操作
在系統中我們用的地圖外掛是Openlayer,它對地圖的操作是操作wkt資料,所以就涉及到geometry和wkt的轉換。
st_geomfromtext(wkt,座標系引數):該方法是把wkt格式資料轉換成geometry型別,引數有兩個,第一個是wkt型別的資料,第二個是座標系引數。
st_astext(geometry):該方法是把geometry型別資料轉換成wkt格式資料,引數只有一個,是geometry型別的資料。
圖層是由各個圖斑構成的,如果要在地圖上定位某個圖斑,就需要獲取這個圖斑的中心點座標。
st_centroid(geometry):這個方法是獲取這個geometry的中心點,引數是要獲取中心點的geometry。
st_x(point):該方法是獲取點的x座標,它操作的物件是一個點。
st_y(point):該方法是獲取點的y座標,它操作的物件也是一個點。
有時我們需要實現兩個圖斑相交,也可以用函式執行。
st_intersects(geometry,geometry):該方法是實現兩個圖斑相交,傳入的引數是兩個圖斑的geometry。
跟這個方法類似的還有好多函式,比如判斷兩個圖斑是否相交,返回一個布林值;或者獲取兩個圖斑相交的geometry和不相交的geometry。
如果要使圖斑聯合,則需要union函式。
st_union(geometry):如果一個圖層表中儲存好多圖斑,其中有一列名為geom,儲存的是各個圖斑的geometry,那麼st_union(geom)就是將該圖層的所有圖斑聯合成一個,得到的結果就是multi型別的資料。
如果要檢視某個圖斑方圓多少米之內的情況,就要對該圖斑進行緩衝。
st_buffer(geometry,長度):該方法是對某個圖斑進行緩衝,傳入要緩衝的geometry,在傳入緩衝的距離即可。
總結
這些資料庫封裝的函式很方便我們的開發,不用自己再去實現,多瞭解這些函式對開發效率有好處。上面記錄的這是是做的系統中經常用到的,如果有什麼不對的地方或者不完善的地方,還請過路的各位大牛指點。