在计算2点之间的距离时,Postgres的Spatial插件或任何这种方式的Spatial包是否会影响高度?
我知道地球近似曲率的空间包因子,但如果一个位置在山顶而另一个位置靠近海洋 - 这两个点之间的计算差异似乎会有很大差异如果没有考虑到海拔高度的差异。
另外请记住,如果我有两个点在同一个海洋高度但是在两个点之间存在一个山 - 距离包应该考虑到这一点。
答案 0 :(得分:3)
这些因素根本没有计算在内。为什么?该软件只知道这两个特征(获得距离的两个点,球体/球体和基准/投影因子)。
为了实现这一点,你需要使用一个开发的线串,在这个线串中你将你的点与n个顶点连接起来,每个顶点都是Z识别的。
想象一下(宽松的WKT):LINESTRING((0,1,2),(0,2,3),(0,3,4),(0,10,15),(0,11, - 1))。
要求软件计算每个顶点之间的距离并将其相加,将考虑地形的变化。但如果没有这样的东西,就不可能在地形上绘制不规则图。
所有地理信息系统软件本身都无法分辨地形中的这些不规则因素,因此不考虑它们。
您可以使用ArcGIS(和其他)等软件(使用两条线之间的线)和表面文件(例如NASA(SRTM项目)自由提供的表面文件)自动创建此类线串。这些文件采用栅格格式,每个像素都有一个X Y和Z值,以米为单位。遍历您想要的线,再加上该地形轮廓,您可以实现您想要实现的计算。如果您需要进行超级精确计算,则需要精确的曲面,并在此轮廓线的每个顶点中使用精确的Z值。
那清理了吗?
答案 1 :(得分:1)
如果您使用的距离公式没有将两个点的高度作为参数(除了两个点的纬度和经度之外),那么它不会考虑距离计算的高度。无论如何,高度差对计算的距离没有非常显着的影响。
与GPS一样,高度所产生的距离计算差异可能小于大多数商用GPS设备的误差,因此在大多数应用中,可以安全地省去高度(高度测量本身对商用GPS来说非常不准确)设备,虽然海拔高度的调查数据非常准确)。
答案 2 :(得分:1)
PostgreSQL在计算距离时不考虑高度。这一切都是在平面上完成的。
如果你的点是3d,那么大多数数据库空间包都不会考虑到这一点,即具有可能发生的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