【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(動かなくなった古いバージョン)]

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

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

'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="

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

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

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

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

でも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先を下記のように変更しました。

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

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

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

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

コメントを残す

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

CAPTCHA