1

GPSの計算について質問があります。私の問題は次のとおりです:

特定のポイントPがあり、Pの周りのNポイントを計算したいと思います。

アルゴリズムは次のとおりです。

P = (x, y) // latitude, longitude
N = 8
angle_size = 360/N

points = []

for i in 1..N
    points.push compute_100meter(P, angle_size*i)
end

この例では、Pから100メートル以内の8つの等距離点を計算しようとしています。

誰かが私にそうすることを許可しているルビーの宝石を知っていますか?私の問題はの内容を書くことですcompute_100meter

編集:

地球の曲率を考慮して、ポイントの座標を度(緯度、経度)で取得する必要があります。

4

1 に答える 1

2

半径が十分に小さい限り (北極または南極のすぐ隣でない限り、100 メートルにする必要があります)、単純な線形近似で十分に機能します。

def perimeter_point(lat, lon, angle, radius)
    # convert angle from degrees to radians
    angle *= Math::PI / 180
    # convert meters to degrees approximately, assuming spherical Earth
    radius /= 6371000 * Math::PI / 180
    # calculate relative length of the circle of longitude compared to equator
    scale = Math.cos( lat * Math::PI / 180 );
    # add offsets to longitude and latitude and return them
    # (I'm assuming that angle = 0 means due east)
    lat += radius * Math.sin(angle)
    lon += radius * Math.cos(angle) / scale
    return lat, lon
end

中心点が 180 度子午線の近くにある場合、-180 未満または +180 を超える経度が返される可能性があることに注意してください。それが問題である場合は、それを確認し、必要に応じて正規化してください。(中心点が北極または南極の近くにある場合、±90 範囲外の出力緯度も技術的に可能ですが、いずれにせよ、私が使用した近似は極の近くで壊れます。)

于 2012-12-26T16:45:35.543 に答える