緯度・経度から地図表示用のURLを作成
1.概要
leafletで地図などを作成していますが、マーカーなどを配置する場合、必須になるのが緯度と経度です。
元となる原単位情報で住所や建物名などの表を作り、そこに緯度と経度を挿入します。緯度と経度の調べ方は、
いろいろありますが、大量の緯度と経度を調べるのは、GoogleMapsなどで一つずつ検索に住所を入れて調べてられません。
そこで住所からの逆引きという方法を用いるのが一般的です。これをアドレスマッチングと言います。筆者も以前は、
GoogleMapsのAPIをコールして自動でアドレスマッチングしていましたが、GoogleMapsにおける無料利用の範囲が制限
されてから、Web上の変換サービスを利用させて頂いています。こうして得られた緯度と経度ですが、精度の面で
検証が必要となります。ときどき変な場所の緯度と経度であったりします。今回は、検証に利用するために緯度と経度を複数の地図での
URLリンクを自動で作成するツールを作成して見ました。
2.利用方法
まずは、アドレスマッチングツールを紹介します。
下記のサイト様でサービスが提供されています。住所の入ったCSVデータから一括して変換してくれます。サイトに書かれている 利用方法や注意事項を良く読んで利用して下さい。
「東京大学空間情報科学研究センター」が提供している「Geocoding Tool & Utilities」
URL : http://newspat.csis.u-tokyo.ac.jp/geocode/
利用手順は、次の通りです。
(1)緯度、経度が入力されている表を準備します。
※緯度と経度をCSVファイルにしているものでも可。ファイルから入力で行います。
(2)各種地図用URLリンク作成.xlsm起動します。
(3)プルダウンより対象地図を選択します。対象地図は、次の5種類から選択できます。
(5)ファイルから貼付ボタンをクリックします。
(6)地図表示用のURL一覧がE5から表示され、外部ファイルにテキスト形式で出力されます。
(7)ファイルから入力の場合は、ファイルから入力ボタンをクリックして、緯度、経度でカンマ区切
りされたCSVファイル選択します。
3.ソースコード ソースコードは、下記の通りです。Excel VBAマクロで作成してあります。
ThisWorkbookは、シート上に配置したコンボボックスにブック起動時に 値(地図名)をセットするための処理をしています。
4.ダウンロード 提供するソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
紹介したExcel VBAマクロは、下記よりダウンロードして下さい。
ダウンロード
下記のサイト様でサービスが提供されています。住所の入ったCSVデータから一括して変換してくれます。サイトに書かれている 利用方法や注意事項を良く読んで利用して下さい。
「東京大学空間情報科学研究センター」が提供している「Geocoding Tool & Utilities」
URL : http://newspat.csis.u-tokyo.ac.jp/geocode/
利用手順は、次の通りです。
(1)緯度、経度が入力されている表を準備します。
※緯度と経度をCSVファイルにしているものでも可。ファイルから入力で行います。
(2)各種地図用URLリンク作成.xlsm起動します。
(3)プルダウンより対象地図を選択します。対象地図は、次の5種類から選択できます。
-
・google maps
・Yahoo地図
・Bing地図
・Mapon
・XRAIN GIS版
(5)ファイルから貼付ボタンをクリックします。
(6)地図表示用のURL一覧がE5から表示され、外部ファイルにテキスト形式で出力されます。
(7)ファイルから入力の場合は、ファイルから入力ボタンをクリックして、緯度、経度でカンマ区切
りされたCSVファイル選択します。
3.ソースコード ソースコードは、下記の通りです。Excel VBAマクロで作成してあります。
ThisWorkbookは、シート上に配置したコンボボックスにブック起動時に 値(地図名)をセットするための処理をしています。
'***** 地図サイト選択 ***** Private Sub Workbook_Open() With Worksheets("MAIN").MapSelect .AddItem ("google maps") .AddItem ("Yahoo地図") .AddItem ("Bing地図") .AddItem ("Mapon") .AddItem ("XRAIN GIS版") End With End SubSheet1(MAIN)が、メインの処理ルーチンです。 特に難しい部分はありません。5つの地図のURLパラメータに緯度と経度を挿入しているだけです。 該当行は、85,87,94,101,108行です。また、ファイルへの出力部分は、125行から141行目までで行っています。 CSVファイルからの読み込み処理では、 QueryTablesメソッドを使ってファイルを読み込んでいるため、 比較的高速で処理します。便利な方法ですので、いろいろと使えます。
'* **************************************************************************** '* 緯度・経度から地図表示用のURL作成ツール Ver 1.0 '* '* [ 概要 ] '* 本ツールは、複数の緯度・経度から、地図提供サイトを指定して、リンク用のURLを '* 自動作成して出力するものです。また、XRAIN GIS版(国土交通省)より指定した '* 緯度・経度から、周辺の雨雲レーダの状況確認できるようにリンク用のURLを作成 '* します。 '* '* '* **************************************************************************** '***** 地図を選択した時 ***** Private Sub MapSelect_Change() '***** 選択された値を表示 ***** 'MsgBox(MapSelect.Value) End Sub '***** 全て削除 ***** Private Sub dellAll_Click() 'シートデータをクリア(セルの属性定義を維持したままデータのみを削除) If Range("B5") <> "" Then Range("B5:E1048576").SpecialCells(xlCellTypeConstants, 23).ClearContents End If End Sub '***** ファイルから貼付 ***** Private Sub Filepast_Click() '画面更新を停止する Application.ScreenUpdating = False Call UrlGen Call outmode Worksheets("MAIN").Range("A1").Select '画面更新を開始する Application.ScreenUpdating = True MsgBox "処理が終了しました。" End Sub '***** 外部ファイルから入力の場合 ***** Private Sub Fileset_Click() '画面更新を停止する Application.ScreenUpdating = False Call CSVInput Call UrlGen Call outmode Worksheets("MAIN").Range("A1").Select '画面更新を開始する Application.ScreenUpdating = True MsgBox "処理が終了しました。" End Sub '***** URL生成処理 ***** Private Sub UrlGen() Dim i As Long Dim lngLastRow As Long '最終行取得 With ThisWorkbook.Worksheets("MAIN") lngLastRow = .Cells(1048576, "B").End(xlUp).Row End With '***** 緯度・経度データが未入力の場合 ***** If lngLastRow = 4 Then MsgBox "緯度・経度データがありません。" End End If '/////// 処理開始 /////// '***** google mapsの場合 ***** If (MapSelect.Value) = "google maps" Then i = 0 For i = 1 To lngLastRow - 4 Cells(i + 4, 5).Value = "https://maps.google.co.jp/maps?q=" & Cells(i + 4, 2) & "," & Cells(i + 4, 3) Next i End If '***** Yahoo地図の場合 ***** If (MapSelect.Value) = "Yahoo地図" Then i = 0 For i = 1 To lngLastRow - 4 Cells(i + 4, 5).Value = "https://map.yahoo.co.jp/maps?type=scroll&lat=" & Cells(i + 4, 2) & "&lon=" & Cells(i + 4, 3) & "&mode=map&pointer=on&z=18" Next i End If '***** Bing地図の場合 ***** If (MapSelect.Value) = "Bing地図" Then i = 0 For i = 1 To lngLastRow - 4 Cells(i + 4, 5).Value = "http://www.bing.com/maps/?v=2&cp=" & Cells(i + 4, 2) & "~" & Cells(i + 4, 3) & "&style=r&vl=18" Next i End If '***** Mapion地図の場合 ***** If (MapSelect.Value) = "Mapion地図" Then i = 0 For i = 1 To lngLastRow - 4 Cells(i + 4, 5).Value = "http://www.mapion.co.jp/m2/" & Cells(i + 4, 2) & "," & Cells(i + 4, 3) & ",16/" Next i End If '***** XRAIN GIS版の場合 (周辺の雨雲レーダ) ***** If (MapSelect.Value) = "XRAIN GIS版" Then i = 0 For i = 1 To lngLastRow - 4 Cells(i + 4, 5).Value = "http://www.river.go.jp/x/krd0107010.php?lon=" & Cells(i + 4, 3) & "&lat=" & Cells(i + 4, 2) & "&opa=0.4&zoom=128&leg=0&ext=0" Next i End If End Sub '***** 生成ファイル外部出力処理 ***** Private Sub outmode() Dim i As Long Dim langLastRow As Long Dim csvBuf, Temp As String Dim strFNAME As String '***** 最終行を取得 ***** With ThisWorkbook.Worksheets("MAIN") langLastRow = Cells(1048576, "B").End(xlUp).Row End With '***** 出力用のtxtファイル作成 ***** For i = 5 To langLastRow Temp = Cells(i, 5).Value & vbCrLf csvBuf = csvBuf + Temp Next i '***** ファイルをShift-JIS形式でセーブする ***** strFNAME = ThisWorkbook.Path & "¥" & "Map_" & Format(Now(), "yyyymmddhhmmss") & ".txt" With CreateObject("ADODB.Stream") .Charset = "SJIS" .Open .WriteText csvBuf '***** 1:ファイル有り時上書きしない 2:上書きする ***** .SaveToFile strFNAME, 2 .Close End With End Sub '***** CSV-Read (高速版) ***** Sub CSVInput() Dim varFileName As Variant ChDir ActiveWorkbook.Path varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then '画面更新を開始する Application.ScreenUpdating = True End End If '【注意】ファイルのセル開始位置は、B5から(※任意に変更のこと) With ActiveSheet.QueryTables.Add(Connection:="text;" & varFileName, Destination:=Range("B5")) .AdjustColumnWidth = False .TextFilePlatform = 932 'Shift=Jis .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False .Delete End With End Sub
4.ダウンロード 提供するソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
紹介したExcel VBAマクロは、下記よりダウンロードして下さい。
ダウンロード
コメント
コメントを投稿