我想找到地球上2点之间的距离(使用WGS84)和System.Data.Entity.Spatial.DbGeography似乎是一个很好的喊叫,但我没有得到预期的结果当点具有高程时,从距离函数:
var geogA = DbGeography.PointFromText("POINT(179.04 89.77 100)", 4326);
var geogB = DbGeography.PointFromText("POINT(179.04 89.77 200)", 4326);
var distance = geogA.Distance(geogB); //distance is 0, not 100
我期待距离能够考虑到海拔 - 我在这里错过了一些明显的东西吗?
我确定这一定是相当微不足道的,但我对这背后的数学知之甚少,所以我可能没有资格做出这样的声明。
我的直觉告诉我,在这里使用毕达哥拉斯,但我并非100%确定这是正确的。
答案 0 :(得分:1)
在SQL Server库中,Z(Elevation)更像是Tag或纯用户定义的属性。
所以它不用于任何计算。这使它类似于M,它对我的特定数据集也只有意义。
如果从数学角度看高程对您来说很重要,那么在获得地理距离结果后,您将不得不这样做。注意从较高的高度减去。
您要添加两个数字(表面上的距离)+(高程增量)。如果你使用毕达哥拉斯定理,你必须考虑到地理图书馆正在为你做的许多微妙的逻辑。