postgis經常使用函數(99%轉載 1%原創)


1,基本操做函數 函數


AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)
給一個已存在屬性數據表增長一個幾何字段(geomtry column)schema_name 指表的模式的名字,srid 必須是一個整數指對應於 SPATIAL_REF_SYS 表,type必須是一個大寫的字符串,用來描述幾何類型,例如:'POLYGON' 或者 'MULTILINESTRING'spa

DropGeometryColumn(<schema_name>, <table_name>, <column_name>)
從一個空間數據表中刪除一個幾何字段。 對象

ST_SetSRID(geometry, integer)
給一個幾何對象(geometry)設置一個整型的SRID,對於在一個範圍內的查詢很是有用。

2. Geometry Relationship Functions
幾何空間數據關係函數 索引

ST_Distance(geometry, geometry)
返回兩個幾何對象的距離(笛卡兒距離),不使用索引。

ST_DWithid(geometry, geometry, float)
若是一個幾何對象(geometry)在另外一個幾何對象描述的距離(float)內,返回TRUE。若是有索引,會用到索引。

ST_Equals(geometry, geometry)
若是兩個空間對象相等,則返回TRUE。用這個函數比用「=」更好,例如:
equals('LINESTRING(0 0, 10 10)','LINESTRING(0 0, 5 5, 10 10)')
返回 TRUEip

ST_Disjoint(geometry, geometry)
若是兩個對象不相連,則返回TRUE。不要使用GeometryCollection做爲參數。

ST_Intersects(geometry, geometry)
判斷兩個幾何空間數據是否相交,若是相交返回true,不要使用GeometryCollection做爲參數。
Intersects(g1, g2 ) --> Not (Disjoint(g1, g2 ))
不使用索引能夠用_ST_Intersects. ci

ST_Touches(geometry, geometry)
若是兩個幾何空間對象存在接觸,則返回TRUE。不要使用GeometryCollection做爲參數。
a.Touches(b) -> (I(a) intersection I(b) = {empty set} ) and (a intersection b) not empty
不使用索引能夠用_ST_Touches. 字符串

ST_Crosses(geometry, geometry)
若是兩個幾何空間對象存在交叉,則返回TRUE。不要使用GeometryCollection做爲參數。
不使用索引能夠用_ST_Crosses. it

ST_Within(geometry A, geometry B)
若是幾何空間對象A存在空間對象B,則返回TRUE,不要使用GeometryCollection做爲參數。
不使用索引能夠用_ST_Within io

ST_Overlaps(geometry, geometry)
若是兩個幾何空間數據存在交迭,則返回 TRUE,不要使用GeometryCollection做爲參數。
不使用索引能夠用_ST_Overlaps. table

ST_Contains(geometry A, geometry B)
若是幾何空間對象A包含空間對象B,則返回 TRUE,不要使用GeometryCollection做爲參數。
這個函數相似於ST_Within(geometry B, geometry A)
不使用索引能夠用_ST_Contains.

ST_Covers(geometry A, geometry B)
若是幾何空間對象B中的全部點都在空間對象A,則返回 TRUE
不要使用GeometryCollection做爲參數。
不使用索引能夠用_ST_Covers.

ST_CoveredBy(geometry A, geometry B)
若是幾何空間對象A中的全部點都在空間對象B,則返回 TRUE

3,Geometry Processing Functions
幾何空間數據處理函數

ST_Centroid(geometry)
返回質心點,就是根據幾何空間數據,活動該幾何空間數據的中心點,返回一個空間點數據.

ST_Area(geometry)
若是幾何空間數據爲多邊形,或者多多邊形,則返回空間數據的外圍(返回類型double precision) ;

ST_Length(geometry)
這個曲線在其相關的空間參考長度(返回類型double precision) ;

ST_PointOnSurface(geometry)
必定在幾何空間線數據上的點,返回一個數據點

ST_Buffer(geometry, double, [integer])
buffer操做一個頗有用函數,
這個函數的第一個參數是要操做的空間幾何數據,第二個參數長度(距離),第三個參數爲一個整型,
這個函數返回一個空間數據類型,以當前第一個參數空間幾何數據爲參考點,返回小於等於距離的空間

幾何數據點,最後由這些點組成一個多邊形空間數據,最後一個參數表示
在組成一個1/4圓的有幾個點分隔。也就是說若是最好一個參數爲8那麼這個最後組成的多邊形就是32

的多邊形,若是不指定這個參數,系統默認的是8
注意:第二個參數,距離它的單位爲空間數據單位(度),在運算時須要進行單位換算,最後轉換成度

,單位的換算關係以下:
1英里= 63360
1=1/1852
海里
1海里= 1/60

若是要進行具體的運算,須要進行一下單位換算,好比要求一個500米的範圍,那麼應該是

500*1/1852*1/60(度)

ST_Envelope(geometry)
這個函數能夠返回mbr(空間最小外包矩形),傳入參數能夠是point line polygon


ST_extent(geometry set)
這個函數能夠對一個空間數據集進行操做,返回一個最小包含矩形(mbr.
如:SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY


ST_Difference(geometry A, geometry B)
返回一個幾何空間數據A不一樣於空間數據B的幾何空間數據類型,不要使用GeometryCollection做爲參數。
也就是說,若是A爲一個line,B也爲一個line,那麼他們返回的類型就是BA分割的多線。
如:
select ST_AsEWKT(ST_Difference(geomfromText('LINESTRING(1 1,2 3,3 4,3 1)'),geomfromText('LINESTRING(2 0,2 2,5 2,3 1)')))
返回的MULTILINESTRING((1 1,2 3,3 4,3 2),(3 2,3 1))
若是是AB都是一個POLYGON多邊形,那麼返回的就是多多邊形,若是相交,那麼返回的就是BA分割,而且再也不B中的多多邊形。
select ST_AsEWKT(ST_Difference(geomfromText('POLYGON((1 1,2 3,3 4,3 1,1 1))'),geomfromText('POLYGON((2 0,2 2,5 2,1 3,2 0))')))

ST_Union(geometry, geometry)
返回一個合併的幾何空間數據,將兩個幾何空間數據合併爲一個幾何空間數據,或者GeometryCollection,不要使用GeometryCollection做爲參數。


4
Geometry Accessors

ST_AsText(geometry)
將幾何空間數據,轉換成容易理解的空間數據文本格式,
例如:
(0,0 0,1 1,1 1,0 0,0)
轉換後應該是這樣的結果 POLYGON(0 0,0 1,1 1,1 0,0 0)

ST_SRID(geometry)
返回當前幾何空間數據的SRID

ST_IsClosed(geometry)
判斷幾何空間數據是不是閉合,就是判斷起始點和終點座標是相同的,若是是相同的返回true,不然返回false.

ST_IsRing(geometry)
這個函數參數的對象是line,判斷起始點和終點座標是否相同,
若是閉合(這個曲線除了起始點和終點相同外,沒有其餘相交點)怎返回true,不然false,

ST_NumPoints(geometry)
返回幾何空間數據lineString上的第一條線上點的個數。


GeometryType(geometry)
判斷幾何空間數據的類型。
例如
select GeometryType(geomfromText('MULTILINESTRING((1 1,2 3,3 4,3 1,2 1,1 1),(1 2,2 3,4 5))'))
返回的類型爲 MULTILINESTRING

關於每一個polygon過大,導致程序處理超級慢的問題解決:

      用geometry ST_Scale(geometry geomA, float XFactor, float YFactor);函數,對原始geometry切割,插入到新的數據表中,這樣就變成了對小polygon的處理

相關文章
相關標籤/搜索