地图:计算两点之间的距离是否考虑海拔高度?

3
Postgres的空间插件或任何空间包是否在计算2个点之间的距离时考虑海拔高度?
我知道空间包考虑地球的近似曲率,但如果一个位置位于山顶,而另一个位置靠近海洋 - 如果海拔高度没有被考虑在内,那么这两个点之间的计算差异似乎会很大。
此外,请注意,如果我有2个点处于相同的海拔高度,但之间存在一座山 - 距离包应该考虑到这一点。

可能是重复问题:https://dev59.com/xnNA5IYBdhLWcg3wC5Xh - Reed Copsey
@Reed:我认为另一个问题有点类似,但他/她实际上是在问现有的软件包是否考虑了这一点,而不是如何考虑它。 - MusiGenesis
3个回答

3
这些因素根本没有被计算在内。为什么?软件只知道两个特征(您正在获取距离的两个点、球体/椭球体和数据/投影因子)。
要实现这一点,您可能需要使用开发的linestring,在其中将您的点连接到n个顶点,每个顶点都具有Z感知能力。
想象一下这个(松散的WKT):LINESTRING((0,1,2),(0,2,3),(0,3,4),(0,10,15),(0,11,-1))。
询问软件计算每个顶点之间的距离并将其总和起来,将考虑地形的变化。但是如果没有像这样的东西,就无法映射地形的不规则性。
所有GIS软件本身都无法告诉您地形中的那些不规则性,因此也不会考虑它们。
您可以使用ArcGIS(和其他软件)这样的软件自动创建这样的linestrings,使用一条线(两个点之间),以及NASA免费提供的表面文件,例如SRTM项目。这些文件以光栅格式提供,每个像素都具有X Y和Z值,以米为单位。穿越您想要的线路,并与该地形剖面相结合,您可以实现所需的计算。如果您需要进行超级精确的计算,则需要精确的表面和每个此配置文件线路顶点中的精确Z值。
这清楚了吗?

1

如果您使用的距离公式不将两点的高度作为参数(除了两点的纬度和经度),那么它就不会将高度因素考虑在距离计算中。无论如何,高度差对计算距离的影响并不是非常显著。

通常情况下,对于GPS而言,高度差所造成的距离计算误差可能比大多数商用GPS设备的误差还要小,因此在大多数应用中,可以安全地忽略高度(尽管商用GPS设备本身的高度测量精度相当低,但是关于高度的测量数据是相当准确的)。


1

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


@George,我在阅读你提供的链接时不清楚它是否考虑了两个终点之间的高度变化。例如,假设两个终点都位于海拔为0的海平面上,但是两点之间存在一座山。攀登这座山以从A点到达B点的高度变化应该被考虑在内。 - Timtom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接