2016-11-09 10 views
0

私はこれをGoogleマップでテストしましたが、正当なものです。しかし、私は式を正しく理解しているかどうかはよく分かりません。東と西は* 90ではなく* 180である必要がありますか?これは、すべての方向の緯度/経度(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)の式は正しくありますが、平行は間違っています。子午線の長さはほぼ一定(約40000km)であるが、平行な長さ(およびkm /度の比)は緯度によって決まるからである。東経111 kmは赤道で1度、緯度45度で1.41度に等しい。

ですから、

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

はEWの日付変更ライン(180度)を通る通過を忘れないでください(COS関数のためのRubyの構文を知らない)、このような係数Cos(lat)を考慮する必要があり、かつNSの赤道を通じて

注:90/(Math::PI/2)は、ラジアンを度に変換する係数です。

関連する問題