1

私は GPS アプリケーションに取り組んでおり、Zombie RunSpecTrekのようにユーザーの周りにマーカーを配置するというアイデアをいじっていましたが、ユーザーの周りの場所を見つける方法について完全に混乱しています。

私は Location クラスのドキュメントを見ていて、他のものに distanceTo() 関数を使用したり、MapView の latitudeSpan()、longitudeSpan() および getProjection() 関数を使用したことがありますが、その場所を決定する方法がわかりません。たとえば、ユーザーの周囲 100 メートルです。

私はユーザーの位置を知っており、ユーザーから最大 1 km 離れた場所にのみマーカーを配置するつもりなので、せいぜいその領域を楕円体ではなく平らなものとして扱うことができるので、ユーザーの経度と緯度を取得して、 +/- それらからそれらの周りにマーカーをプロットします (x = cos(radius) や y = sin(radius) などの基本的な三角法を使用して、プレーヤーの周囲の半径サイズの円内に保持します)?

100long 100lat が 90long 100lat から 10 メートル離れているように、実際のスカラー距離に対応する長さ/緯度がどの程度かわかりません。(これらの値が完全に間違っていることはわかっていますが、質問を説明するために使用しているだけです)。

御時間ありがとうございます、

インフィニティフィズ

4

2 に答える 2

2

2 つの経度/緯度ポイント間の距離は、harsine 式で計算されます。理論へのリンクは次のとおりです 。 http://www.movable-type.co.uk/scripts/latlong.html

あなたの目的のために、すでに述べたdistanceToメソッドを使用します。現在の場所とすべての関心のあるポイントがあります。各 Point of Interest に対して Location.distanceTo(Poi) を呼び出すだけで、距離が 1000 メートルを超える場合は、そのポイントをマップに描画できます。

PoI を Location オブジェクトとして持っていない場合は、次のように構築します。

poiLocation = new Location(LocationManager.PASSIVE_PROVIDER);
poiLocation.setLatitude(latitude);
poiLocation.setLongitude(longitude);

レーダーのようなアプリで distanceTo メソッドを使用したところ、問題なく動作しました。

于 2011-04-02T18:27:44.767 に答える
1

ページの下部に少し近づけると、フォーミュラの説明が少し良くなります。そこで、計算する前に彼がラジアンに変換したことがわかります。また、数値の誤った丸めを回避するために、適切なデータ型を使用することが重要です。動作するはずの小さなコードスニペットを次に示します。

double lat1 = 52.104636;
double lon1 = 0.356324;

double R = 6371.0;
double d = 1.0;
double dist = d / R;
double brng = Math.toRadians(1.0);
lat1 = Math.toRadians(lat1);
lon1 = Math.toRadians(lon1);

double lat2 = Math.asin( Math.sin(lat1)*Math.cos(dist) + Math.cos(lat1)*Math.sin(dist)*Math.cos(brng));
double lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(lat1),            Math.cos(dist)-Math.sin(lat1)*Math.sin(lat2));
lon2 = (lon2+3*Math.PI)%(2*Math.PI) - Math.PI;

System.out.println("lat2: " + Math.toDegrees(lat2));
System.out.println("lon2: " + Math.toDegrees(lon2));
于 2011-04-03T08:58:55.823 に答える