我在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
答案 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)
是将弧度转换为度数的系数