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の方では下記のようなコードを入れる。
これでうまく取得できたが、エレガントではない。
できれば、IPアドレスを引数にしてGETリクエストを飛ばしたらXMLか何かを返してくれるようになると便利だと思う。
そこで、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か何かを返してくれるようになると便利だと思う。
コメント
コメントを投稿