这是计算所有方向的纬度/经度(NSEW)的正确方法吗?

时间:2016-11-09 03:50:12

标签: ruby algorithm

我在google地图上测试了这个,看起来很合法。但我不太确定我是否正确理解了这个公式。东西方需要* 180而不是* 90吗?

EARTH_RAD = 6378
...
def calculate_distance(lat, lon, direction)
  case direction
  when :north
    lat = (@kilometers/(EARTH_RAD * (Math::PI/2))) * 90 + lat
    [lat, lon]
  when :south
    lat = (lat - (@kilometers/(EARTH_RAD * (Math::PI/2))) * 90)
    [lat, lon]
  when :east
    lon = (@kilometers/(EARTH_RAD * (Math::PI/2))) * 90 + lon
    [lat, lon]
  when :west
    lon = (lon - (@kilometers/(EARTH_RAD * (Math::PI/2))) * 90)
    [lat, lon]
  end
end

1 个答案:

答案 0 :(得分:1)

经络公式(NS)是正确的,但对于相似之处是错误的。这是因为经络长度接近恒定(~40000 km),但平行长度(和km /度比)取决于纬度。东边111公里等于赤道1度,平行于45纬度1.41度。

所以你必须像这样考虑系数Cos(lat)(不知道cos函数的ruby语法)

lon = (@kilometers/(Math::Cos(lat_in_radians) * EARTH_RAD * (Math::PI/2))) * 90 + lon

不要忘记EW通过日期更改线(180度)和NS通过赤道。

请注意90 / (Math::PI/2)是将弧度转换为度数的系数