AirでIPアドレスから位置情報を特定する

Google Mapを使う場合、まず始めにどこを表示すべきかという問題がある。

そこで、IPアドレスから位置情報を取得できないかと思った。しかもAirで。

IPアドレスから位置情報を取得する方法は下記のページを参考にした。
ブラウザで位置情報を取得してみよう - @IT

今のところ、google.loader.ClientLocationを使う方法が一般的らしい。上記のページのサンプルで動作を確認できる。精度の問題があるが、それはこの際よいことにする。

Airで位置情報取得する場合の最大の問題は、google.loader.ClientLocationがAJAXからしか取得できないということだ。

FlexであればFlexを読み込むHTMLにAJAXを埋め込んでExternalInterface経由でAJAXを使う方法やFlexにflashVarsで値を渡す方法が考えられるが、Airの場合はどうするのか。

まず、FlashからダイレクトにClientLocationを叩くライブラリが無いか?と調べたが見当たらなかった。次は、Googleのサーバーのどこかに普通のGETリクエストで取得できるAPIが無いか?と調べたが見当たらなかった。

そこで、どこかのWEBサーバーにAJAXで位置情報を取得するHTMLを置いて、それをflash.html.HTMLLoaderで読み込んでDOMからパラメーターを取得する方法を思いついた。

まずHTMLは上記のページのサンプルをほぼそのまま流用させてもらって、WEBサーバーに配置。Airの方では下記のようなコードを入れる。

//google.loader.ClientLocationを使って
//IPアドレスから位置情報を取得するHTMLを読み込み
//そのHTMLからlatlngを取得する
var html:HTMLLoader = new HTMLLoader();
html.addEventListener(Event.COMPLETE, onCompleteHtml);
function onCompleteHtml():void {
  var lat:Number = Number(html.window.document.getElementById("latitude").innerHTML);
  var lng:Number = Number(html.window.document.getElementById("longitude").innerHTML);
  if ( isNaN(lat) || isNaN(lng) ) {
    trace("onCompleteHtml() No Valid LatLng");
  } else {
    trace("onCompleteHtml() lat=" + lat + " lng=" + lng);
  }
}
html.load(new URLRequest("http://xxx.xxx.xxx/clientlocation.html"));

これでうまく取得できたが、エレガントではない。

できれば、IPアドレスを引数にしてGETリクエストを飛ばしたらXMLか何かを返してくれるようになると便利だと思う。

コメント

このブログの人気の投稿

レオナルド・ダ・ビンチはなぜノートを「鏡文字」で書いたのか?

macでsmb(samba)共有サーバーに別名で接続(別アカウント名で接続)する方法

Google DriveにCURLでアップロードするには?