[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『住所から緯度経度を求める処理を複数回行うマクロ』(卒論勉強)
掲示板を使うのは初めてなので、要領を得ない質問でしたらすみません。
グーグルマップのapiを使って、住所から緯度と経度を算出し、
2地点間の直線距離を求めるマクロを作ろうと考えております。
その処理を複数回行いたいので、あとでfor文を追加しようと思い、
とりあえず、1セットの住所に対して、距離を返すマクロをネットを参照して、作成してみました。
行 A B C D E F G
2 住所1 緯度 経度 住所2 緯度 経度 距離
というシートに対して、
Sub distance()
Dim geo As Variant
geo = AddressToLatLng(Range("A2").Value) Range("b2").Value = geo(0) Range("c2").Value = geo(1)
geo = AddressToLatLng(Range("D2").Value) Range("e2").Value = geo(0) Range("f2").Value = geo(1)
Range("g2").Value = DistanceKm(Range("b2").Value, Range("c2").Value, Range("e2").Value, Range("f2").Value)
End Sub
Function DistanceKm(StartLatitude As Double, StartLongitude As Double _
, EndLatitude As Double, EndLongitude As Double) As Double
Dim myNS As Double, myEW As Double
With Application.WorksheetFunction
myNS = (StartLatitude - EndLatitude) / 360 * 40000# myEW = (StartLongitude - EndLongitude) / 360 * 40000# _ * Cos(.Average(StartLatitude, EndLatitude) * .Pi() / 180) DistanceKm = (.SumSq(myNS, myEW)) ^ 0.5 End With
End Function
'住所から緯度・経度に変換
'戻り値は配列で、(0)が緯度、(1)が経度。 Function AddressToLatLng(ByVal address As String) As Variant Dim sc As Object Dim jsn As Object Dim result As Object Dim http As Object Dim URL As String Dim status, results, location As String
Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set sc = CreateObject("ScriptControl") sc.Language = "JScript" sc.AddCode "function getLatLng(s) { return eval('(' + s + ')');}"
URL = "https://maps.googleapis.com/maps/api/geocode/json? address= &key=私のapi key" & sc.CodeObject.encodeURI(address)
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", URL, False http.send Set jsn = sc.CodeObject.getLatLng(http.responseText)
If jsn.status = "OK" Then
For Each result In jsn.results AddressToLatLng = Array(result.geometry.location.lat, result.geometry.location.lng) Exit For Next Else 'エラー AddressToLatLng = Array(999, 999) End If
Set jsn = Nothing
Set sc = Nothing End Function
しかし、返される緯度・経度は999で
Function AddressToLatLngでエラーが発生していることはわかるのですが、
何が問題なのかわかりません。
url内のAddress=以降が指定できていないためかと思ったのですが、
これを指定する方法がわかりません。
どうかご教授ください。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
まず、ステップ実行しつつ、変数の中身を確認し、どこまで動いているのか確認してください。
とりあえず、URL指定は、アドレスのキーワードと文字列の間に、訳の分からない「私のapi key」とか挟んでいますが、ちゃんと考えて挿入しましょう。 なんでもかんでも書けば伝わる、なんてはずはないです。 連続実行しないなら、キー指定不要でしょう。
そして、エラー時の処理に流れているのだから、jsn.statusは "OK" 以外の何かなのでしょう。 確認してください。 更に、一歩手前の http.responseText に何が返ってきているのか気になりますね。
(???) 2018/10/01(月) 12:58
あと、"? address=" のように余分なスペースが入っていますが、間空けずに詰めましょう。
(???) 2018/10/01(月) 13:13
勉強を重ねようと思います。
(卒論勉強) 2018/10/01(月) 17:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.