DbGeography.Distance返回结果异常,求解原因及单位疑问
问题分析与解决
首先,你的DbGeography.Distance计算结果其实是正确的,问题出在你对在线工具的使用上——大概率是把经纬度的输入顺序搞反了!
为什么结果看起来不对?
我们来拆解计算过程:
- 你的两个点是同纬度的(
40.7155773°N),经度差为:-73.984434 - (-73.98) = -0.004434° - 在该纬度上,每度经度对应的地面距离计算公式为:
代入WGS84标准的地球半径(6378137米)计算:距离(米)= 地球半径 × 经度差(弧度)× cos(纬度(弧度))- 经度差转弧度:
0.004434 × π/180 ≈ 0.00007739 cos(40.7155773°) ≈ 0.758- 最终结果:
6378137 × 0.00007739 × 0.758 ≈ 374.7米
这个数值和你用DbGeography.Distance得到的374.65完全吻合!
- 经度差转弧度:
为什么在线工具给出493?
如果把经纬度顺序反过来(把经度当纬度输入,纬度当经度输入),计算的就是纬度差对应的距离:
- 纬度差为
0.004434°,每度纬度的地面距离约为111139米 - 计算得:
0.004434 × 111139 ≈ 493米
这正好是你提到的在线工具结果,说明你在工具里输入时搞反了经纬度的顺序。
关于DbGeography.Distance的单位
当使用4326坐标系(WGS84全球地理坐标系)时,Distance方法返回的是基于WGS84椭球体的测地线距离,单位为米,完全符合官方定义。你的代码中CreatePoint函数的WKT格式(POINT(lon lat))也是正确的——WGS84坐标系下WKT的POINT格式就是经度 纬度的顺序。
内容的提问来源于stack exchange,提问作者Ivan Sadovsky
相关产品推荐
相关产品推荐

