pg_sphere
球面对象函数、运算符与索引支持
仓库
postgrespro/pgsphere
https://github.com/postgrespro/pgsphere
源码
pgsphere-1.5.2.tar.gz
pgsphere-1.5.2.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgsphere | 1.5.2 | TYPE | BSD 3-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3590 | pg_sphere | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | postgis q3c earthdistance prefix semver unit pgpdf pglite_fusion |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.5.2 | 1817161514 | pgsphere | - |
| RPM | PIGSTY | 1.5.2 | 1817161514 | pgsphere_$v | - |
| DEB | PGDG | 1.5.2 | 1817161514 | postgresql-$v-pgsphere | - |
构建
您可以使用 pig build 命令构建 pgsphere 扩展的 RPM 包:
pig build pkg pgsphere # 构建 RPM 包
安装
您可以直接安装 pgsphere 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pgsphere; # 当前活跃 PG 版本安装
pig ext install -y pgsphere -v 18 # PG 18
pig ext install -y pgsphere -v 17 # PG 17
pig ext install -y pgsphere -v 16 # PG 16
pig ext install -y pgsphere -v 15 # PG 15
pig ext install -y pgsphere -v 14 # PG 14
dnf install -y pgsphere_18 # PG 18
dnf install -y pgsphere_17 # PG 17
dnf install -y pgsphere_16 # PG 16
dnf install -y pgsphere_15 # PG 15
dnf install -y pgsphere_14 # PG 14
apt install -y postgresql-18-pgsphere # PG 18
apt install -y postgresql-17-pgsphere # PG 17
apt install -y postgresql-16-pgsphere # PG 16
apt install -y postgresql-15-pgsphere # PG 15
apt install -y postgresql-14-pgsphere # PG 14
创建扩展:
CREATE EXTENSION pg_sphere;
用法
pg_sphere 扩展提供球面几何类型和运算,适用于天文学、地理空间以及其他涉及球面坐标的应用。
CREATE EXTENSION pg_sphere;
数据类型
- 球面点(
spoint):球面上的位置(经度、纬度,单位弧度) - 球面圆(
scircle):由圆心和半径定义的圆形区域 - 球面线(
sline):大圆弧段 - 球面椭圆(
sellipse):球面上的椭圆区域 - 球面多边形(
spoly):球面上的多顶点形状 - 球面路径(
spath):连续点的序列 - 球面框(
sbox):球面上的边界框
核心运算
- 成员测试(点在多边形内、点在圆内等)
- 球面对象之间的重叠检测
- 周长和面积计算
- 使用欧拉角进行坐标变换的对象旋转
- 球面对象之间的距离计算
索引支持
- GiST 索引:用于高效空间查询的 R 树实现
- BRIN 索引:用于大型数据集的块范围索引
输入/输出
该扩展处理天文学和地理空间应用中常用的各种坐标格式的输入输出,包括度、弧度以及 HMS/DMS 记法。
-- 创建球面点(赤经,赤纬)
SELECT spoint '(10.25d, 45.5d)';
-- 创建球面圆(圆心,半径)
SELECT scircle '<(10.25d, 45.5d), 1d>';
-- 检查包含关系
SELECT spoint '(10.25d, 45.5d)' @ scircle '<(10d, 45d), 2d>';