System.Data.Entity.Spatial.DbGeography 海拔距离
System.Data.Entity.Spatial.DbGeography Distance with elevation
我想找到地球上两点之间的距离(使用 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% 确定那是正确的。
在SQL服务器库中,Z(海拔)更像是标签或纯用户定义属性。
所以它没有用在任何计算中。这使得它类似于 M,它也只对我的特定数据集有意义。
如果从数学角度来看,海拔高度对您来说确实很重要,那么您必须在获得地理距离结果后执行此操作add/minus。注意从较高的高度中减去。
您正在添加两个数字(表面距离)+(高程增量)。如果你使用毕达哥拉斯定理,你必须考虑地理库为你做的很多微妙的逻辑。
我想找到地球上两点之间的距离(使用 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% 确定那是正确的。
在SQL服务器库中,Z(海拔)更像是标签或纯用户定义属性。
所以它没有用在任何计算中。这使得它类似于 M,它也只对我的特定数据集有意义。
如果从数学角度来看,海拔高度对您来说确实很重要,那么您必须在获得地理距离结果后执行此操作add/minus。注意从较高的高度中减去。
您正在添加两个数字(表面距离)+(高程增量)。如果你使用毕达哥拉斯定理,你必须考虑地理库为你做的很多微妙的逻辑。