Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

VB.NETで数値地図を表示して操作

タグの編集...

投稿者 ひでぽん   (社会人)   投稿日時 2022/6/16 14:51:41
VB.NETで国土地理院等の電子地図を表示しその地図に四角や丸の図形を描画する事は可能でしょうか?それと以下のイベントが取れるかもご教示頂けないでしょうか?
・マウスでクリックした座標
・マウスイベントの取得(拡大、縮小、移動、クリック等)
すみませんが宜しくお願います。
※VB.NETのバージョンはこれから作成を考えているので無料版の最新を考えています。

<例えば以下のような地図です>
http://maps.gsi.go.jp/#6/36.359375/137.823486/&base=std&ls=std&disp=1&vs=c1g1j0h0k0l0u0t0z0r0s0m0f1


投稿者 るきお   (社会人)   投稿日時 2022/6/16 21:10:46
単純に地図を画像として扱い、その上に四角や丸の図形を描画することは可能です。
ただ、ひでぽんさんは、おそらく、その地図に拡大・縮小や、スクロールの機能を期待されていますよね?ひょっとすると、写真表示に切り替えたりといったもっと便利な機能を期待されているかもしれませんね。

そうなるとなかなか複雑で、中級者以上向けになります。下記で簡単に紹介します。
どれを利用する場合でもライセンスなど利用条件はよく確認してください。

まず.NETで使用できる地図機能をもったライブラリがいくつかあります。私は使用したことがないのでひでぽんさんがやりたいことができるかどうかはわかりません。ここで紹介するものはNuGetから組み込むことができます。

ArcGIS
https://developers.arcgis.com/net/

SharpMap
https://www.nuget.org/packages/SharpMap.UI/1.2.0

GMap.NET
https://github.com/judero01col/GMap.NET


Webベースでは地図機能を提供するAPIがいくつかあります。これらのほとんどはWebブラウザーでの利用が前提になっています。
Google MAP API
https://developers.google.com/maps/documentation/javascript/overview

Yahoo! Open Local Platform
https://developer.yahoo.co.jp/webapi/map/

Mapion
https://www.mapion.co.jp/sales/service/api/


国土地理院の場合は、地図自体のデータは提供してくれているようですが、APIとしてアクセスできるものではないようです。
https://fgd.gsi.go.jp/download/menu.php
これをあくまでデータなので、これを利用して地図を描画、拡大・縮小・スクロールなどの機能を実装するのはなかなか骨が折れそうです。
WebView2などで国土地理院のページそのものを表示ししてしまうという手も使えるかもしれません。

投稿者 るきお   (社会人)   投稿日時 2022/6/16 21:19:07
イベントについては、Windows フォーム アプリという前提で回答します。

>・マウスでクリックした座標
マウスでクリックすると、MouseClickイベントが発生します。
座標は引数の MouseEventArgsのLocationプロパティで取得できます。

Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles MyBase.MouseClick
    MsgBox(e.Location.ToString)
End Sub


>・マウスイベントの取得(拡大、縮小、移動、クリック等)
マウスホイールを前後に動かすと、MouseWheelイベントが発生します。
Private Sub Form1_MouseWheel(sender As Object, e As MouseEventArgs) Handles MyBase.MouseWheel

    If e.Delta > 0 Then
        MsgBox("プラス方向にホイールを動かしました。")
    Else
        MsgBox("マイナス方向にホイールを動かしました。")
    End If

End Sub


移動するとMouseMoveイベントが発生します。
クリックは上述したようにMouseClickイベントが発生します。

その他マウスのイベントについてはこちらをご確認ください。
https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/input-mouse/events?view=netdesktop-6.0