2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

8.8. 幾何型別 #

幾何資料型別表示二維空間物件。 表 8.20 顯示了 PostgreSQL 中可用的幾何型別。

表 8.20. 幾何型別

名稱 儲存大小 描述 表示
point 16 位元組 平面上的點 (x,y)
line 24 位元組 無限直線 {A,B,C}
lseg 32 位元組 有限線段 [(x1,y1),(x2,y2)]
box 32 位元組 矩形框 (x1,y1),(x2,y2)
path 16+16n 位元組 閉合路徑(類似於多邊形) ((x1,y1),...)
path 16+16n 位元組 開放路徑 [(x1,y1),...]
polygon 40+16n 位元組 多邊形(類似於閉合路徑) ((x1,y1),...)
circle 24 位元組 <(x,y),r> (中心點和半徑)

在所有這些型別中,單個座標都儲存為 double precision (float8) 數字。

提供了一套豐富的函式和運算子來執行各種幾何操作,例如縮放、平移、旋轉和確定交點。它們在 第 9.11 節 中進行了說明。

8.8.1. 點 #

點是幾何型別的基本二維構建塊。 point 型別的值可以使用以下任一語法指定:

( x , y )
  x , y

其中 xy 分別是座標,以浮點數表示。

點使用第一種語法輸出。

8.8.2. 線 #

線由線性方程 Ax + By + C = 0 表示,其中 AB 不都為零。 line 型別的值以以下形式輸入和輸出:

{ A, B, C }

或者,輸入時可以使用以下任一形式:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中 (x1,y1)(x2,y2) 是線上的兩個不同點。

8.8.3. 線段 #

線段由作為線段端點的點對錶示。 lseg 型別的值使用以下任一語法指定:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中 (x1,y1)(x2,y2) 是線段的端點。

線段使用第一種語法輸出。

8.8.4. 矩形 #

矩形由作為矩形對角的點對錶示。 box 型別的值使用以下任一語法指定:

( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中 (x1,y1)(x2,y2) 是矩形的任意兩個對角。

矩形使用第二種語法輸出。

輸入時可以提供任意兩個對角,但值將根據需要重新排序,以儲存右上角和左下角,順序如此。

8.8.5. 路徑 #

路徑由連線點的列表表示。路徑可以是 開放 的,其中列表中的第一個點和最後一個點被認為不連線;也可以是 閉合 的,其中第一個點和最後一個點被認為連線。

path 型別的值使用以下任一語法指定:

[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( ( x1 , y1 ) , ... , ( xn , yn ) )
  ( x1 , y1 ) , ... , ( xn , yn )
  ( x1 , y1   , ... ,   xn , yn )
    x1 , y1   , ... ,   xn , yn

其中點是構成路徑的線段的端點。方括號([])表示開放路徑,而圓括號(())表示閉合路徑。當省略最外層的圓括號時,如第三種到第五種語法所示,則假定為閉合路徑。

路徑根據適用情況使用第一種或第二種語法輸出。

8.8.6. 多邊形 #

多邊形由點列表(多邊形的頂點)表示。多邊形與閉合路徑非常相似;關鍵的語義區別在於,多邊形被認為包含其內部區域,而路徑則不包含。

多邊形和路徑之間的一個重要實現區別在於,多邊形的儲存表示包括其最小邊界框。這可以加速某些搜尋操作,儘管在構造新多邊形時計算邊界框會增加開銷。

polygon 型別的值使用以下任一語法指定:

( ( x1 , y1 ) , ... , ( xn , yn ) )
  ( x1 , y1 ) , ... , ( xn , yn )
  ( x1 , y1   , ... ,   xn , yn )
    x1 , y1   , ... ,   xn , yn

其中點是構成多邊形邊界的線段的端點。

多邊形使用第一種語法輸出。

8.8.7. 圓 #

圓由中心點和半徑表示。 circle 型別的值使用以下任一語法指定:

< ( x , y ) , r >
( ( x , y ) , r )
  ( x , y ) , r
    x , y   , r

其中 (x,y) 是中心點,r 是圓的半徑。

圓使用第一種語法輸出。

提交更正

如果您在文件中發現任何不正確的內容、與您對特定功能的體驗不符的內容,或者需要進一步澄清的內容,請使用 此表單 報告文件問題。