中元シーズンと歳暮シーズンの年に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:-)
プログラムの完成度を突き詰める時間的余裕はありません。
これでやっとスタート地点。
早速、商品の配達を始めなければ仕事が終わらない 😮