【ハウツー】

C#とSharpMapで地図を描画するアプリケーションを作る -高機能編

1 ズームと中央位置を設定

    青木淳夫  [2008/06/25]

    前回、シンプルな日本地図の表示方法を紹介しましたが、今回はより使いやすい地図アプリケーションになるように機能を拡張していきます。

    ズームの設定

    まず、TrackBarコントロールのScrollイベントに次のプログラムを追加して、スクロールでズームサイズを変更するようにします。

    リスト5 Form1.cs抜粋 - トラックバーの値に応じてズームサイズを設定

    
        //トラックバーの値をスクロールした時のイベント
        private void trbZoom_Scroll(object sender, EventArgs e)
        {
            //倍率をバーの目盛に応じて拡大(縮小)
            _Map.Zoom = _BaseZoom / Math.Pow(2, trbZoom.Value);
            picJapan.Image = _Map.GetMap();
        }
    

    ズームの度合いを変更するには、MapクラスのZoomプロパティを設定します。Zoomプロパティはdouble型で、数字を大きくするほど広く、数字を小さくするほど詳細を表示できます。ここでは、日本全体を表示した時のZoomプロパティの値を_BaseZoom変数に保存しているため、_BaseZoom変数とTrackBarコントロールのValueプロパティからズーム率を計算しています。なお、Math.Powメソッドは累乗を計算する関数で、トラックバーの目盛が0の場合は日本全体、目盛が1の場合は2倍ズーム、目盛が2の場合は4倍ズーム(以降2倍の繰り返し)を算出しています。

    地図の中央位置を設定

    続けて、PictureBoxコントロールのMouseClickイベントに次のプログラムを追加して、クリックした場所を地図の中央に表示するようにします。

    リスト6 Form1.cs抜粋 - 地図のクリックした場所を、地図の中心に設定

    
        //ピクチャボックスでマウスをクリックした時のイベント
        private void picJapan_MouseClick(object sender, MouseEventArgs e)
        {
            //クリックした場所を地図の中央に設定
            SharpMap.Geometries.Point p = _Map.ImageToWorld(new PointF(e.X, e.Y));
            _Map.Center.X = p.X;
            _Map.Center.Y = p.Y;
            picJapan.Image = _Map.GetMap();
        }
    

    地図の表示場所を指定するには、MapクラスのCenterプロパティを設定します。CenterプロパティはX、Yといった座標を持ち、地図の中心位置を設定できます。SharpMapでの座標はSharpMap.Geometries.Pointクラスで表現されるため、ピクチャボックスのクリック位置と変換するために、MapクラスのImageToWorldメソッドを呼び出しています。

    ズームしたり地図の中心地点を変更。ズームを自由に変更でき、地図の中心位置が変わっていることがわかります。

    関連記事

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン