PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# 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` `<@>` `point` | `float8` | 给出地球表面两点之间的法定英里距离。

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

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

上一页 | 起始页 | 下一页
dummy_seclabel | 上一级 | file_fdw