Postgis經常使用函數


1,基本操作函數

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

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

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

2. 幾何空間數據關系函數

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)') 返回 TRUE。

ST_Disjoint(geometry, geometry)
假設兩個對象不相連。則返回TRUE。不要使用GeometryCollection作為參數。



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

ST_Touches(geometry, geometry)
假設兩個幾何空間對象存在接觸,則返回TRUE。不要使用GeometryCollection作為參數。


a.Touches(b) -> (I(a) intersection I(b) = {empty set} ) and (a intersectionb) not empty
不使用索引能夠用_ST_Touches.

ST_Crosses(geometry, geometry)
假設兩個幾何空間對象存在交叉。則返回TRUE。不要使用GeometryCollection作為參數。
不使用索引能夠用_ST_Crosses.

ST_Within(geometry A, geometry B)
假設幾何空間對象A存在空間對象B中,則返回TRUE,不要使用GeometryCollection作為參數。
不使用索引能夠用_ST_Within

ST_Overlaps(geometry, geometry)
假設兩個幾何空間數據存在交迭,則返回 TRUE,不要使用GeometryCollection作為參數。
不使用索引能夠用_ST_Overlaps.

ST_Contains(geometry A, geometry B)
假設幾何空間對象A包括空間對象B,則返回 TRUE,不要使用GeometryCollection作為參數。
這個函數類似於ST_Within(geometry B, geometryA)
不使用索引能夠用_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) FROMGEOMTABLE GROUP BY CATEGORY


ST_Difference(geometry A, geometry B)
返回一個幾何空間數據A不同於空間數據B的幾何空間數據類型。不要使用GeometryCollection作為參數。


也就是說,假設A為一個line,B也為一個line,那么他們返回的類型就是B把A切割的多線。
如:
select ST_AsEWKT(ST_Difference(geomfromText('LINESTRING(1 1,2 3,3 4,31)'),geomfromText('LINESTRING(2 0,2 2,5 2,3 1)')))
返回的MULTILINESTRING((1 1,2 3,3 4,32),(3 2,3 1))
假設是A和B都是一個POLYGON多邊形,那么返回的就是多多邊形。假設相交,那么返回的就是B把A切割。而且不再B中的多多邊形。
select ST_AsEWKT(ST_Difference(geomfromText('POLYGON((1 1,2 3,3 4,3 1,11))'),geomfromText('POLYGON((2 0,2 2,5 2,1 3,2 0))')))

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

ST_LineMerge(geometry)

合並為線


4 ,Geometry Accessors

ST_AsText(geometry)
將幾何空間數據。轉換成easy理解的空間數據文本格式。
比如:
(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),(12,2 3,4 5))'))
返回的類型為 MULTILINESTRING。

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM