全部產品
Search
文件中心

PolarDB:pg_sphere(球面資料計算)

更新時間:Aug 09, 2025

pg_sphere是支援球形資料類型、計算函數和操作符的開源PostgreSQL外掛程式。主要解決球形(例如,地球)對象上的點、線、面如何表示的問題,同時支援計算點、線、面之間的距離或面積等功能。

前提條件

支援的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 16(核心小版本2.0.16.9.6.0及以上)

  • PostgreSQL 14(核心小版本2.0.14.5.1.0及以上)

  • PostgreSQL 11(核心小版本2.0.11.9.27.0及以上)

說明

您可在控制台查看核心小版本號碼,也可以通過SHOW polardb_version;語句查看。如未滿足核心小版本要求,請升級核心小版本

使用指南

安裝/卸載外掛程式

  • 安裝外掛程式。

    CREATE EXTENSION pg_sphere;
  • 卸載外掛程式。

    DROP EXTENSION pg_sphere;

資料類型

pg_sphere外掛程式支援以下類型的對象:

  • Point:點。

  • Euler transformation:歐拉變換。

  • Circle:圓。

  • Line:線。

  • Ellipses:橢圓。

  • Path:路徑。

  • Polygon:多邊形。

以Point為例來說明如何建立對象。球面上的點有以下三種表示方法:

  • 用經度和緯度指定位置,單位為弧度。

    SELECT spoint '(0.1,-0.2)';

    顯示結果如下:

        spoint
    --------------
     (0.1 , -0.2)
    (1 row)
  • 用經度和緯度指定位置,單位為度。

    SELECT spoint '( 10.1d, -90d)';

    顯示結果如下:

                     spoint
    ----------------------------------------
     (0.176278254451427 , -1.5707963267949)
    (1 row)
  • 使用DMS(度、分、秒)來標識經度和緯度。

    SELECT spoint '( 10d 12m 11.3s, -13d 14m)';

    顯示結果如下:

                      spoint                  
    ------------------------------------------
     (0.178078367649387 , -0.230965237680583)
    (1 row)
    說明

    將圓周360等分,一等分對應的圓心角是1度。將1度對應的弧長60等分,一等分對應的圓心角是1分。將1分對應的弧長60等分,一等分對應的圓心角是1秒。

構造器

構造器用於通過其他資料類型來構造球形資料類型,構造器支援Point、Euler transformation、Circle、Line、Ellipses、Path、Polygon等類型。

以Point為例來說明如何建立。通過經緯度來構造球形點(得到一個經度為270,緯度為-30的球面位置):

SELECT spoint (270.0 * pi() / 180.0, -30.0 * pi() / 180.0) AS spoint;

顯示結果如下:

                 spoint
-----------------------------------------
 (4.71238898038469 , -0.523598775598299)
(1 row)

操作符

pg_sphere外掛程式支援以下操作符:

  • Casting:投影。

  • Equality:相等。

  • Contain and overlap:包含和重疊。

  • Crossing of lines:線條相交。

  • Distance:距離。

  • Length and circumference:長度和周長。

  • Center:中點。

以Distance為例計算兩個圓之間的距離。

SELECT 180 * ( scircle '<(0d,20d),2d>' <-> scircle '<(0d,40d),2d>' ) / pi() AS dist;

顯示結果如下:

 dist
------
   16
(1 row)

函數

pg_sphere外掛程式支援以下計算函數:

  • 面積計算函數。

  • 路徑計算函數。

  • 距離計算函數。

以面積計算函數和點計算函數為例,說明如何使用函數。

  • pi為單位計算一個球形的面積。

    SELECT area( scircle '<(0d,90d),60d>' ) / pi() AS area;

    顯示結果如下:

     area 
    ------
        1
    (1 row)
  • 擷取一個球形點的經度和緯度,單位為度。

    說明

    pg_sphere外掛程式中的long(spoint)函數已更改為long_sphere(spoint)函數。

    • SELECT long_sphere ( spoint '(10d,20d)' ) * 180.0 / pi() AS longitude;

      顯示結果如下;

      longitude
      ------------
      10
      (1 row)
    • SELECT lat ( spoint '(10d,20d)' ) * 180.0 / pi() AS latitude;

      顯示結果如下:

      latitude
      ----------
      20
      (1 row)

相關參考

pg_sphere的詳細說明可參考pg_sphere官方協助文檔