5

緯度/経度の計算に関する簡単な質問です。

Lat: 55.123456 Long -6.123456 などの値セットを取得し、任意の距離にある 4 つのポイントを計算します。

ここに画像の説明を入力

与えられた正方形として、左右の緯度の値を計算したいと思います。したがって、赤い線は開始点から 1.5 km です。経度も同様に、青い線は始点から 1.5km になります。出力は 4 ポイントで、すべての距離はキロメートルです。

要するに: 緯度 + Y = X キロメートル離れた緯度の値

現時点では iPhone を使用しており、非常に大まかなデータベース計算を行っています。

編集:明確にするために、距離が非常に短いため、曲率(したがって精度)は問題になりません。

4

3 に答える 3

6

OBJ-C では、これはまともな解決策になるはずです。

float r_earth = 6378 * 1000; //Work in meters for everything
float dy = 3000; //A point 3km away
float dx = 3000; //A point 3km away
float new_latitude  = latitude  + (dy / r_earth) * (180 / M_PI);
float new_longitude = longitude + (dx / r_earth) * (180 / M_PI) / cos(latitude * 180/M_PI);
于 2013-03-24T21:53:00.247 に答える
3

比較的短い距離 (100km 未満) での大まかな計算では、緯度 1 度あたり 40_000_000/360=111 111 メートル、経度 1 度あたり 111 111*cos(latitude) メートルであると想定できます。これは、メートルがパリ子午線の 1/40_000_000 部分として定義されているためです;)。

それ以外の場合は、コメントに記載されているように、大円距離を使用する必要があります。高精度を得るには、地球が球体ではなく、わずかに扁平な回転楕円体であることも考慮する必要があります。

于 2013-03-24T21:39:08.837 に答える
1
// parameter: offset in meters
float offsetM = 1500; // 1.5km

// degrees / earth circumfence
float degreesPerMeter = 360.0 / 40 000 000;
float toRad = 180 / M_PI;

float latOffsetMeters = offsetM * degreesPerMeter;
float lonOffsetMeters = offsetM * degreesPerMeter * cos (centerLatitude * toRad);

+/- latOffsetMeters と +/- lonOffsetMeters を centerLatitude/centerLongitude に追加するだけです。

数式は 100 キロまで有効です。

于 2013-03-24T23:53:50.563 に答える