On this page
F.13. earthdistance
earthdistance
模块提供了两种不同的方法来计算地球表面上的大圆周距离。首先描述的模块取决于cube
模块(必须安装*,然后才能安装earthdistance
)。第二种基于内置的point
数据类型,将经度和纬度用作坐标。
在此模块中,假定地球是完美球形。 (如果这对您来说不太准确,则您可能需要查看PostGIS项目。)
F.13.1. 基于立方体的地球距离
数据存储在点(两个角都相同)的多维数据集中,它们使用 3 个坐标表示距地球中心的 x,y 和 z 距离。提供了earth
超过cube
的域,其中包括约束检查,以确保该值满足这些限制并且合理地接近地球的实际表面。
地球的半径是通过earth()
函数获得的。它以米为单位。但是通过更改此功能,您可以更改模块以使用其他一些单位,或者使用您认为更合适的半径值。
该软件包也适用于天文数据库。天文学家可能想更改earth()
以返回180/pi()
的半径,以便距离以度为单位。
提供功能以支持纬度和经度(以度为单位)的 Importing,支持纬度和经度的输出,计算两点之间的大圆距离并轻松指定可用于索引搜索的边界框。
所提供的功能在Table F.5中显示。
表 F.5.基于立方体的地球距离函数
F.13.2. 基于点的地球距离
模块的第二部分依赖于将地球位置表示为point
类型的值,其中第一个分量表示度数(经度),第二个分量表示度数的纬度。点被视为(经度,纬度),反之亦然,因为经度更接近 x 轴和 y 轴的直觉性。
提供了一个操作符,如Table F.6所示。
表 F.6.基于点的地球距离 operator
Operator | Returns | Description |
---|---|---|
point <@> point |
float8 |
给出地球表面两点之间的法定英里距离。 |
请注意,与模块中基于cube
的部分不同,此处将单元进行硬接线:更改earth()
函数不会影响此运算符的结果。
经度/纬度表示的一个缺点是,您需要注意极点附近和经度 180 度附近的边缘条件。基于cube
的表示避免了这些不连续性。