1

位置を地理座標として db に格納するクロスプラットフォーム モバイル アプリケーションを開発しています。これらの各ポイントは、グラフィカル オブジェクトの左上隅を表します。

このアプリケーションには、地理座標をサポートするマップ コントロール (telek の radmap) が含まれているため、四角形を追加するだけで正しく描画されます。

ライセンスの問題により、Android バージョンではマップ コントロールを使用できません (Google では、ビジネス アプリケーションにマップ コントロールを使用することはできません - https://developers.google.com/maps/faq#tos_commercial、iOS ではまだ使用していません)これはチェックしないでください)、背景として使用する画像を使用します。

「マップ/画像」の左上隅と右下の地理座標を取得し、隅で定義された領域内にグラフィカル オブジェクトを描画する必要があります。

地理座標を画面座標に変換する方法を見つけるのを手伝ってくれる人はいますか?

データ例 (X,Y):

        GEO   

左上隅:

-0,00939846 -0,00504255

右下隅:

0,009398461 -0,01281023

描くポイント:

-0.00464558、-0.00799298

-0.0046509、-0.00845432

-0.00386774、-0.00860988

-0.00344932、-0.00860452

        SCREEN

左上隅:

0 0

右下隅:

? ?

描くポイント

? ?

画面サイズ

1024 * 768

助けてくれてありがとう、

ルイス・ピーニョ

4

1 に答える 1

3

私は最も精通しiOSているので、それが私の答えです。できるだけ多くの変数を作成して、他のコードをあまり変更せずに手動/プログラムでオーバーライドできるようにしました。

- (CGPoint)convertGeoPoint:(CGPoint)point toView:(UIView*)view {
    CGPoint geoTopLeft = CGPointMake(-0.00939846, -0.00504255);
    CGPoint geoBottomRight = CGPointMake(0.009398461, -0.01281023);
    CGFloat geoWidth = geoBottomRight.x - geoTopLeft.x;
    CGFloat geoHeight = geoBottomRight.y - geoTopLeft.y;

    // This is the block you would change to suit your needs
    CGPoint viewTopLeft = CGPointMake(view.frame.origin.x, view.frame.origin.y);
    CGFloat viewWidth = view.frame.size.width;
    CGFloat viewHeight = view.frame.size.height;

    return CGPointMake(viewTopLeft.x + (point.x-geoTopLeft.x)*viewWidth/geoWidth, viewTopLeft.y + (point.y-geoTopLeft.y)*viewHeight/geoHeight);
}

基本的な考え方は、ポイントを新しい座標系に変換する必要があるということです。これを行うには、適切な地理ディメンションで割り、適切なビュー ディメンションを掛ける必要があります。

于 2013-09-06T17:21:36.513 に答える