2016-11-09 39 views
0

我已經在谷歌地圖中測試過了,它看起來合法。但我不太確定我是否正確理解該公式。東方和西方是否需要* 180而不是* 90這是計算所有方向緯度/經度(NSEW)的正確方法嗎?

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

公式經絡(NS)是正確的,但相似之處是錯誤的。這是因爲子午線長度接近恆定(約40000公里),但平行長度(和公里/度比)取決於緯度。東經111公里,相當於赤道1度,緯度45度緯度1.41度。

所以,你必須考慮係數Cos(lat)這樣的(不知道餘弦函數的Ruby語法)

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

不會經過EW日期變更線(180度)忘掉中轉,和通過NS的赤道。

請注意,90/(Math::PI/2)是將弧度轉換爲度數的係數

相關問題