System.Data.Entity.Spatial.DbGeography带高程的距离

时间:2015-11-01 17:24:44

标签: c# geospatial

我想找到地球上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%确定这是正确的。

1 个答案:

答案 0 :(得分:1)

在SQL Server库中,Z(Elevation)更像是Tag或纯用户定义的属性。

所以它不用于任何计算。这使它类似于M,它对我的​​特定数据集也只有意义。

如果从数学角度看高程对您来说很重要,那么在获得地理距离结果后,您将不得不这样做。注意从较高的高度减去。

您要添加两个数字(表面上的距离)+(高程增量)。如果你使用毕达哥拉斯定理,你必须考虑到地理图书馆正在为你做的许多微妙的逻辑。