北海道から帰って写真や動画の整理も、まだ道半ばで見通しが立っていません。その編集の中でGPSロガーで収集した移動の軌跡が、グーグルアースで 表示できるkmlファイルとして収集できました。
軌跡が抜けている経路もあちこちにあり、抜けた原因も色々で、また何が原因で抜けているのか不明なこともあります。しかし、せっかくの収集データなので今回の北海道でのメニュー表示内にその軌跡を一括で表示してみようと考えました。
これがけっこう難問題で、意識して分割しているわけではないのですが、GPSロガーが短期間静止するとその時点で勝手に休止して、ファイルが分割してしまうようです。そんな訳で全ファイル数が210ファイルを超えていました。
そのファイルを非力なサーバーで読み出して、遅いネット上を転送するのに長い時間が掛かります。もともと写真を公開しているサーバーの処理では、1日か2日程度を想定していて、データが全て転送されてからマップ上に表示するためのオブジェクトを生成しています。今回の場合は完全に想定外な、とても大きな軌跡データとなりました。
試しにそのままで表示してみると、日本地図が表示されてから変化がなく、他の画面に移動しなければ、完全に忘れた頃に赤い経路が描画されて最終的には表示が行われました。
これを転送途中で逐次描画できないものか、単一の赤ではなく赤系で少しずつ色を変えて、同じ経路を何度も往復していても、地図を拡大した時には色の異なる線で確認できないかと、スクリプトの変更を考えました。
元は自分で作成したオリジナルのスクリプトでも、ドキュメントも無く年月も立っているし、最近の仕事は全く異なる世界で過ごしていて、プログラミングから離れていたので難儀をしました。データファイルを読んだり転送する部分はサーバーサイド側で動作するrubyのスクリプトで記述しています。
処理を繰り返して分割転送すためには1回で完結する記述では実現できないので、cookieで情報を保持する必要があり、rubyでcookieの書き出し方法ではまってしまい悩みました。
よくよく考えてみれば、cookieは個々の端末側で保持する情報なので、サーバーサイドで動作するrubyスクリプトで書き変えることはできないわけです。最終的にはテンポラリファイルに情報を保持して、そのテンポラリファイル名を端末側に渡してcookieで保持して、何度か処理のループで起動されるrubyスクリプト側で、その情報を取出して処理の継続性を確保する方法でまとめてみました。
地図に表示される経路の軌跡が特別に早くなっているわけではありませんが、何の変化もなく長時間待つのに比べれば、少しずつ描画されていくのが見えるので更新は成功したと思います。何人の人が見てくれるかはわかりませんが、自分自身が単に納得できるだけで一応成果があると思っています。
実はグーグルマップ上に経路の軌跡や写真を撮った場所を示すピンをマップ上のオブジェクトとして追加生成するのですが、色々な条件でのタイミングで先に生成したマップが安定する前に、オブジェクトの追加処理が始まってしまうと無視されてしまうようです。ここでも対策に悩みましたが、結局マップの生成から10秒程度の待ちを作ることにしました。
皆さんグーグルマップてすごいと思いませんか、私は公開されているAPIを利用させていただいて、組み込んでいますが、通常の地図や地形図、航空写真の切替やドラッグによる地図の移動、マウスホイールの回転による拡大縮小、地名や住所入力による表示の中心位置の移動、北緯東経の入力による表示の中心位置の移動が出来るようにしています。
そうそうAPIを利用したこんな事も追加しています、地図を適当なズーム値で表示しておき、地図上でマウスをダブルクリックするとドラッグで移動できる大きなピンが表示されます。このピンが指す場所の住所やあるいは道路名、北緯東経などの情報が表示できます。