【ハウツー】
前回、シンプルな日本地図の表示方法を紹介しましたが、今回はより使いやすい地図アプリケーションになるように機能を拡張していきます。
まず、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メソッドを呼び出しています。
| C#とSharpMapで地図を描画するアプリケーションを作る -シンプル編 [2008/6/23] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
坂本教授、木の光合成に着目した不思議な音楽的挑戦!『ETV特集』 [10:08 2/11] キャリア |
|
バロックで異端!水墨画の巨匠、雪村周継の神業に迫る! [10:07 2/11] キャリア |
|
元・宝塚の真琴つばさ、ドラマ初主演で小学生の母親役に挑戦! [10:07 2/11] キャリア |
|
「四大陸フィギュア」今夜は連覇のかかった高橋、昨年末復活した浅田、村上に注目! [10:07 2/11] キャリア |
|
【EU発!Breaking News】精神疾患治療のため?マラリア患者の血液を注射された男性。(オーストリア) [10:05 2/11] キャリア |