qgmap-0.2.4 リリース

qgmap の 0.2.4 をリリースします。 →ダウンロードページ

0.2.3 からの変更点は以下のとおりです。

  • メモリ使用量の削減
  • ズーム In/Out で位置がずれないようにした
  • POI検索でキーワード指定をしない時は全てを表示
  • POI検索で検索対象指定が効いていなかったバグを修正
  • POI検索時、件数が200件以上だった場合は最寄りの200件程度を表示 (周辺検索)
  • POI検索中にプログレス表示を追加
  • POI検索ダイアログでフォーカスの移動に上下キーを使えるようにした
  • ’S’ キーでPOI検索を起動
  • SL-A300で、センターキーとOKキーに Zoom In/Out を割り当て

今回の修正は sugarware さんのご意見による改善が多いです。ご意見ありがとうございました。

POI 検索ダイアログでの挙動が結構変わっているので、改めて使い方を説明したいと思います。

POI検索ダイアログ
POI検索ダイアログ

まず、検索するには「検索:」のところにキーワードを入れて「検索」ボタンか、OKキーを押します。キーワードを入れなかった場合は、全てを表示します。

「検索:」の入力欄にフォーカスがある状態で↓/↑キーを押すと、フォーカスを「対象:」/「検索結果」に移動することができます。

「対象:」 では検索する対象を選びます。チェックマークをタップするか、SPACEキー、SL-A300ならセンターキーでチェックをトグルすることができます。ここでOKキーを押しても検索することが可能です。

検索対象が複数ある場合は上下キーで対象を選びますが、一番上の項目を選んでる状態でさらに上を押すと「検索:」の入力欄にフォーカスが移動します。逆に、一番下の項目でさらに下キーを押すと検索結果にフォーカスが移動します。

検索結果も「対象:」のリストと同様、一番上の項目で上キーを押したり、一番下の項目で下キーを押すことで、それぞれ「対象:」、「検索:」 にフォーカスを移動できます。

検索結果を選んでOKキーを押すと、そのPOIの場所へジャンプします。

フォーカスが当たっている部分毎に動作をまとめると以下の様になります。

「検索:」の入力欄にフォーカス

OKキー … 検索を実行
上キー … 検索結果へフォーカスを移動
下キー … 「対象:」リストへフォーカスを移動

「対象:」のリストにフォーカス

OKキー … 検索を実行
スペースキー … チェックをトグル   (SL-A300ではセンターキーも)
上キー … リストの選択の移動。一番上の項目では「検索:」の入力欄へフォーカスを移動
下キー … リストの選択の移動。一番下の項目では「検索結果」リストへフォーカスを移動

「検索結果」のリストにフォーカス

OKキー … 選択しているPOIの位置へジャンプ
上キー … リストの選択の移動。一番上の項目では「対象:」リストへフォーカスを移動
下キー … リストの選択の移動。一番下の項目では「検索:」の入力欄へフォーカスを移動

文章にすると分かりにくいかもしれませんが、使ってみると直感的なフォーカス移動ですぐ馴染めると思います。

 

また、0.2.3 では 1000 件を越える検索はエラーとして検索できませんでしたが、0.2.4 からは地図の中心から近い順に 200 件程度を表示するようになっています。 1000件では表示するまでに待つ時間が長いので 200 件に縮小しました。さらに、待ち時間を紛らすためにプログレス表示も実装しました。

検索数が多い時の警告表示
検索結果が多い時の警告表示

これで最寄り検索ができるようになりました。POIデータとしては全国区のデータを入れておいて、近くのPOIだけ調べるということが可能になりました。

 

あと大きな変更は、キー割り当ての変更です。

POI検索はキーに割り当てられていなかったのですが、’S’キーに割り当てました。

また、SL-A300 では、センターキーと OK キーで Zoom In/Out ができるようになりました。 これで SL-A300 では地図の閲覧だけなら物理キーだけでできるようになり、使い勝手がよくなったと思います。

qgmap-0.2.3 リリース

先日の 2 周年記念のブログエントリには多くの方から暖かい言葉をいただきました!ありがとうございました。

「ぼくがんばったよ!ほめてほめて!」みたいな小学生レベルの自己満エントリで今思うとちょっと恥ずかしいですが、大人な皆様が空気を読んで褒めてくださったので(笑)、読みながら照れ照れニマニマしてしまいました笑顔

皆様からご褒美をいただいたので、お返しといっては何ですが、qgmap の 0.2.3 をリリースします。  →ダウンロードページ

0.2.3 での修正点は以下のとおりです。

  • SL-A300に対応
  • POI検索結果に現在地からの距離を追加

今回はSL-A300 対応がメインです。SL-A300をお持ちでない方にはほとんど変化ありません (^^;

SL-A300対応はダイアログのサイズを固定値で設定していたので思いのほか手間がかかってしまいました。

qgmap が SL-A300 に対応!!
SL-A300に対応!!

ほとんどの機能は SL-C シリーズと同じように使えますが、一部機能は動かないものもあると思います。特に GPS, PHS 関係は動かない可能性が高いです。

スライダとか SL-A300 では操作しづらいので UI はまだまだ改良の余地ありですね。ブースカさんのアイデアの画面下部に大きなボタンを配置するというのもまだ手をつけられていません。

また、SL-A300で使用する際の注意点が3つあります。

  1. iso や rom イメージを使う場合はモジュールのインストールが必要
  2. 他のアプリの高速起動を切ること 
  3. SDカードを挿入していること

まず、SL-A300 で iso や rom イメージを使う場合は、tera さんの実用工房このエントリから miscfs-modules_a300_arm.ipk をダウンロードしてインストールする必要があります。

SL-Cシリーズでは iso はカーネルに組み込まれているんですが、SL-A300は組み込まれていないため、後からインストールする必要があります。

2つ目は qgmap が結構メモリ食いなため、他のアプリの高速起動が有効になっていると、「メモリが足りません」といったメッセージが表示されてしまいます。一応、地図画像のキャッシュサイズなどを減らしたのですが、付け焼き刃で全然効果がありませんでした。省メモリ化は今後の課題ですね。

3つ目はPOIのDBファイルを /mnt/card/qgmap-poi.db 決め打ちで置いてしまっているため、SDカードが必須になっています。SL-A300 はバックパックをつけない限り SD カードしか地図を置く場所がないので、大丈夫だとは思いますが、SL-C シリーズとは挙動が違うところです。

 

SL-A300対応の他のもう1つの変更点は、POIの検索結果に現在地からの距離を表示する機能を追加したことです。

POI検索の結果に距離を追加
現在地からの距離を表示

せっかくなので SL-A300 でスクリーンショットをとりました笑顔

緯度経度から2点間の距離を求めるのエントリで書いた公式で距離を求めています。また、初期状態で距離の近い順に表示されるようになっています。

矢印は「地図上の方向」を示しています。「方角」を示しているわけではないので注意してください。例えば、日本から真東に進むと赤道に交わり、いずれ南半球に到達しますが、上記検索結果の真東は同一緯度を表します。まぁ、qgmap を持って太平洋を横断とかしない限り気にする必要はありませんがあっかんべー

 

いままで一応メモリ使用量を気にして開発してきたんですが、 SL-A300 は SL-Cシリーズよりもさらに空きメモリが少ないんで、かなりキツキツギリギリですね。メモリ関係を見直す必要がありますね。

ただ、qgmap on SL-A300 は SL-C シリーズよりも表示が早く、キビキビ動作するので気持ちいいです。画面がQVGAと 1/4 なのと、回転処理がないので描画の負担が軽いためでしょう。このままでは私の SL-A300 は本当に地図専用デバイスになってしまいそうです笑う

緯度経度から2点間の距離を求める

久しぶりに開発途中のネタです。

POI の最寄検索や、検索結果表示で現在値からの距離を表示させたくて、任意2点の緯度経度から距離を計算する方法を調べてみました。

地球が球体なら何となく頭をひねれば分かるかもしれませんが、楕円体の緯度経度から距離を求めるのは私には見当もつきません。

ということでググってみると、楕円体を考慮していて、世界中の緯度経度で通用しそうな計算式が2つ見つかりました。

何となく航海で使用する下の公式のほうが正確な気はしますが、上のヒュベニの公式の方が演算が簡単そうな気がします。

また、qgmapでは多少の誤差も許容できるので数%程度(?)の精度で十分です。そこで近似式も候補に入れてみます。

これらの計算式がどの程度の正確さなのか、ランダムに選んだ緯度経度で計算して誤差と計算速度を検証してみました。

とはいえ、検証しようにも正解がわからないので、とりあえず国土地理院のサイトで2点間の距離を計算できるようですので、そのサイトとの誤差を調べました。つまり、実際に正確かどうかの検証ではなくて、国土地理院のサイトの公式に近いかどうかの検証です (^^;

で、結果は以下のとおり。

アルゴリズムの違いによる国土地理院サイトとの誤差
アルゴリズムの違いによる国土地理院サイトとの誤差

縦軸は国土地理院サイトで計算した距離(a)と、公式で計算した値(b)の誤差の割合(|a-b|/a) で、横軸が2点間の距離を示しています。

さすが航海算法と呼ばれるだけありLambert-Andoyerの公式は距離によらず 10^-5 以下の誤差率になっています。

ヒュベニの公式は50km以下ではLambert-Andoyerの公式と同等ですが、距離が離れるほど誤差が大きくなっていくようです。

簡易近似式は1000km以下では誤差0.1%前後で、1000kmを越えるとヒュベニの公式と同様誤差が増えていきます。

また、それぞれの公式を Zaurus で計算させた時の時間も測定しました。ちなみに、スペシャルカーネルを使っているので、浮動小数演算が高速化される FastFPE パッチが適用されています。

測地線航海算法のHPにはLambert-Andoyer と式的には同じですが、計算量が少し少ない小野の公式というものも載っていたので、こちらも計測しました。

各公式の計算時間

公式
1万回の計算時間
近似式 0.2838 sec
ヒュベニの公式  0.5043 sec
Lambert-Andoyerの公式  2.8202 sec
小野の公式  2.6518 sec

やはり近似式は演算量が少ないので高速ですね。1万回の計算が0.3秒なら充分実用的です。

ヒュベニの公式は近似式に比べ 1.8倍、Lambert-Andoyerの公式が10倍、小野の公式が9.5倍の時間がかかりました。

やはり精度が高い下の2つの公式は三角関数の演算などが多いため遅いですね。ただ、同じ結果が得られる小野の公式は少し早いようです。

結論

近似式が思いのほか精度が高かったので近似式を使おうと思います。

もともと精度も1%程度あれば十分かなと思っていたので、qgmap には充分ですね。

開発は案外こういう自己満足的な調査が楽しかったりするんですよねー。笑顔

qgmap-0.2.2 リリース

長い間お待たせしました。qgmap をリリースします。→ダウンロードページへ

ただ、今回は結構変更が入っているのでバグが増えてるかもしれません。気づいたら教えてください。

0.2.1 からの変更点は以下のとおりです。

バグフィックス

  • 「ルート権限で実行する」にチェックするとイメージをmountできないバグを修正
  • POI管理画面でPOIが1つもない時に削除・変更を押すと落ちるバグを修正

新規機能

  • メニューを実装
  • POI検索を追加
  • プリセットアイコンを追加
  • POIのアイコンを選択するダイアログを作成

まず mount 関係のバグフィックスについてですが、root権限で実行するとイメージをマウントできないバグを修正しました。

ただ、解決していないと思います。ルートでのマウントは可能になっているので、ユーザ権限でマウントできない場合は、「ルート権限で実行」にチェックしてみてください。

おそらく、上記の減少は mount コマンドを 0.2.1 から入れ替えたのが原因だと思います。これについてはもう少し調査しますね。

続いて新規機能です。

まずはメニューの実装です。ビュースタイルでもスタイラスだけでほぼ全ての操作ができるようになりました。

 メニューを実装しました
メニューを実装しました

GUIアプリを作るのに慣れてないのですが、メニューを見るだけである程度操作できるようにしたつもりです。もちろんキーによる操作も今までどおり可能です。

もう1つの大きい新規機能はPOI検索です。

POI検索メニュー
POI検索メニュー

POI>POI検索 メニューでダイアログが開きます。

POI検索
POI検索ダイアログ

検索キーワードを入力して「検索」ボタンを押すと下側に検索結果が表示されます。検索キーワードは名前部分と説明部分の両方から検索されます。

検索結果のリストを選んでダイアログ右上の「OK」を押すと、そのPOIの場所にジャンプします。

 

他の機能としてはプリセットアイコンを追加して、アイコン選択のダイアログも追加しました。

プリセットアイコン & アイコン選択ダイアログ
プリセットアイコン & アイコン選択ダイアログ

プリセットアイコンはここで GPL と CreativeCommons のデュアルライセンスで公開されているものの一部を使用しました。

アイコンが多くなるとコンボボックスでは選択しづらいので選択ダイアログも追加しました。

これで少しは使いやすくなったのではないでしょうか。

 

初めにも書きましたが、今回は結構大きく手を入れているので、色々挙動がおかしくなっている部分もあると思います。気づいた点があればご指摘ください。

次のリリースはいつになるか分かりませんが、以下のような機能を考えてます。

  • SL-A300対応 (起動しない問題対応&ダイアログサイズ調整)
  • 周辺のPOI検索 (最寄りのコンビニとか)
  • POIの登録

まったり開発していきますのでよろしくお願いします。

qgmap-0.2.1 リリース

久しぶりに qgmap をリリースしました。→ダウンロードページ

変更点は以下の通りです。今回はあまり機能追加等はなく、主にバグフィックスとなります。

バグフィックス

  • フリーハンド範囲指定機能で重複した領域が出力される (sugarwareさんのご報告)
  • ガンマ補正時に画面が動的に反映されない (sugarwareさんのご報告)
  • POI機能でアイコンの指定がない状態で登録すると落ちる (botesanさんのご報告)
  • POIの情報表示で全てが表示されない場合がある (botesanさんのご報告)
  • POI削除時の確認ダイアログに名称ではなくズームレベルが表示される (botesanさんのご報告)
  • 2つめ以降に登録されたPOIの表示をOFFにできない (cycloneさんのご報告)

新規機能

  • 2GB以上のisoイメージがマウント可能に (bxk07344さんのご報告)
  • POI追加時にプログレスバーを表示
  • POIにプリセットアイコンを追加

今回の修正は多くの方のバグ報告やご意見を反映させていただきました。ありがとうございました。

修正が多いので新規機能だけご紹介します。

まず、2GB以上のisoイメージを使用することができるようになりました。この問題は zaurus に元々入っている mount コマンドが 2GB 以上のイメージを扱えなかったのが原因でした。
そのため、独自にビルドした mount コマンドを同梱し、qgmap が mount する時は、同梱した mount コマンドを使うようにしてあります。
これにより、大きな iso イメージも意識することなく普通に使えるようになりました。

次に、POI を追加する時にプログレス表示をするようにしました。

POI追加のプログレス表示
POI追加時のプログレス表示

今までは、大きな CSV ファイルを登録しようとすると、登録が終わるまで操作を受け付けず、CSVファイルによっては1分以上も固まったような状態になっていました。
登録処理が早くなったわけではないですが、状況がわかるので不安にならずに済むようになったと思います。

最後の新規機能は、POIのアイコンにプリセットアイコンを追加しました。

プリセットアイコンを追加
プリセットアイコンを追加

今のところ、赤丸の1つだけですが、他にも著作権フリーもしくは作者に許可がいただけたアイコンを追加していければいいなと思っています。

1つだけでもアイコンを登録しておけば、落ちる問題が回避できるからという安易な考えがあったのは内緒ですあっかんべー

 

とりあえず大体のバグは修正できたので、これから新規機能を追加していく予定です。
まだ決めてないですが、POI検索か住所検索あたりを実装しようかなと思ってます。