Jason ---分享,共同進(jìn)步

          激情成就夢(mèng)想,努力創(chuàng)造未來(lái)
          隨筆 - 53, 文章 - 1, 評(píng)論 - 45, 引用 - 0
          數(shù)據(jù)加載中……

          POSTGIS常用函數(shù)

          Management Functions

          1,基本操作函數(shù)


          AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)
          給一個(gè)已存在屬性數(shù)據(jù)表增加一個(gè)幾何字段(geomtry column)。schema_name 指表的模式的名字,srid 必須是一個(gè)整數(shù)指對(duì)應(yīng)于 SPATIAL_REF_SYS 表,type必須是一個(gè)大寫的字符串,用來(lái)描述幾何類型,例如:'POLYGON' 或者 'MULTILINESTRING'。

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

          ST_SetSRID(geometry, integer)
          給一個(gè)幾何對(duì)象(geometry)設(shè)置一個(gè)整型的SRID,對(duì)于在一個(gè)范圍內(nèi)的查詢非常有用。 
           
          2. Geometry Relationship Functions
             幾何空間數(shù)據(jù)關(guān)系函數(shù)

          ST_Distance(geometry, geometry)
          返回兩個(gè)幾何對(duì)象的距離(笛卡兒距離),不使用索引。 
           
          ST_DWithid(geometry, geometry, float)
          如果一個(gè)幾何對(duì)象(geometry)在另一個(gè)幾何對(duì)象描述的距離(float)內(nèi),返回TRUE。如果有索引,會(huì)用到索引。

          ST_Equals(geometry, geometry)
          如果兩個(gè)空間對(duì)象相等,則返回TRUE。用這個(gè)函數(shù)比用“=”更好,例如:
          equals('LINESTRING(0 0, 10 10)','LINESTRING(0 0, 5 5, 10 10)') 返回 TRUE。

          ST_Disjoint(geometry, geometry)
          如果兩個(gè)對(duì)象不相連,則返回TRUE。不要使用GeometryCollection作為參數(shù)。

          ST_Intersects(geometry, geometry)
          判斷兩個(gè)幾何空間數(shù)據(jù)是否相交,如果相交返回true,不要使用GeometryCollection作為參數(shù)。
          Intersects(g1, g2 ) --> Not (Disjoint(g1, g2 ))
          不使用索引可以用_ST_Intersects.

          ST_Touches(geometry, geometry)
          如果兩個(gè)幾何空間對(duì)象存在接觸,則返回TRUE。不要使用GeometryCollection作為參數(shù)。
          a.Touches(b) -> (I(a) intersection I(b) = {empty set} ) and (a intersection b) not empty
          不使用索引可以用_ST_Touches.

          ST_Crosses(geometry, geometry)
          如果兩個(gè)幾何空間對(duì)象存在交叉,則返回TRUE。不要使用GeometryCollection作為參數(shù)。
          不使用索引可以用_ST_Crosses.

          ST_Within(geometry A, geometry B)
          如果幾何空間對(duì)象A存在空間對(duì)象B中,則返回TRUE,不要使用GeometryCollection作為參數(shù)。
          不使用索引可以用_ST_Within

          ST_Overlaps(geometry, geometry)
          如果兩個(gè)幾何空間數(shù)據(jù)存在交迭,則返回 TRUE,不要使用GeometryCollection作為參數(shù)。
          不使用索引可以用_ST_Overlaps.

          ST_Contains(geometry A, geometry B)
          如果幾何空間對(duì)象A包含空間對(duì)象B,則返回 TRUE,不要使用GeometryCollection作為參數(shù)。
          這個(gè)函數(shù)類似于ST_Within(geometry B, geometry A)
          不使用索引可以用_ST_Contains.

          ST_Covers(geometry A, geometry B)
          如果幾何空間對(duì)象B中的所有點(diǎn)都在空間對(duì)象A中,則返回 TRUE。
          不要使用GeometryCollection作為參數(shù)。
          不使用索引可以用_ST_Covers.

          ST_CoveredBy(geometry A, geometry B)
          如果幾何空間對(duì)象A中的所有點(diǎn)都在空間對(duì)象B中,則返回 TRUE。

          3,Geometry Processing Functions
          幾何空間數(shù)據(jù)處理函數(shù)

          ST_Centroid(geometry)
          返回質(zhì)心點(diǎn),就是根據(jù)幾何空間數(shù)據(jù),活動(dòng)該幾何空間數(shù)據(jù)的中心點(diǎn),返回一個(gè)空間點(diǎn)數(shù)據(jù).

          ST_Area(geometry)
          如果幾何空間數(shù)據(jù)為多邊形,或者多多邊形,則返回空間數(shù)據(jù)的外圍(返回類型double precision) ;

          ST_Length(geometry)
          這個(gè)曲線在其相關(guān)的空間參考長(zhǎng)度(返回類型double precision) ;

          ST_PointOnSurface(geometry)
          一定在幾何空間線數(shù)據(jù)上的點(diǎn),返回一個(gè)數(shù)據(jù)點(diǎn)

          ST_Buffer(geometry, double, [integer])
          buffer操作一個(gè)很有用函數(shù),
          這個(gè)函數(shù)的第一個(gè)參數(shù)是要操作的空間幾何數(shù)據(jù),第二個(gè)參數(shù)長(zhǎng)度(距離),第三個(gè)參數(shù)為一個(gè)整型,
          這個(gè)函數(shù)返回一個(gè)空間數(shù)據(jù)類型,以當(dāng)前第一個(gè)參數(shù)空間幾何數(shù)據(jù)為參考點(diǎn),返回小于等于距離的空間

          幾何數(shù)據(jù)點(diǎn),最后由這些點(diǎn)組成一個(gè)多邊形空間數(shù)據(jù),最后一個(gè)參數(shù)表示
          在組成一個(gè)1/4圓的有幾個(gè)點(diǎn)分隔。也就是說(shuō)如果最好一個(gè)參數(shù)為8那么這個(gè)最后組成的多邊形就是32邊

          的多邊形,如果不指定這個(gè)參數(shù),系統(tǒng)默認(rèn)的是8
          注意:第二個(gè)參數(shù),距離它的單位為空間數(shù)據(jù)單位(度),在運(yùn)算時(shí)需要進(jìn)行單位換算,最后轉(zhuǎn)換成度

          ,單位的換算關(guān)系如下:
          1英里= 63360 米
          1米=1/1852 海里
          1海里= 1/60度
          如果要進(jìn)行具體的運(yùn)算,需要進(jìn)行一下單位換算,比如要求一個(gè)500米的范圍,那么應(yīng)該是

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

          ST_Envelope(geometry)
          這個(gè)函數(shù)可以返回mbr(空間最小外包矩形),傳入?yún)?shù)可以是point line polygon。


          ST_extent(geometry set)
          這個(gè)函數(shù)可以對(duì)一個(gè)空間數(shù)據(jù)集進(jìn)行操作,返回一個(gè)最小包含矩形(mbr).
          如:SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY


          ST_Difference(geometry A, geometry B)
          返回一個(gè)幾何空間數(shù)據(jù)A不同于空間數(shù)據(jù)B的幾何空間數(shù)據(jù)類型,不要使用GeometryCollection作為參數(shù)。
          也就是說(shuō),如果A為一個(gè)line,B也為一個(gè)line,那么他們返回的類型就是B把A分割的多線。
          如:
          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))
          如果是A和B都是一個(gè)POLYGON多邊形,那么返回的就是多多邊形,如果相交,那么返回的就是B把A分割,并且不再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)
          返回一個(gè)合并的幾何空間數(shù)據(jù),將兩個(gè)幾何空間數(shù)據(jù)合并為一個(gè)幾何空間數(shù)據(jù),或者GeometryCollection,不要使用GeometryCollection作為參數(shù)。


          4 ,Geometry Accessors

          ST_AsText(geometry)
          將幾何空間數(shù)據(jù),轉(zhuǎn)換成容易理解的空間數(shù)據(jù)文本格式,
          例如:
          (0,0 0,1 1,1 1,0 0,0)
          轉(zhuǎn)換后應(yīng)該是這樣的結(jié)果 POLYGON(0 0,0 1,1 1,1 0,0 0)

          ST_SRID(geometry)
          返回當(dāng)前幾何空間數(shù)據(jù)的SRID值

          ST_IsClosed(geometry)
          判斷幾何空間數(shù)據(jù)是否是閉合,就是判斷起始點(diǎn)和終點(diǎn)坐標(biāo)是相同的,如果是相同的返回true,否則返回false.

          ST_IsRing(geometry)
          這個(gè)函數(shù)參數(shù)的對(duì)象是line,判斷起始點(diǎn)和終點(diǎn)坐標(biāo)是否相同,
          如果閉合(這個(gè)曲線除了起始點(diǎn)和終點(diǎn)相同外,沒有其他相交點(diǎn))怎返回true,否則false,

          ST_NumPoints(geometry)
          返回幾何空間數(shù)據(jù)lineString上的第一條線上點(diǎn)的個(gè)數(shù)。


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


           

          posted on 2008-03-24 16:46 agun 閱讀(7829) 評(píng)論(5)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

          評(píng)論

          # re: POSTGIS常用函數(shù)[未登錄]  回復(fù)  更多評(píng)論   

          很好的文章,關(guān)注
          2008-03-25 09:30 | test

          # re: POSTGIS常用函數(shù)  回復(fù)  更多評(píng)論   

          很好的東西,看看
          2008-04-25 10:23 | 路過(guò)

          # re: POSTGIS常用函數(shù)  回復(fù)  更多評(píng)論   

          請(qǐng)問一下,hibernate里的HQL支持POSTGIS函數(shù)嗎????
          2008-07-15 10:01 | ads

          # re: POSTGIS常用函數(shù)  回復(fù)  更多評(píng)論   

          呵呵,HQL應(yīng)該不支持,即使不是POSTGIS函數(shù),自定義函數(shù)也要自己聲明定義的。
          2008-07-15 11:28 | agun

          # re: POSTGIS常用函數(shù)  回復(fù)  更多評(píng)論   

          a nice article
          2009-06-18 22:19 | raymond
          主站蜘蛛池模板: 长顺县| 札达县| 河北区| 陇川县| 沙雅县| 九龙坡区| 清原| 梅河口市| 肥城市| 嘉鱼县| 勃利县| 额济纳旗| 隆化县| 芒康县| 成都市| 乐清市| 河津市| 巧家县| 柳林县| 耒阳市| 马边| 南京市| 剑河县| 伊金霍洛旗| 张家川| 呼玛县| 平江县| 扶绥县| 镇原县| 竹北市| 高碑店市| 中阳县| 宣城市| 临安市| 茶陵县| 静安区| 襄垣县| 城口县| 霍邱县| 东丽区| 江永县|