pg_sphere adalah ekstensi open-source PostgreSQL yang mendukung tipe data sferis, fungsi, dan operator. Ekstensi ini memungkinkan Anda merepresentasikan objek pada bola seperti titik, garis, dan poligon di Bumi serta melakukan perhitungan jarak atau luas antar objek tersebut.
Prasyarat
Versi berikut dari PolarDB for PostgreSQL didukung:
PostgreSQL 16 (versi mesin minor 2.0.16.9.6.0 atau lebih baru)
PostgreSQL 14 (versi mesin minor 2.0.14.5.1.0 atau lebih baru)
PostgreSQL 11 (versi mesin minor 2.0.11.9.27.0 atau lebih baru)
Anda dapat memeriksa versi mesin minor di console atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor Anda tidak memenuhi persyaratan, Anda perlu melakukan peningkatan versi mesin minor.
Prosedur
Instalasi atau penghapusan ekstensi
Instalasi ekstensi.
CREATE EXTENSION pg_sphere;Hapus ekstensi.
DROP EXTENSION pg_sphere;
Tipe data
Ekstensi pg_sphere mendukung tipe objek berikut:
Titik
Transformasi Euler
Lingkaran
Garis
Elips
Jalur
Poligon
Contoh berikut menunjukkan cara membuat objek titik. Anda dapat merepresentasikan titik pada sebuah bola dalam salah satu dari tiga cara berikut:
Tentukan lokasi berdasarkan bujur dan lintang dalam radian.
SELECT spoint '(0.1,-0.2)';Outputnya adalah:
spoint -------------- (0.1 , -0.2) (1 row)Tentukan lokasi berdasarkan bujur dan lintang dalam derajat.
SELECT spoint '( 10.1d, -90d)';Outputnya adalah:
spoint ---------------------------------------- (0.176278254451427 , -1.5707963267949) (1 row)Tentukan bujur dan lintang menggunakan derajat, menit, dan detik (DMS).
SELECT spoint '( 10d 12m 11.3s, -13d 14m)';Outputnya adalah:
spoint ------------------------------------------ (0.178078367649387 , -0.230965237680583) (1 row)CatatanSebuah lingkaran dibagi menjadi 360 derajat. Satu derajat dibagi menjadi 60 menit. Satu menit dibagi menjadi 60 detik.
Konstruktor
Konstruktor digunakan untuk membuat tipe data sferis seperti Titik, Transformasi Euler, Lingkaran, Garis, Elips, Jalur, dan Poligon dari tipe data lainnya.
Contoh berikut mengonstruksi titik sferis dari bujur dan lintang. Titik yang dihasilkan memiliki bujur 270 derajat dan lintang -30 derajat.
SELECT spoint (270.0 * pi() / 180.0, -30.0 * pi() / 180.0) AS spoint;Outputnya adalah:
spoint
-----------------------------------------
(4.71238898038469 , -0.523598775598299)
(1 row)Operator
Ekstensi pg_sphere mendukung operator berikut:
Casting mengacu pada proyeksi.
Kesetaraan
Mengandung dan tumpang tindih
Persilangan garis
Jarak
Panjang dan keliling
Pusat
Contoh berikut menggunakan operator jarak untuk menghitung jarak antara dua lingkaran.
SELECT 180 * ( scircle '<(0d,20d),2d>' <-> scircle '<(0d,40d),2d>' ) / pi() AS dist;Outputnya adalah:
dist
------
16
(1 row)Fungsi
Ekstensi pg_sphere mendukung fungsi perhitungan berikut:
Fungsi perhitungan area
Fungsi perhitungan jalur
Fungsi perhitungan jarak
Contoh berikut menunjukkan cara menggunakan fungsi perhitungan area dan fungsi perhitungan titik.
Hitung area lingkaran sferis dalam satuan
pi.SELECT area( scircle '<(0d,90d),60d>' ) / pi() AS area;Outputnya adalah:
area ------ 1 (1 row)Ambil bujur dan lintang titik sferis dalam derajat.
CatatanDalam ekstensi pg_sphere, fungsi
long(spoint)telah diubah menjadilong_sphere(spoint).SELECT long_sphere ( spoint '(10d,20d)' ) * 180.0 / pi() AS longitude;Outputnya adalah:
longitude ------------ 10 (1 row)SELECT lat ( spoint '(10d,20d)' ) * 180.0 / pi() AS latitude;Outputnya adalah:
latitude ---------- 20 (1 row)
Referensi
Untuk informasi lebih lanjut, lihat dokumentasi resmi pg_sphere.