2012年6月20日水曜日

Geocoding APIで緯度経度を取得

PowerShell覚え書き

背景

 完全に時代錯誤かもしれませんが、これまで個人的にWEB APIと無縁でした。遊びはじめたら色々とあるので、とりあえず基本的なことからメモしておきます。(本当はGoogle Mapsで色々やってみたいのですが、時間がかかりそうなので。)

お題

 Google Geocoding APIで住所から緯度経度を表示する。

param( [String]$address="千代田区北の丸公園")

$encoded_address=[System.Uri]::EscapeDataString($address)
$google_geocode_api_uri="http://maps.googleapis.com/maps/api/geocode/xml?address="+
                        $encoded_address+"&sensor=false&language=ja"

$enc = [System.Text.Encoding]::GetEncoding("utf-8")
$bytes=(New-Object System.Net.WebClient).DownloadData($google_geocode_api_uri)
$xml=[XML]$enc.getString($bytes)
$xml.GeocodeResponse.result|
    %{ "lat:"+$_.geometry.location.lat+" lng:"+$_.geometry.location.lng+
    " address:"+$_.formatted_address }
    


結果

lat:35.6905448 lng:139.7546424 address:日本, 東京都千代田区北の丸公園

メモ

 リクエスト送信は最初System.Net.WebClient.DownloadData(URI)でやっていたのですが、日本語データが含まれる場合にXMLへのキャストに失敗(XmlDocumentに変換できません。)したために上記の方法に変更しました。
 また、上記ではXMLで結果を受け取っていますがGeocoding APIとしてはJSON形式(推奨)でも受け取る事が可能です。PowerShell3ではJSON対応のコマンドレットが追加される予定ですので、いずれはJSONで実装したいと思います。

0 件のコメント:

コメントを投稿