The earthdistance
模块提供了两种不同的方法来计算地球表面上的大圆距离。第一个描述的方法依赖于 cube
模块。第二个方法基于内置的 point
数据类型,使用经度和纬度作为坐标。
在这个模块中,地球被假设为完美的球体。(如果你觉得这个假设不够精确,你可以参考 PostGIS 项目。)
安装 earthdistance
之前必须先安装 cube
模块(虽然你可以使用 CASCADE
选项在 CREATE EXTENSION
命令中同时安装这两个模块)。
强烈建议 earthdistance
和 cube
安装在同一个模式中,并且该模式是未授予任何不可信用户 CREATE 权限的模式。否则,如果 earthdistance
的模式包含由恶意用户定义的对象,则存在安装时的安全风险。此外,在安装后使用 earthdistance
的函数时,整个搜索路径应该只包含受信任的模式。
数据存储在立方体中,这些立方体是点(两个角是相同的),使用 3 个坐标来表示相对于地球中心的 x、y 和 z 距离。提供了一个 域 earth
,它覆盖类型 cube
,其中包括约束检查,确保值符合这些限制并且与地球的实际表面非常接近。
地球的半径是从 earth()
函数中获得的。它是以米为单位。但通过更改这个函数,你可以将模块更改为使用其他单位,或者使用你认为更合适的半径值。
这个包也适用于天文数据库。天文学家可能希望更改 earth()
以返回 180/pi()
的半径,以便距离以度为单位。
提供了一些函数来支持输入纬度和经度(以度为单位),来支持输出纬度和经度,来计算两个点之间的大圆距离,以及轻松指定可用于索引搜索的边界框。
提供的函数如 表 F.4 所示。
表 F.4. 基于立方体的地球距离函数
模块的第二部分依赖于将地球上的位置表示为 point
类型的值,其中第一个分量表示以度为单位的经度,第二个分量表示以度为单位的纬度。点被视为(经度,纬度)而不是相反,因为经度更接近于 x 轴的直观概念,而纬度更接近于 y 轴的概念。
提供了一个运算符,如 表 F.5 所示。
表 F.5. 基于点的地球距离运算符
运算符 描述 |
---|
计算地球表面上两个点之间的距离,以英里为单位。 |
请注意,与模块的 cube
部分不同,这里单位是硬编码的: 更改 earth()
函数不会影响此运算符的结果。
经度/纬度表示法的一个缺点是,你需要注意极点附近和 +/- 180 度经度附近的边缘情况。基于 cube
的表示法避免了这些不连续性。
如果您在文档中发现任何错误,不符合您对特定功能的体验,或者需要进一步澄清,请使用 此表格 报告文档问题。