GoogleAPI~住所から緯度経度を取得する(その2)~

前回は、Google MAPSのWeb APIを使用して、緯度経度を含んだ情報をXML形式で取得する方法を紹介しました。
前回の情報はmy-hobby : GoogleAPI~住所から緯度経度を取得する(その1)~で確認できます。

今回はGoogleAPIを使用して取得したXMLの仕様を確認し、そこから緯度経度を取得してみたいと思います。

緯度経度を取得するに当たり、サービス – Google Maps API – Google Codeを参考にしました。
なおリンク先の説明はJSONになってますが、実際に動作テストした結果、リンク先に記載されている内容と合致していたので、今回はこれを基にプログラムを作成しました。

その内容から見るべきXPATHは以下の2つと考えました。
1.kml/Response/Status/code
リターンコードを示しています。
「200」が正常終了。それ以外は今回の処理では異常終了とみなす事にします。
リターンコードの種類についてはGoogle Maps API リファレンス – Google Maps API – Google Codeに記載されています。

2.kml/Response/Placemark/Point/coordinates
リクエストされた住所の 緯度、経度、高度 をカンマ区切りで示しています。
※高度は常に0が返されます。

上記内容を踏まえてWindowsフォームより入力した住所に対して、GoogleAPIを使用して緯度と経度を求めます。
■入力フォーム

■ソースコード

[vbnet]
Imports System.Xml
Imports System.Web
Public Class Form1

Private Sub btn_Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Search.Click

Dim xNode As XmlNodeList
Dim Enc_Address As String
Dim APIKey As String = "(各自で取得したAPIキー)"
Dim RequestUrl As String
Dim GeoCode() As String

If txt_Address.Text = "" Then
Exit Sub
End If

Enc_Address = HttpUtility.UrlEncode(txt_Address.Text)
RequestUrl = "http://maps.google.com/maps/geo?&q=" & Enc_Address & "&output=xml&key=" & APIKey

Dim xDoc As XmlDocument = New XmlDocument
xDoc.Load(RequestUrl)

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xDoc.NameTable)
nsmgr.AddNamespace("gmap", "http://earth.google.com/kml/2.0")
xNode = xDoc.SelectNodes("/gmap:kml/gmap:Response/gmap:Status/gmap:code", nsmgr)

If xNode.Item(0).InnerText <> "200" Then
Exit Sub
End If

xNode = xDoc.SelectNodes("/gmap:kml/gmap:Response/gmap:Placemark/gmap:Point/gmap:coordinates", nsmgr)

GeoCode = Split(xNode.Item(0).InnerText, ",")
txt_Keido.Text = GeoCode(0)
txt_Ido.Text = GeoCode(1)

End Sub
End Class[/vbnet]

■実行結果

ちなみにGoogleAPIの仕様上は、施設名などでも緯度経度の検索は可能ですが、複数ヒットした場合、このプログラムでは考慮されていません。
複数ヒットの場合は、最初のデータが使用されます。

※施設名(東京タワー)で検索した場合

次回は2つの住所から、2点間のおおよその距離を求める方法にチャレンジしてみたいと思います。

カテゴリー: flashcast, googlemap, 緯度経度検索 パーマリンク

GoogleAPI~住所から緯度経度を取得する(その2)~ への1件のフィードバック

  1. ピンバック: my-hobby : GoogleAPI~2つの住所から距離を求める~

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です