暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pg_sphere

成子 2023-08-16
136

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)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论