问题报告 纠错本页面

F.13. earthdistance

earthdistance模块提供两个不同的方法计算地球表面上的大圆弧距离。 描述的第一个依赖于cube模块(必须earthdistance 可以安装之前安装)。第二个基于内建的point数据类型, 使用经线和纬线作为坐标。

在这个模块,假设地球为完美的球形。(如果对你来说太不准确,你可能想查阅 PostGIS项目。)

F.13.1. 基于立方体的地球距离

数据存储在立方体中,点用3个坐标表示从地球中心到表面的x, y, z的距离。 提供一个在cube之上的域earth,包含检查约束, 值必须符合限制条件并且合理的接近地球的实际表面。

地球的半径从earth()函数获得。以米给出。 可以通过改变模块使用其他单元来改变这个函数,或者使用你觉得更合适的半径值。

这个包也应用到了天文数据库。天文学家可能想要改变earth(), 使其返回一个180/pi()的半径,这样距离可以用角度表示。

提供函数支持经纬度(以角度方式)输入、输出、计算两个点之间大圆弧的距离, 和容易的指定用于索引查询的边界框。

提供的函数在表 F-4里显示。

表 F-4. 基于立方体的地球距离函数

函数返回描述
earth()float8返回地球的假设半径。
sec_to_gc(float8)float8 将地球表面两点之间正常的直线(割线)距离转换为大圆弧的距离。
gc_to_sec(float8)float8 将地球表面两点之间的大圆弧的距离转换为正常的直线(割线)距离。
ll_to_earth(float8, float8)earth 以角度形式返回给定纬度(参数 1)和经度(参数 2)的地球表面点的位置。
latitude(earth)float8 以角度形式返回地球表面一个点的纬度。
longitude(earth)float8 以角度形式返回地球表面一个点的经度。
earth_distance(earth, earth)float8 返回地球表面两点之间的大圆弧距离。
earth_box(earth, float8)cube 返回一个适合于索引搜索的立方体,该立方体在一个给定位置的大圆弧距离里使用点的立方 @>操作符。在这个立方体中的某些点可能比指定的大圆弧距离的位置更远, 所以使用earth_distance的第二个检查应该包含在查询中。

F.13.2. 基于点的地球距离

模块的第二部分依赖于用类型为point的值表示地球距离, 这里第一个组成部分用来表示以角度表示的经度,第二个组成部分用来表示以角度表示的纬度。 点被当做是(经度, 纬度)并且反过来不行,因为经度为X轴纬度为Y轴。

提供了一个操作符,在表 F-5中显示。

表 F-5. 基于点的地球距离操作符

操作符返回描述
point <@> pointfloat8 给出地球表面两点之间的法定英里距离。

请注意,不像基于cube部分的模块,这里的单元是硬链接的: 改变earth()函数将不会影响这个操作符的结果。

经度/纬度表示法的一个缺点是:你必须注意靠近两极和接近+/- 180度经线的边界条件。 基于cube的表示法避免了这些间断点。