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

郵便番号構想を始めてから、住所に関する事にどっぷりと浸かっています。
郵便番号以外にも、住所から何か検索できるものは無いか・・・
住所を使って他にも出来る事は無いか・・・

ふと2つの住所を使って、2点間の距離を求める事が出来たら面白いのではないか?
なんて事を考えて見ました。
ただ住所だけでは2点間の距離を求めることは出来ないので、住所からある情報を検索してそこから2点間の距離を求める方法を考えました。

それは緯度と経度です。
ただ、住所から緯度と経度を検索する事なんで出来るのでしょうか?

出来ます。
それはGoogle MAPSです。
Web APIとしてGoogle MAPSがWeb APIを公開していました。

ただし、GoogleのWeb APIを使うためには、Google APIキー(ライセンスキーの様なもの)が必要という事なので、
先ずはGoogle APIキーの取得を行ないます。

Google APIキーは以下のサイトより入手できます。
Google Maps API – Google Code

より詳細な取得方法はGeekなぺーじ : Google MAPS API keyを取得するが参考になると思います。
※このページではJavaScriptによる緯度経度の取得方法も記載されています。
今回の記事を作成するにあたっても、参考にさせていただきました。

JavaScriptで実装する場合は、専用のオブジェクトが用意されていますが、
VB.netで実装する場合はURIにパラメータを直接指定して、
その戻り値(レスポンス)を元に緯度経度を取得する形式となります。
詳細はこちら
今回は戻り値をXML形式で取得し、そこから緯度経度を抽出する方式とします。

先ずはGoogleAPIにリクエストするURIの仕様は以下の通りです。

ジオコーディングとは、住所 (「1600 Amphitheatre Parkway, Mountain View, CA」など) を地理座標 (緯度37.423021、経度 -122.083739など) に変換する処理のことです。地理座標を使用して、マーカーを配置したり地図の位置決めを行うことができます。Google Maps API は、HTTP 要求を経由して直接アクセスするか、または GClientGeocoder オブジェクトを使用してアクセスできるジオコーディング サービスを備えています。

(中略)

HTTP 要求経由のジオコーディング
サーバー側スクリプトを使用して Maps API ジオコーダに直接アクセスするには、URI
に次のパラメータを指定して http://maps.google.com/maps/geo? に要求を送信します。
q — ジオコーディングする住所。
key — API キー。
output — 生成される出力の形式。xml、kml、csv、または json を指定できます。

※ジオコーディングする住所はURLエンコードが必要です。

【例】住所:日本東京都港区芝公園4丁目2-8とした場合
http://maps.google.com/maps/geo?&q=%93%8C%8B%9E%93s%8D%60%8B%E6%8E%C5%8C%F6%89%80%82S%92%9A%96%DA2-8&output=xml&key=(各個人で取得したAPIキー)

試しにこれをブラウザのアドレスに直接入力すると、
以下の様な結果が表示されます。

これをプログラムで読み込むには以下のコードを記述します。
■入力フォーム

■ソース

[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 Enc_Address As String
Dim APIKey As String = "(各個人で取得したAPIキー)"
Dim RequestUrl 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)
Console.Write(xDoc.InnerXml)

End Sub
End Class[/vbnet]

■デバッグ

[xml]
<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Response><name>日本東京都港区芝公園4丁目2?8</name><Status><code>200</code><request>geocode</request></Status><Placemark id="p1"><address>4丁目2 8 Shiba Park, Minato, Tokyo, Japan</address><AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>JP</CountryNameCode><CountryName>Japan</CountryName><AdministrativeArea><AdministrativeAreaName>Tokyo</AdministrativeAreaName><Locality><LocalityName>Minato</LocalityName><DependentLocality><DependentLocalityName>Shiba Park</DependentLocalityName><Thoroughfare><ThoroughfareName>4丁目2?8</ThoroughfareName></Thoroughfare></DependentLocality></Locality></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="35.6617821" south="35.6554869" east="139.7485585" west="139.7422633" /></ExtendedData><Point><coordinates>139.7454109,35.6586345,0</coordinates></Point></Placemark></Response></kml>[/xml]

XmlDocumentオブジェクトを使用すると、非常に簡単に結果を取得する事が出来ます。
次回は取得したXML情報から、緯度と経度を取得する方法を紹介します。

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

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

  1. ピンバック: my-hobby : GoogleAPI~住所から緯度経度を取得する(その2)~

コメントを残す

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