(VBA)経緯度⇔住所
Yahoo!WebAPIを使用して、経緯度⇔住所を変換します。環境によっては「Microsoft XML」の参照設定が必要になります。
なお、使用にはYahooのアプリケーションIDが必要です。また、利用の際はYahooのソフトウエアに関する規約に従ってください。
'YahooWebAPIを使用した経緯度⇔住所変換
Option Explicit
Const APPID As String = "ここにアプリケーションIDを入力"
'Yahoo!ジオコーダAPIによる住所→BL変換
'戻り値(CSV文字列)=緯度,経度,メッセージ(成功時=True,失敗時=エラーの内容)
Function Address2BLbyYahoo(ByVal Address As String) As String
If Address = "" Then
Address2BLbyYahoo = ",,住所が入力されていません"
Exit Function
End If
'URL(参照https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html)
Dim strAdr As String
'基本
strAdr = "https://map.yahooapis.jp/geocode/V1/geoCoder?" '基本
'表示件数
strAdr = strAdr & "&results=1"
'マッチしなかった場合、上位のレベルで再検索
strAdr = strAdr & "&recursive=true"
'住所検索レベル
strAdr = strAdr & "&al=4&ar=eq"
'住所の文字コード
strAdr = strAdr & "&ei=SJIS"
'アプリケーションID
strAdr = strAdr & "&appid=" & APPID
'住所
strAdr = strAdr & "&query=" & Address
'取得
Dim objMSX As Object
Set objMSX = CreateObject("MSXML2.XMLHTTP")
With objMSX
.Open "GET", strAdr, False
.send
Dim t As Variant
With .responseXML
'アイテムが1以上あった
If .getElementsByTagName("Count").Item(0).Text <> 0 Then
'経緯度取得
t = Split(.getElementsByTagName("Coordinates").Item(0).ChildNodes(0).Text, ",")
'経度緯度→緯度経度にする
Address2BLbyYahoo = t(1) & "," & t(0) & ",True"
'アイテムがない
Else
t = .getElementsByTagName("Status").Item(0).Text
If t <> "" Then
Address2BLbyYahoo = ",," & t
Else
Address2BLbyYahoo = ",,不明なエラー"
End If
End If
End With
End With
End Function
'Yahoo!リバースジオコーダAPIによるBL→住所変換
'戻り値(CSV文字列)=住所,メッセージ(成功時=True,失敗時=エラーの内容)
Function BL2AddressbyYahoo(ByVal Lat As Double, ByVal Lon As Double) As String
If (Lat = 0) Or (Lon = 0) Then
BL2AddressbyYahoo = ",経緯度が入力されていません"
Exit Function
End If
'URL(参照https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/reversegeocoder.html)
Dim strAdr As String
'基本
strAdr = "https://map.yahooapis.jp/geoapi/V1/reverseGeoCoder?" '基本
'アプリケーションID
strAdr = strAdr & "&appid=" & APPID
'経緯度
strAdr = strAdr & "&lat=" & Lat & "&lon=" & Lon
'取得
Dim objMSX As Object
Set objMSX = CreateObject("MSXML2.XMLHTTP")
With objMSX
.Open "GET", strAdr, False
.send
Dim t As Variant
With .responseXML
'アイテムが1以上あった
If .getElementsByTagName("Count").Item(0).Text <> 0 Then
'住所取得
BL2AddressbyYahoo = .getElementsByTagName("Address").Item(0).Text & ",True"
'アイテムがない
Else
t = .getElementsByTagName("Status").Item(0).Text
If t <> "" Then
BL2AddressbyYahoo = ",," & t
Else
BL2AddressbyYahoo = ",,不明なエラー"
End If
End If
End With
End With
End Function
掲載しているコードは自由に使用できますが、それによって生じたいかなる損害についても、当社は一切の責任を負いません。