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