【VBA+XML】Google Maps APIがver3にアップしてる!また動かないよ・・

中元シーズンと歳暮シーズンの年に2度だけ動かす自家製配達先地図生成ソフト(MS-
Access製)を半年ぶりで使うと・・・・

あれ、また動かない:-o

調べてみると「Google Maps API ウェブ サービス」のVer2は終了し、最新はVer3。
プログラムの書き直しが必要みたい・・・

半年ごとに仕様が変わるGoogleサービスに合わせてプログラムを書き換えるのは、ちょっとシンドイです。

変更点は2つ:
1:問い合わせURLの変更
2:XMLレイアウトの変更

“1:問い合わせURLの変更

[Google Maps API ウェブ サービスver3]
[Geocoding API Ver2(動かなくなった古いバージョン)]

上の仕様ページを参考にプログラムを下記のように変更するとエラーが無くなりました。

でも緯度経度に住所欄が空白のまま(何故) 🙁

[vb]’2013中元商戦で動いてたVer2用URL
myURL = "http://maps.google.com/maps/geo?&q="

‘2013歳暮商戦ではVer3に代わり下記のようにスクリプトを変更
myURL ="http://maps.googleapis.com/maps/api/geocode/xml?A&sensor=true&address="[/vb]

落としたXMLデータから緯度・経度、住所の情報が取り出せていない。
原因をいろいろ調べて見ると、あれVer2とVer3のデータレイアウトが全く違う:-o

“2:XMLレイアウトの変更
[XPath による XML の処理—- Google Maps API ウェブ サービス]

ver2の時は都道府県、市、町名、番地が別々のタグだったので下記のようにXPathで直接取り出せました

[vb]For Each Node In
XDoc.selectNodes("/kml/Response/Placemark/AddressDetails/Country/AdministrativeArea/AdministrativeAreaName")
’ ’都道府県
myPOINT = myPOINT & "," & Node.Text
Next

For Each Node In
XDoc.selectNodes("/kml/Response/Placemark/AddressDetails/Country/AdministrativeArea/Locality/LocalityName")
’市
myPOINT = myPOINT & "," & Node.Text
Next

For Each Node In
XDoc.selectNodes("/kml/Response/Placemark/AddressDetails/Country/AdministrativeArea/Locality/DependentLocality/DependentLocalityName")
’町名
myPOINT = myPOINT & "," & Node.Text
Next

Each Node In
XDoc.selectNodes("/kml/Response/Placemark/AddressDetails/Country/AdministrativeArea/Locality/DependentLocality/Thoroughfare/ThoroughfareName")
’番地
’ myPOINT = myPOINT & "," & Node.Text
Next
[/vb]

でもVer3用は住所のパーツが全部同じ「address_componentタグ」に変更。
「/GeocodeResponse/result/type」がpremiseかpoliticalで住所パーツの順番
が変化し僕のプログラムがうまく動かない・・・(困った)

premise」=建物特定された場合:
(0)type(1)経度(2)緯度(3)Japan(4)〒県(5)市(6)町(7)番地(8)
political」=おおよその位置:
(0)type(1)経度(2)緯度(3)町(4)市(5)県

試行錯誤しながらXPath先を下記のように変更しました。

[vb]For i = 0 To UBound(mySplitData)

If mySplitData(0) = "premise" Then

Select Case i
Case 1
’緯度
myLAT = mySplitData(1)
Case 2
’経度
myLNG = mySplitData(2)
Case 4
’都道府県
myPref = Trim(mySplitData(4))
If Left(myPref, 1) = "〒" Then
myPref = Trim(Mid(myPref, 11, 200))
End If

Case 5
’市
myCity = Trim(mySplitData(5))
Case 6
’町名
myTown = Trim(mySplitData(6))
Case 7
’ストリート
myStreet = Trim(mySplitData(7))
End Select

Else

Select Case i
Case 1
’緯度
myLAT = Trim(mySplitData(1))
Case 2
’経度
myLNG = Trim(mySplitData(2))
Case 5
’都道府県
myPref = Trim(mySplitData(5))
Case 4
’市
myCity = Trim(mySplitData(4))
Case 3
’町名
myTown = Trim(mySplitData(3))
Case 6
’ストリート
myStreet = Trim(mySplitData(6))
End Select

End If

Next i
[/vb]

不具合がいくらか残ったままですが取りあえずVer3対応地図アプリ完成!?
悲しいかな本業は卸業。取りえず地図が出ればOK:-)
プログラムの完成度を突き詰める時間的余裕はありません。

ver2からver3へプログラムを書き換えようやく地図が!あれ、マークの色が渋くなってる!

これでやっとスタート地点。
早速、商品の配達を始めなければ仕事が終わらない 😮

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA