pg_sphere拡張機能は、ネイティブPostgreSQLの球面データ型、関数、および演算子を提供します。 この拡張機能は、地球などの球上の点、線、および平面をどのように表現するか、および点、線、および平面間の距離または面積をどのように計算するかという問題を解決するために使用されます。
前提条件
pg_sphere拡張機能は、次のエンジンを実行するPolarDB for PostgreSQL (Compatible with Oracle) クラスターでサポートされています。
PolarDB for PostgreSQL (Oracle互換) 2.0 (バージョン2.0.14.1.0以降)
PolarDB for PostgreSQL (Oracle互換) 1.0 (バージョン1.1.27以降)
次のステートメントを実行して、PolarDB for PostgreSQL (Compatible with Oracle) クラスターのリビジョンバージョンを表示できます。
SHOW polar_version;使用量
pg_sphereエクステンションの作成または削除
pg_sphere拡張を作成します。
CREATE EXTENSION pg_sphere;pg_sphere拡張を削除します。
DROP EXTENSION pg_sphere;
データ型
pg_sphere拡張は、次のデータ型をサポートします。
ポイント
ユーラー変容
サークル
ライン
ELLIPSES
PATH
ポリゴン
以下の例では点を使用する。 球上の点を表現するには、3つの方法があります。
経度と緯度で位置を指定します。 単位: ラジアン。
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度です。 1度に対応する円弧長を60等分すると、1つの部分に対応する中心角は1分となります。 1分に対応するアーク長を60等分すると、1分に対応する中心角は1秒となります。
コンストラクター
コンストラクターは、他のデータ型を使用して球面データ型を構築できます。 コンストラクターは、POINT、EULER TRANSFORMATION、CIRCLE、LINE、ELLIPSES、PATH、およびPOLYGONのデータ型をサポートします。
次の例では、ポイントが使用されます。 経度と緯度を使用して球点を作成します。 経度が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拡張は、次の演算子をサポートします。
鋳造
平等
封じ込めとオーバーラップ
ラインの交差
距離
長さと円周
センター
距離は、次の例で2つの円の間の距離を計算するために使用されます。
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の詳細については、「ドキュメント」をご参照ください。