PostGIS中的常用函數
圖形和地理位置
-
ST_GeometryType(geometry) —— 返回幾何圖形的類型
-
-
Geography(geometry)——將基於EPSG:4326(srid=4326)的geometry數據類型轉換為geography數據類型
-
ST_NDims(geometry) —— 返回幾何圖形的維數
-
ST_SRID(geometry) —— 返回幾何圖形的空間參考標識碼 srid
-
ST_SetSRID(geometry,SRID)——設置srid
-
sum(expression) ——返回一個計算式/表達式的和
-
count(expression) ——返回一個表達式中的次數
PS : geometry,是幾何類型的列的列名
srid,不同的srid就是不同標准的坐標系
點空間函數:
-
ST_X(geometry) —— 返回X坐標
-
ST_Y(geometry) —— 返回Y坐標
線串空間函數:
-
ST_Length(geometry) —— 返回線串的長度
-
ST_StartPoint(geometry) —— 將線串的第一個坐標作為點返回
-
ST_EndPoint(geometry) —— 將線串的最后一個坐標作為點返回
-
ST_NPoints(geometry) —— 返回線串的坐標數量
多邊形空間函數:
-
ST_Area(geometry) —— 返回多邊形的面積
-
ST_NRings(geometry) —— 返回多邊形中環的數量(通常為1個,其他是孔)
-
ST_ExteriorRing(geometry) —— 以線串的形式返回多邊形最外面的環
-
ST_InteriorRingN(geometry, n) —— 以線串形式返回指定的內部環
-
ST_Perimeter(geometry) —— 返回所有環的長度
集合空間函數(多點、多線、多面、任意圖形組合):
-
ST_NumGeometries(geometry) —— 返回集合中的組成部分的數量
-
ST_GeometryN(geometry, n) —— 返回集合中指定的組成部分
-
ST_Area(geometry) —— 返回集合中所有多邊形組成部分的總面積
-
ST_Length(geometry) —— 返回所有線段組成部分的總長度
幾何圖形輸入和輸出
在數據庫中,幾何圖形(Geometry)以僅供PostGIS使用的格式存儲在磁盤上。為了讓外部程序插入和檢索有用的幾何圖形信息,需要將它們轉換為其他應用程序可以理解的格式。
①Well-known text(WKT)
-
ST_GeomFromText(text, srid) —— 返回geometry,除非指定SRID,否則將得到一個包含未知SRID的幾何圖形
-
ST_GeographyFromText(text)——返回Geography
-
ST_AsText(geometry) —— 返回text
-
ST_AsEWKT(geometry) —— 返回text
②Well-known binary(WKB)
-
ST_GeomFromWKB(bytea) —— 返回geometry
-
ST_AsBinary(geometry) —— 返回bytea
-
ST_AsEWKB(geometry) —— 返回bytea
③Geographic Mark-up Language(GML)
-
ST_GeomFromGML(text) —— 返回geometry
-
ST_ASGML(geometry) —— 返回text
④Keyhole Mark-up Language(KML)
-
ST_GeomFromKML(text) —— 返回geometry
-
ST_ASKML(geometry) —— 返回text
-
ST_AsGeoJSON(geometry) —— 返回text
⑥Scalable Vector Graphics(SVG)
-
ST_AsSVG(geometry) —— 返回text
以上函數最常見的用法是將幾何圖形的文本(text)表示形式轉換為內部表示形式
請注意,除了具有幾何圖形表示形式的文本參數外,還可以指定一個提供幾何圖形SRID的數字參數。
圖形關系
ST_Equals(geometry A, geometry B)
-
用於測試兩個圖形的空間相等性。
-
如果兩個相同類型的幾何圖形具有相同的x、y坐標值,即如果第二個圖形與第一個圖形的坐標信息相等(相同),則ST_Equals()返回TRUE。
ST_Intersects、ST_Disjoint、ST_Crosses和ST_Overlaps
-
ST_Intersects、ST_Crosses和ST_Overlaps測試幾何圖形是否相交。
-
如果兩個圖形有重合的部分,即如果它們的邊界或內部相交,則ST_Intersects(geometry A, geometry B)返回TRUE
-
ST_Disjoint(geometry A, geometry B),如果兩個幾何圖形沒有重合的部分,則它們不相交,反之亦然。事實上測試"not intersect"通常比測試"disjoint"更有效,因為intersect測試可以使用空間索引
-
對於multipoint/polygon、multipoint/linestring、linestring/linestring、linestring/polygon和linestring/multipolygon的比較,如果相交生成的幾何圖形的維度小於兩個源幾何圖形的最大維度,且相交集位於兩個源幾何圖形的內部,則ST_Crosses(geometry A, geometry B)將返回TRUE。
-
ST_Overlaps(geometry A, geometry B)比較兩個相同維度的幾何圖形,如果它們的結果集與兩個源幾何圖形都不同但具有相同維度,則返回TRUE。
ST_Touches()
-
測試兩個幾何圖形是否在它們的邊界上接觸,但在它們的內部不相交
-
如果兩個幾何圖形的邊界相交,或者只有一個幾何圖形的內部與另一個幾何圖形的邊界相交,則ST_Touches(geometry A, geometry B)將返回TRUE
ST_Within和ST_Contains
-
ST_Within()和ST_Contains()測試一個幾何圖形是否完全位於另一個幾何圖形內
-
如果第一個幾何圖形完全位於第二個幾何圖形內,則ST_Within(geometry A, geometry B)返回TRUE,ST_Within()測試的結果與ST_Contains()完全相反
-
如果第二個幾何圖形完全包含在第一個幾何圖形內,則ST_Contains(geometry A, geometry B)返回TRUE
ST_Distance和ST_DWithin
-
ST_Distance(geometry A, geometry B)計算兩個幾何圖形之間的最短距離,並將其作為浮點數返回。這對於實際報告幾何圖形之間的距離非常有用
-
ST_DWithin(),測試兩個幾何圖形之間的距離是否在某個范圍之內,
geography類型
-
ST_AsText(geography) returns
text
-
ST_GeographyFromText(text) returns
geography
-
ST_AsBinary(geography) returns
bytea
-
ST_GeogFromWKB(bytea) returns
geography
-
ST_AsSVG(geography) returns
text
-
ST_AsGML(geography) returns
text
-
ST_AsKML(geography) returns
text
-
ST_AsGeoJson(geography) returns
text
-
ST_Distance(geography, geography) returns
double
-
ST_DWithin(geography, geography, float8) returns
boolean
-
ST_Area(geography) returns
double
-
ST_Length(geography) returns
double
-
ST_Covers(geography, geography) returns
boolean
-
ST_CoveredBy(geography, geography) returns
boolean
-
ST_Intersects(geography, geography) returns
boolean
-
ST_Buffer(geography, float8) returns
geography
[1] -
ST_Intersection(geography, geography) returns
geography
[1]
geography轉換為geometry
PostgreSQL的類型轉換語法是將 ::typename 附加到希望轉換的值的末尾。因此,2::text將數字2轉換為文本字符串"2";'POINT(0 0)' :: geometry將點的文本表示形式轉換為geometry點