我知道空间包考虑地球的近似曲率,但如果一个位置位于山顶,而另一个位置靠近海洋 - 如果海拔高度没有被考虑在内,那么这两个点之间的计算差异似乎会很大。
此外,请注意,如果我有2个点处于相同的海拔高度,但之间存在一座山 - 距离包应该考虑到这一点。
如果您使用的距离公式不将两点的高度作为参数(除了两点的纬度和经度),那么它就不会将高度因素考虑在距离计算中。无论如何,高度差对计算距离的影响并不是非常显著。
通常情况下,对于GPS而言,高度差所造成的距离计算误差可能比大多数商用GPS设备的误差还要小,因此在大多数应用中,可以安全地忽略高度(尽管商用GPS设备本身的高度测量精度相当低,但是关于高度的测量数据是相当准确的)。
PostgreSQL在计算距离时不考虑高度。所有的计算都是在一个平面表面上完成的。
大多数数据库空间包都不会考虑这一点,但如果你的点是三维的,即具有Z坐标,则可能会发生。
我没有在这台机器上安装PostgreSQL,但可以试试这个方法。
SELECT ST_DISTANCE(ST_POINT(0,0,10),ST_POINT(0,0,0));
很容易知道它是否考虑了您的Z值,因为返回值应该是> 0;如果确实如此,只需创建具有Z感知功能的特性,您就会成功。
例如,SQL SERVER 2008在计算距离时考虑了地理要素在球体中的位置。而在SQL SERVER中,几何要素始终使用平面计算。
编辑:在PostGIS手册中检查了此内容
对于具有Z感知的点,必须使用ST_MakePoint函数。它最多可接受4个参数(X Y Z和M)。St_POINT仅需要两个参数(X Y)。
http://postgis.refractions.net/documentation/manual-1.4/ST_Distance.html ST_DISTANCE = 2D计算
ST_DISTANCE_SPHERE文档(考虑到固定球体进行计算 - 即非平面) http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Sphere.html
ST_DISTANCE_SPHEROID文档(考虑到选择的椭球体进行计算) http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Spheroid.html
ST_POINT文档 http://postgis.refractions.net/documentation/manual-1.4/ST_Point.html