0

このリンクで @DanS から以下のコードを取得しましたhow-to-display-a-map-still-image-file-with-a-moving-current-location

onCurrentPosition(Location current){
    double hypotenuse = upperLeft.distanceTo(current);
    double bearing = upperLeft.bearingTo(current);
    double currentDistanceX = Math.cos(bearing) * hypotenuse;
    //                     "percentage to mark the position"
    double currentPixelX = (currentDistanceX / upperLeft.distanceTo(lowerRight) * Math.cos(upperLeft.bearingTo(lowerRight))) * mapWidth;

    moveIndicatorX(currentPixelX);
}

値は次のとおりです。

  • 現在: 41.850033、-87.65005229999997
  • 左上: 41.866514127810355、-87.6720142364502
  • 右下: 41.83397145565242,-87.62824058532715
  • マップの幅: 512 x 512 ピクセル

場所、斜辺(距離)、方位(方位)のオンライン計算機は次のとおりです。

私は次の結果を得ました:

  • 斜辺 = 2581
  • ベアリング = 135.21
  • 現在の距離 X = -2562
  • currentPixelX = 311.9

皆さんに次のことをお願いします。

  1. 計算結果が正しいかどうかを確認します。
  2. currentPixelY (もう 1 つのポイント) を計算する方法について教えてください。

ちなみに、これを使用して、静止画像の左上隅と右下隅を実際の LatLng に結合した静止画像マップに対して、特定の実際の LatLng(現在) の位置を計算することを計画しています。

実際の出力と期待される出力を確認し、全体像を簡単に理解したい場合。こちらのリンクをご参照ください →現在地を静止画地図にマークする方法

4

1 に答える 1

1

これは私が使用している実際のコードであり、以前に投稿された擬似コードではありません。

Location upperLeft = new Location("");
upperLeft.setLatitude(41.866514127810355);
upperLeft.setLongitude(-87.6720142364502);
Location lowerRight = new Location("");
lowerRight.setLatitude(41.83397145565242);
lowerRight.setLongitude(-87.62824058532715);
Location current = new Location("");
current.setLatitude(41.850033);
current.setLongitude(-87.65005229999997);
double hypotenuse = upperLeft.distanceTo(current);
double bearing = upperLeft.bearingTo(current);
double currentDistanceX = Math.cos(bearing * Math.PI / 180.0) * hypotenuse;
//                     "percentage to mark the position"
double totalHypotenuse = upperLeft.distanceTo(lowerRight);
double totalDistanceX = totalHypotenuse * Math.cos(upperLeft.bearingTo(lowerRight) * Math.PI / 180.0);
double currentPixelX = currentDistanceX / totalDistanceX * 512;

System.out.println(currentPixelX); // 259.3345493341548

あなたの計算された答えは少し外れているように見えます。Yの変更を計算するには、Xでマークされたすべての計算と変数をコピーして、のMath.sin()代わりに使用しますMath.cos()

于 2011-08-19T17:05:57.623 に答える