pg_sphere是支援球形資料類型、計算函數和操作符的開源PostgreSQL外掛程式。主要解決球形(例如,地球)對象上的點、線、面如何表示的問題,同時支援計算點、線、面之間的距離或面積等功能。
前提條件
使用指南
安裝/卸載外掛程式
安裝外掛程式。
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官方協助文檔。