3

在计算 2 点之间的距离时,Postgres 的 Spatial 插件或任何 Spatial 包是否会考虑高度?

我知道空间包因素会影响地球的近似曲率,但如果一个位置位于山顶,而另一个位置靠近大海 - 如果差异,这两个点之间的计算差异似乎会有很大差异海拔高度没有考虑在内。

还要记住,如果我有 2 个点位于相同的海洋高度,但 2 个点之间存在一座山 - 距离包应该考虑到这一点。

4

3 回答 3

3

这些因素根本没有被计算在内。为什么?该软件只知道两个特征(你得到距离的两个点,球体/椭球体和基准/投影因子)。

为此,您可能需要使用已开发的线串,您将在其中将您的点与 n 个顶点连接起来,每个顶点都可以感知 Z。

想象一下(松散的 WKT): LINESTRING((0,1,2),(0,2,3),(0,3,4),(0,10,15),(0,11,-1)) .

要求软件计算每个顶点之间的距离并将其相加,将考虑地形的变化。但如果没有这样的东西,就不可能绘制出地形不规则的地图。

所有的 GIS 软件都无法自行判断这些地形的不规则性,因此不考虑它们。

您可以使用 ArcGIS(和其他)等软件,使用线(两点之间)和曲面文件(例如 NASA 免费提供的那些(SRTM 项目))创建此类线串(自动)。这些文件采用光栅格式,每个像素都有一个 XY 和 Z 值,以米为单位。遍历你想要的线,再加上那个地形剖面,就可以实现你想要实现的计算。如果您需要进行超级精确的计算,则需要一个精确的表面,以及该轮廓线的每个顶点的精确 Z 值。

就这么清楚了吗?

于 2009-09-03T18:52:01.007 回答
1

如果您使用的距离公式不将两点的高度作为参数(除了两点的纬度和经度),那么它不会将高度计入距离计算。无论如何,海拔差异对计算距离没有非常显着的影响。

与 GPS 一样,高度计算的距离差异可能比大多数商业 GPS 设备中的误差要小,因此在大多数应用中,高度可以安全地省去(商业 GPS 设备的高度测量本身非常不准确,尽管高度的调查数据非常准确)。

于 2009-09-03T18:18:10.010 回答
1

PostgreSQL 在计算距离时不考虑高度。这一切都是在一个平面上完成的。

如果您的点是 3d,即具有可能发生的 Z 坐标,则大多数数据库空间包都不会考虑到这一点。

我在这台机器上没有 PostgreSQL,但试试这个。

选择 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 个参数(XYZ 和 M)。St_POINT 只需要两个 (XY)

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.refracions.net/documentation/manual-1.4/ST_Point.html

于 2009-09-03T18:31:09.963 回答