トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

独り言日記(2009/11)

独り言日記

同一ドメイン内でのJavaScriptからの外部ファイル読み込み(2009/11/30)

自分用メモ。

「Scripting.FileSystemObject」によるJavaScriptからの外部ファイル読み込みは、セキュリティの警告が出るのでほかの手段がないか探すと、「XMLHttpRequest」(FirefoxやSafariの場合)、「ActiveXObject("Msxml2.XMLHTTP")」(IEの場合)、が使えますね。

これだと同一ドメインの縛りはあるけど、ローカルでも例えばCSVをブラウザから読み込んで処理する、というのができています。ブラウザとしてよりも、ローカルアプリとして単にGoogle Mapsを使いたいだけだとするとこれは使えそうです。

以下のような感じで使用できます(HTMLに記載するJavaScriptになります)。

   function createXMLHttpRequest() {
       var XMLhttpObject = null;
       
       if(window.ActiveXObject) {
           // IEの場合
           try{
               XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
           } catch(e) {
               try {
                   XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
               }catch(e) {
                   return null;
               }
           }
       } else {
           // IE以外のブラウザの場合
           try {
               XMLhttpObject = new XMLHttpRequest();
           } catch(e) {
               return null;
           }
       }
       
       return XMLhttpObject;
   }
 
   function foo() {
       // XMLHttpRequestのオブジェクトを作成
       var request = createXMLHttpRequest();

       // 外部ファイルの読み込み(同期取得。読み込みが完了するまで次に進まない)
       request.open("GET", "test.csv", false);
       request.send(null);
 
       // テキストとしてファイル内容を取得
       var retStr = request.responseText;
   }

上記のようにした場合のfoo関数のretStrに外部ファイル「test.csv」内のテキストが入ります。この「test.csv」を上記のJavaScriptがあるHTMLファイルと同一ディレクトリにおいておけばローカルでも外部ファイル読み込みができますね。セキュリティの警告も出ません。

Firefox(Win)/IE(Win)/Safari(Mac)で動作するのを確認しました。

なお、JavaScriptのファイル読み込みは時間がかかる場合があるため、非同期にしてファイルが完全に読み込まれるとコールバックを返す(その間は即座に次の処理に進む)、という手段もあります。ようは、このあたりは「Ajax」ですね。Ajaxはノータッチだったのですが、これの入り口が「XMLHttpRequest」の非同期通信だそうで。

Google Mapsで使う場合は、外部ファイルに緯度経度などを随時格納し、これをタイマーでまわしながらJavaScriptで取得して画面に反映させればスムーズに行くことになります。

クライアントアプリにGoogle Mapsを埋め込む場合は、

  • GPSから緯度経度を取得してファイル「lat.txt」などに書き出し(これを1秒間隔に出力)
  • Google Maps(JavaScript)で、1秒間隔でlat.txtが読み込める状態なら読み込み。この情報を反映させる。

の2つのループがあって、外部ファイルを使ってやりとりを行う、という流れになります。もちろん、ファイル出力途中に読み込むとおかしくなるといけませんので、ファイルロックの制御は忘れずに。

また、GPSのロガーソフトからのログ取得は成功し、gpxという拡張子のXMLにて取得できているのを確認しました。このファイルは、計測時間、緯度軽度、高度、速度(相対的なもの)が列挙されているファイルになっており、これをポイントしていくことで経路は後付けで地図上に反映できそうです。

gpxとは「GPS Exchange Format」のことで、汎用的なフォーマットなんですね。

http://www.topografix.com/gpx.asp

自分はこの経路をたどってみた、なんて情報交換に使えるんだそうです(サイクリングとか山登りとかで)。

Google Maps Navigation(2009/11/29)

ちょっと調べたところ、Google自身がGPSとGoogle Mapsを使ったAndroid携帯でのカーナビ「Google Maps Navigation」というのを進めているみたいですね。

以下、紹介動画。

http://www.youtube.com/watch?v=tGXK4jKN_jY

以下、公式サイト。

http://www.google.com/mobile/navigation/index.html

音声でのナビも使えるらしい。基本的には、Google Mapsにできる機能にGPSの情報を与えた、という形になってそうです。技術としては今ある機能をつなぎ合わせただけといえばそれまで、ですが。動画では、写真に経路の道筋が半透明でオーバーラップされていて、おおっ、と思ったのですが ストリートビューに経路を表示してるだけっすね。カメラとリアルタイムオーバーラップかよ、と勘違いしてしまいましてちょっとびっくりしました。

で、アメリカのカーナビ関連メーカーはこれが発表された直後に株が下がったんだそうな。そりゃ、無料でネット接続のカーナビを提供されたりしたらたまらんだろうなぁと。Googleはそれをやっちゃおうとしていると。使用できるのは今のところアメリカだけとなっているようですが、いずれはGPSを使ったサービスの無料化の流れは来るでしょうね。

日本ではサイクリングでGPSでロギングして経路を確認したりしているサイトも多い気がします。ロギングしたものを後でGoogls Mapsに流し込むとか。

ですが、iPhone/Android携帯ですと、GPSも使えるしネット接続もできるし開発もできる、ので、一体型の端末としてはちょうどよいんだよなぁ。その場で経路確認もできてしまうわけですし(バッテリーが持つかは不明ですが)。今は実験もかねてなのでPCでプログラムしていますが、いずれはiPhoneあたりに移行してみたいなと思っています。

続・Google Maps API(2009/11/29)

GoogleMap + GPSにて、テスト的に1秒間隔で移動した軌跡を表示するようにしてみました。

なお、上記にある緯度経度は実際の測定からわざとずらしています。ですので、私がかっぱ寿司近辺で怪しく動めいていた、ってわけじゃありません(^_^;;。

個人位置情報が分かる部分は隠していますが、NMEA-0183フォーマットでは「$GPGGA」というのをパースすることでGPSからの主要な情報を取得できます。

GoogleMapはJavaScript経由での制御なので、アプリで統合するようなものを作るとすると、一時的に作業ファイルを吐き出してJavaScriptで読み込ませる、などの細工が必要になりますね。規約上、ブラウザから離れた利用自身あんまりよくないかもしれません。まだGoogle Maps APIの使用規約をまともにチェックしていないので、後々確認してみることにします。

JavaScriptからのファイル読み込みでセキュリティーの警告が出るため(ActiveXの「Scripting.FileSystemObject」でファイルをJavaScriptから読み込むようにした)これは改善の余地ありか。

いずれにせよ、これで実際に歩いた軌跡を表示しながらマッピング、ができるようになりました。ダンジョンゲームのオートマップのような感じですね。

とプログラムはできましたので、今度の休日に実際に歩いてマッピングしてみるかな。

無線のネット環境がないためGPS情報だけロギングしておいて、後で流し込むのが無難な感じです。ちなみに上記のような地図+GPSを使ったマッピングは、iPhoneのアプリなどでも大量にあると思いますので(普通の携帯電話のアプリでもあるかも)いまさらな実験だったりします。ノートPCでGPSと通信機能を持ち歩いて、というのが大掛かりではありますので、実用を考えたら(こういうのを作るんだとしたら)iPhoneを端末に選ぶのが無難かなぁ。

秋月で購入したGPSレシーバ(GT-730F/L)は、USB電池ボックスなるものが付属で追加されており、どうもロガー機能が使えるっぽいのですが、ハードで記録ってのはしてないですよね、たぶん。ソフト制御なら自分でロガーを作ってしまったほうが早いかもしれません。

追記:

ロガー機能ですが、チップに内蔵されているようです。ハードの製造メーカーのサイトより。

*2M Bytes flash memory for data logging,
  with 16 bytes binary data per record that stores up to 256K data records
*Log data can be exported to mapping software suchas Google Earth and TrackMaker

このGPSレシーバの仕様は、以下のサイトにてやたら詳しく解説してました。

http://yamagatan.com/?p=log&l=117984

専用ソフトでログデータを抽出できるみたいですね。

先日は、誤差は5メートル以内と書いたのですが、実際にマップに当てはめて観察していると、動いていなくても緯度経度がずれるときが見受けられました。衛星の観測数が少なくなる場合があり、少ないとぶれが大きくなる感じです。道路一幅くらいの誤差は発生しますねぇ。これは場所をいろいろ変えて実験してみる必要がありそうです。

Google Maps API(2009/11/28)

以下のGoogle Maps APIにて、実際にGPSにて取得した緯度経度を当てはめて精度検証中。

http://code.google.com/intl/ja/apis/maps/

今は実際の位置を出すわけにはいかないため(自宅なんで(^_^;;)、後々公共の場を使って測定にいく予定です。

場所にもよるかもしれませんが、実際の誤差としては5メートル以内というところですかね。

NMEA-0183のフォーマットから取得できるのは、m度n分の情報ですのでこれをGoogle Mapに理解できるように「m + (n / 60)」の緯度・経度に計算して当てはめます。

JavaScriptでは、定型的な記載を省いたとして

// 地図をあらわす基本オブジェクトの生成
var map = new GMap2(document.getElementById("map_canvas"));
       
// マップの種類
map.setMapType(G_NORMAL_MAP);
       
// 緯度経度の指定
var point = new GLatLng(緯度, 経度);

// 表示地図の中心位置指定(第二引数は拡大率)
map.setCenter(point, 18);

// マーカーの表示
map.addOverlay(new GMarker(point));

でOKですね。

また、「GPolyline」クラスにて複数の緯度経度をつなげた線も引くことができました。これで、歩いた位置をラインで結んでいって軌跡を表示してみる、なんてことに使えそうです。

Google Mapでは、地図に表示するマーカーやラインは「Overlay」というもので表現され、このほかにポリゴン、情報ウィンドウ(ふき出しのようなもの)、なども表示できるようです。

これはGoogle Mapとは関係はないですが、GPSからは「平均海水面からのアンテナ高度」というのも取得できていますので、たとえば道路と建物の2階で測定した場合の高さはどうなるのか、なども検証したいところです。ですが、高さはすぐに1メートルの差が出たりちょっと不安定かもしれません。

大阪のアヒルちゃんリターンズ(2009/11/24)

年末の2009/12/12〜2009/12/25に八軒家浜に再び巨大アヒルが帰ってくるとのこと。

http://www.namura.cc/ahiru/

前回見逃したので、今度は見に行きたい!!後一週間遅ければ私も帰郷するので会えたのですが、、、。早めに帰って見に行こうかどうしようか。そもそも、今年は帰れるだろうか、、、。

いずれにせよ、そろそろ新幹線のチケットを買う準備をしないといかんです。後、年賀状と。

続・GPSレシーバ購入(2009/11/23)

GT-730F/Lのドライバを「http://www.canmore.com.tw/」よりダウンロードすると、XP/Vista以外でもMac OS X/Linuxのドライバも同梱されていました。

今回はMacBook上のVistaにてインストールです。「USB_Driver(Vista).exe」を実行すると、PL-2303 Driverというのが出ますのでインストールを開始。

しかし、文字化けするので手探りで3つめを選択して進めると、一瞬にしてインストール画面が閉じました。

本当にインストールが完了しているのか、デバイスマネージャより「Prolific USB-to-Serial Comm Port(COM3)」という表示があるのを確認。COM3となっていた場合はポート番号3の使用となります。

これをダブルクリックして、ポート設定のBPSを38400にすると、私の過去作っていたテストプログラムは動作しました。

自宅からだと、室内でも衛星数が8個ゲットできました。さすが埼玉。さえぎるものがないのはいいねぇ。今度、オフィス付近で歩いて計測してみよう。

ということで、MacBook上のVistaにて秋月電子で売っていたGPSレシーバ「GT-730F/L」は快適に動作しました。MacのドライバもあるのでSnow Leopardでもできそうですね。

3200円の投資でこれが得られれば研究の始まりとしては安いもんです。これでいろいろ材料がそろいました。後は、土日で研究を進めていこう。

GPSレシーバ購入(2009/11/23)

結局秋月電子にてGPSレシーバである「GPS USB DONGLE」(GT-730F/L)というのを購入しました。

http://akizukidenshi.com/catalog/g/gM-02619/

Vistaにも対応とうたってたので。ちゃんとNMEA-0813です。

以前購入したものが「GT-730F」なので結局同じメーカーだったのかな。なんか別会社だったような気もしたのですが、まったく同じ形状で型番だけ違ってました。

製造は台湾の会社だそうです。

http://www.canmore.com.tw/

ところで、ドライバのCD、シングルCDサイズなのは勘弁してほしかったです。MacBookにシングルCDを入れたら取り出せなくなって焦りましたよ(^_^;;。苦肉の策で、Mac起動時にマウスダウンしながら起動させてCDを出口付近まで移動させる、後は真下に振って取り出し口で引っ張りだせるまで移動させてつまんで取り出しました。

いや〜、このままCDが入ったままになるかと思いました。ということで、シングルCDをMacBookに突っ込まないようにしよう、という教訓を得ました。

GPSレシーバを探しに(2009/11/22)

先日秋葉原に行ってきたのですが、大型店では隅々まで見たつもりですがGPSレシーバーを探してもおいていなかったです。半年くらい前は棚の1/4くらいのスペースでこじんまりとあったと思ったのですが、、。

やっぱり秋月電子でバルクのを買うのがよいのかなぁ。過去買ったGPSレシーバがVistaで動けばよいのですが、ドライバが古いまま更新されないため使えてないです。

以下の動画が、秋月のGPSレシーバで測定してGoogleMap上にポインティングしたものみたい(Macで)。

http://www.youtube.com/watch?v=HOSJYahdiU0

過去実験した感じではこの動画のように1秒間隔で位置情報を取得、とかはなんとかできてましたのでほぼリアルタイムでの地図とのマッピングは可ではありますね。個人的に誤差がどれくらいあるのか計測したいなぁと。後、地図と合わせる以外の遊べる用途に期待を持ってます。

GPSレシーバでは絶対位置をそれなりに得ることができればとりあえずいいかと思っていて、相対的な補正をかける手段があればもっと面白いことができないだろうか。でも、GPSだと室内が弱点なので絶対位置・向きで言えばWiFiや電子コンパスやらと絡めて複合的に使うのがいいんですかね。

個人的にはシンプルにしたいので、GPS+画像処理(つまりはカメラからの映像)でそれができないかなと。、、、時間が取れないのでなかなか研究が進んでいないのもありますが(^_^;;。

でも、野外にて持ち歩くとなるとノートPCはちょっと大きすぎますね、というか不審者になりますね(^_^;;。ものすごいそれをやりたいのですけど、、、。

リアルタイムである必要はなく、例えば写真を撮ったそのときのGPS情報と画像解析+無線通信でその絶対位置と向きにまつわる情報をオーバーラップさせるという、東のエデンそのままのことはたぶん今の世にある技術で可能だとは思ってます。

例えば現実にある看板をカメラで取ってデジタルな落書きをすると、カメラで取った写真を通してその落書き情報を共有できるとか。特定の撮影ポイントでは心霊写真のように情報が出るという、宝探しみたいで面白いかもしれない。誰かやってほしいですね〜〜。そんな研究時間がほしいです(あくまでも、あくまでも趣味でそれをしたいだけですが)。

メーラー(2009/11/16)

メールは、Mac標準のApple Mailを使っているのですが、やはり大量のメールを削除したら時間がかかってしまいます。2000通くらいの迷惑メールを消していたのですが30分くらいカリカリなにかやってる、、、。待っていたら終了したので、ハングったわけではないようです。インデックスを作ってるんでしょうけど。。。

メールはやっぱりWindows環境に戻そうかなぁ。移行が面倒というのがあり、なかなか重い腰を上げれずにいます。

SiRF starIII/LP(2009/11/10)

以前、秋月電子で購入したGPSレシーバがVista環境ではうんともすんとも言わなくなったので、新しいGPSでいいのがないか検索中。

アイオーデータの「USBGPS2/SMD9」がいいのかな?

http://www.iodata.jp/product/mobile/gps/usbgps2smd9/index.htm

GPS受信用チップセットが「SiRF starIII/LP」となっているのですが、残念ながら通信プロトコルが明記されていないです。あくまでもプログラム(という名の遊び)で使うためのものですのでこれが分からないとつらいところ。

SiRF社というのは、アメリカのSiRF Technologyという会社で以下のHPのようです。

http://www.sirf.com/

ですが、該当するGPSの情報がどこにあるのかよく分からない、、、、。もうバージョンアップしまくっていて、starIII/LPは過去のものになってるのかもしれない。しかし、HPの雰囲気からザイリンクスっぽいなぁと。

他のサイトにて「starIII/LP」を採用しているGPS製品を見ると「NMEA-0183」と書いているのが多かったです。これなら分かりやすいのでいいのですが、はたしてアイオーデータのはプログラムで衛星情報をゲットできるかどうか、、、。

関係ないですが、昔のPC-98時代のアイオーデータの製品の話をひとつ。

昔々、アイオーデータやメルコは、グラフィックアクセラレータとして65536色(後に1677万色)を出すボードを出していたことがありました。今みたいにnVIDIAだのATIだの言われるよりも前です。グラフィックといえば「フレームバッファ」なんて言われた時代に5万円以下の手に入りやすい価格帯でした。でも、速度をアップさせるものじゃなくてあくまでも発色をハーフカラーやフルカラーにする、解像度を800x600にするという意味での「アクセラレータ」です。速度はお世辞にも速くはなかったですねぇ。

当時最大4096色中16色のPC-98としてはかなりの魅力でして、私もそのボードを購入したことがあります。ですが、DirectX/GameSDKとかはない時代ですので(というかWindowsすら3.1以前だったかな)当然ながらメーカーの独自APIでボードをいじれたんですね。分かる人は「ああ」と思われる「MS-DOS 3.3C」が神バージョンだったあのころ。

アイオーデータの場合は、C言語のAPI(というかBIOS)仕様と説明書がボードについていて、プログラマ(当時私は学生)にとっては非常に胸躍る製品だったんです。なんせ、操れば65536色ハーフカラーをPC-98で表現できたんですから。でも、各メーカーが独自仕様だったので結局それを使ったゲームや製品はあまり出てなかったように記憶しています。統一規格が出る前ですからね。OpenGLはその当時あったとは思いますが、高嶺の花だったです、たしか。

で、何がいいたいかというと当時は結構ハード製品にプログラマ向けのドキュメントや仕様書がオープンについていたという点。GPSも私から見るとまだ閉じた環境に思えますので、ぜひ製品にプログラマ向けの情報をつけてほしいなぁ、とちらっと思いました。なんとな〜く、創世記(過渡期)の楽しみがGPSには感じるんだよなぁ。

ぬいぐるみ(2009/11/07)

なかなか忙しくて更新できてませんでした。数ヶ月プログラムと関係ない駄文ですが今月もこんな感じになりそうです。

秋葉原行ってきて、ミクのぬいぐるみがあったので購入。

思ったよりも大きかったです。フィギュアは持ってないのですが、これは(フィギュアじゃないけど)自分の中では初キャラもの購入かな?後、CDで初音ミクを使ったものが増えてましたねぇ。

秋葉原探索の目的としては、「only my railgun」のCD(とある科学の超電磁砲のOP)を買おうとしてたのですが軒並み売り切れでした。先月耳コピして深夜のハイテンションの中アップしてたのはこの曲なんですが、発売前にコピー完了させたかったなぁ。ということで、放映期間中に完成させよう、うん。本当は、第一話のエンディング(が、次回からOPになってこれがonly my railgunになります)を見たときに、即コピーしてみようと思ったのですが時間の都合でどんどん後ろに。いずれにせよ、自分が気に入った曲が人気があったとわかって、一安心(?)です。物欲センサーは衰えてなかったということで。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.