PostgreSQL 9.3.1 文档 | ||||
---|---|---|---|---|
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页 |
earthdistance模块提供两个不同的方法计算地球表面上的大圆弧距离。 描述的第一个依赖于cube模块(必须在earthdistance 可以安装之前安装)。第二个基于内建的point数据类型, 使用经线和纬线作为坐标。
在这个模块,假设地球为完美的球形。(如果对你来说太不准确,你可能想查阅 PostGIS项目。)
数据存储在立方体中,点用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 的第二个检查应该包含在查询中。
|
模块的第二部分依赖于用类型为point的值表示地球距离, 这里第一个组成部分用来表示以角度表示的经度,第二个组成部分用来表示以角度表示的纬度。 点被当做是(经度, 纬度)并且反过来不行,因为经度为X轴纬度为Y轴。
提供了一个操作符,在表 F-5中显示。
请注意,不像基于cube部分的模块,这里的单元是硬链接的:
改变earth()
函数将不会影响这个操作符的结果。
经度/纬度表示法的一个缺点是:你必须注意靠近两极和接近+/- 180度经线的边界条件。 基于cube的表示法避免了这些间断点。