2

中心点 C を中心に水平方向と垂直方向にそれぞれ 5 km の距離にある A と B の 2 つの点を取得しようとしています。したがって、点 A と B は、辺の長さが 10 km の「ボックス」を作成し、C は正確にこの箱の中心。これは私のコードです:

//Distance is 5 kilometers
float distance = 5;    

float latCenter = locationInfo.lastLat;
float lngCenter = locationInfo.lastLong;

// Calculate corner point distance in lat and long
float latDelta = distance/110.54f;
float longDelta = distance/(111.320f(float)Math.cos((double)latCenter));

// Calculate coordinates of the corner points
float latA = lat - latDelta;
float longA = lng - longDelta;
float latB = lat + latDelta;
float longB = lng + longDelta;

これらが概算であることは承知していますが、私の場合は、約 1 km の誤差範囲で概算しても問題ありません。垂直距離は問題ありませんが (10.06km)、水平距離は 10km ではなく約 6km です。

私の数式の何が問題になっていますか? 非常に単純な数学エラーだと思いますが、見つけることができません。非常にシンプルで迅速なコードが必要だったので、この StackOverflow の回答に基づいて計算しました: lat/lon + km distance を操作するための単純な計算?

4

1 に答える 1

3

度対ラジアンに賭けます(cos のjavadocから):

public static double cos(double a)

角度の三角関数余弦を返します。特殊なケース: 引数が NaN または無限大の場合、結果は NaN になります。結果は、正しく丸められた結果の 1 ulp 以内でなければなりません。結果は半単調でなければなりません。

パラメータ: a - ラジアン単位の角度。

戻り値: 引数のコサイン。

于 2013-10-10T17:20:41.167 に答える