2

誰かが私を助けてくれることを願っています:)

マップ (緯度、経度) から画像 (x、y) にポイントをスケーリングしようとしています。そのためには、2 つの NON-SIMILAR 長方形の間の倍率を見つける必要があります (私は思います)。

明確にします、言いましょう:

長方形 1: A(40.0, 50.0) B(40.0, 56.0) C(43.0, 56.0) D(43.0, 50.0)

(緯度デルタ = 3、経度デルタ = 6)。

長方形 2: E(0, 0) F(500, 0) G(500, 300) H(0, 300)

(X デルタ = 500、Y デルタ = 300)。

ポイント P(41.5, 52.5) を四角形 1 から四角形 2 のポイント (x, y) にスケーリングするにはどうすればよいですか?

アップデート:

一般的なアイデア:

ユーザーの現在の場所 (緯度、経度) をカスタム画像 (地図画像ではなく、自分で描いたもの) に表示しようとしているため、地図 (MKMapKit、Google、Tom-Tom) を使用できません。

ユーザーの現在の場所 (CoreLocation 経由) と画像 (800x460) があります。

マッピングしている領域は小さいので、地球の曲線を気にする必要はありません。

ユーザー (緯度、経度) の位置を (iPhone 画面上の) 画像にスケーリングするのに役立つ式を見つけようとしています。

ありがとう!!!

4

2 に答える 2

2

ええと、最初のものと似ているが2番目のものに収まる長方形を取得することは難しくありません。方法は次のとおりです。

CGRect rect1, rect2; //your rectangles.
float scale = MIN(rect1.size.width / rect2.size.width , rect1.size.height / rect2.size.height);
CGRect resultedRect;
resultedRect.origin = rect2.origin;
resultedRect.size = CGSizeMake(rect2.size.width * scale, rect2.size.height * scale); 
//resultedRect is similar with rect1 but fits in rect2. You can now multiply your point with "scale" and get the new position.

これがあなたが達成しようとしているものかどうかはわかりません。

よろしく、

ジョージ

于 2012-10-24T13:32:00.940 に答える
1

導入される歪みに満足している場合は、 ( )座標とx()座標を別々に扱うことができます。 latitudeylongitude

あなたがそのような歪みに満足するつもりはないと思うなら、あなたはとの不釣り合いなスケールについて何をすることを提案しますlatitudelongitude1°lat != 1°longあなたの質問の緯度で。

ある長さの行から別の長さの行へのスケーリングについてサポートが必要な場合は、質問を更新してください。

OPによる次のコメントを編集します。

さて、緯度の3°の間隔をYの300ピクセルの間隔(おそらく)にマッピングし、経度の6°の間隔をXの500ピクセルの間隔にマッピングします。

あなたがさらなる歪みを導入することを心配しているかどうかはまだ完全にはわかりません。そうでなければ、それはとても簡単です。画面領域の左下がピクセル(1,1)であり、そこにマップ(40°、56°)する場所であると仮定します。そのポイントの東の経度の1分ごとに、(500/360)ピクセルを右に移動します。角の北の緯度の1分ごとに、(300/180)ピクセルを上に移動します。

この大まかな投影では2D形状の外観は保持されませんが(たとえば、正方形は長方形に投影されます)、形状を保持しない多くの地図投影が広く使用されています。

于 2012-10-24T13:27:17.810 に答える