pg_sphere

更新時間:
Copy as MD

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

前提條件

支援的PolarDB PostgreSQL版本如下:
  • PostgreSQL 14(核心小版本14.5.1.0及以上)
  • PostgreSQL 11(核心小版本1.1.27及以上)
說明 您可通過如下語句查看PolarDB PostgreSQL的核心小版本的版本號碼:
  • PostgreSQL 14
    select version();
  • PostgreSQL 11
    show polar_version;

使用指南

  • 開啟或關閉外掛程式
    • 開啟外掛程式。
      CREATE EXTENSION pg_sphere;
    • 關閉外掛程式。
      DROP EXTENSION pg_sphere;
  • 数据类型
    pg_sphere外掛程式支援以下類型的對象:
    • Point:點
    • Euler transformation:歐拉變換
    • Circle:圓
    • Line:線
    • Ellipses:橢圓
    • Path:路徑
    • Polygon:多邊形
    Point為例進行說明。
    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.176278254451427 , -1.5707963267949)
      (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
      --------------------
       0.9999999999999997
      (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官方協助文檔