qgmap 0.1.1 リリース

ちょっと間が開きましたが、 qgmap の 0.1.1 をリリースします。 →ダウンロードページ

0.1.1 の新機能は以下のとおりです。

  •  フリーハンド地図取得範囲指定機能

これはコメント y 様から頂いたご要望で、GM_Lite で地図をダウンロードする際の取得コードを、qgmap 上で手書きで指定できるものです。

ちょっと分かりづらいので、画面で説明します。

まず、地図を取得したい範囲を画面に収まるように、移動&ズームします。
そして、「D」キーを押します。すると、以下の画面のようになります。

フリーハンド範囲指定モード
フリーハンド範囲指定モード

このモードに入ると、画面のスクロールやズームはできなくなります。
モードを抜けるにはもう一度「D」キーを押してください。

スタイラスで画面をなぞると、赤い線で範囲を指定することができます。
スタイラスを離すと、線で囲った領域が塗りつぶされます。

範囲の指定
範囲指定の様子

この様にして、取得したい領域を赤で塗りつぶした状態にしていきます。「BS」キーで無制限にアンドゥできます。

取得したい範囲を塗りつぶし終わったら、「OK」を押してください。
以下のダイアログが表示されます。

取得ズームレベル指定
保存範囲・形式指定ダイアログ

このダイアログで、取得するズームレベルの範囲を指定します。0が最詳細、19が最広域となります。
現在表示しているズームレベルも表示していますので、参考にしてください。

出力フォーマットは、シェルスクリプト形式 (down_imgs 用) と、per形式 (down_imgs.pl 用) が選べます。

指定が終わったら、OKキーを押してください。
指定した範囲の地図取得コードがクリップボードに保存されます。

メモ帳や、ZEditorなどのエディタにペーストして、お好きなファイル名で保存してください。

ZEditor にペーストした様子
ZEditor にペーストした様子

このコードを down_imgs や down_imgs.pl に貼り付けて実行することで、手書きで指定した範囲の地図を取得することができます。

 

余談になりますが、私にとってダイアログ等のGUIが鬼門のようで、この程度のダイアログなのにかなり時間がかかってしまいました ^^;
QDialog は QWindow と違って mainWidget (?) を指定できないせいか、Dialogのサイズに合ってくれなくて・・。setGeometory で固定的に配置してしまったのですが、こういうものなんでしょうか?
リサイズ時は自前で再配置しないといけないってこと?

あと、うまくダイアログが作れなくて、手抜きで Qt Designer でダイアログを作成して .ui ファイルを作成したのにその通りに表示されなくてゲンナリ・・・。
結局今回の開発にかかった時間の半分以上はダイアログまわりでした。
GUI は難しいですねぇ。

関連した記事:


11 comments

  1. 無線LANの記事にばかり目がいって、こちらを見落とす所でした。

    フリーハンド地図取得範囲指定機能の追加、おめでとうございます!
    難易度から言ってもうちょっと後になるかと思っていたのですが、相変わらず仕事が速いです。

    あとQDialog内の配置についてですが…。
    えーと、なんというかこう、力がみなぎってますね。

    とりあえず、多分、普通はこうやります。
    http://tera-cc.ddo.jp/websvn/pub/filedetails.php?repname=qpdf3&path=%2Ftrunk%2Fqpdf.cpp
    のQpdf::findDialogの辺りをご覧下さい。

    僭越ながら、何かと困ったときは他人のコードを参考にするととても勉強になることが多いですよ。
    例えば、今回のQDialogのコードの場合は
    1. まず何かうまく動いているソフトを探し
    2. そのダイアログに特徴的な文字列を見つけ
    3. その文字列をソースからgrepする
    だけです。
    偉そうになってしまいましたが、簡単ですのでぜひともお試し下さい。

    ではでは。

    • QVLayoutBox を使って配置すると、親widgetのサイズに追従してくれるんですね・・・。
      QVBox で配置したんですが、全く追従してくれなくて (T-T)
      QVLayoutBox はいちいち addWidget しないといけないのが面倒そうだったので、new するときに親を指定するだけでいい QVBox を使ってしまったのが敗因ですね。

      あと、ちょっとしたダイアログならわざわざクラスにしなくてもいいんですね。
      うーん。やっぱり自分より詳しい方のコードは勉強になります!
      先人のコードを読む姿勢は忘れていないつもりでしたが、知らず知らずのうちに面倒くさがりの性格が顔を出してコードを遠ざけていたようです (^^;
      いつもいつも勉強になります。ありがとうございます。

      • プロの方でしたか!
        なんだか生意気言ってしまい大変申し訳ないです!

        私も特に詳しい訳ではないのですが…。
        QVBoxでもちゃんとレイアウトされる気が。
        Qpdf::showInfoではQVBoxを使ってますが、特に問題無いようですよ。
        ところで何故私はQVBoxとQVLayoutBoxを使い分けたのだろうか…忘れた。

        • 仕事でやるのは非常に狭い範囲だけなので、その他の分野は全くの素人ですので全然大したこと無いです (^^;
          ユーザーアプリの特に GUI 関係はほとんどやったこと無いので、いろいろアドバイス頂けると非常に勉強になります!

          showInfo 見てみました。
          QDialog の直接の子の QScrollView に親 widget のサイズに追従するような処理が実装されているんでしょうかね?
          試しに findInfo() の QVLayoutBox を QVBox に置き換えてみたら、私が苦労したときのように追従しないダイアログになりました。
          PC 上の Qt3 で確認しただけですけど。

          widget によって、親のサイズに合わせる処理の有無があるのでしょうかね??
          それとも何かし忘れてるとか。。(←こっちの可能性が高そうですが ^^;)

          • ちょっと調べてみて思い出したんですけど、QVBoxは使い易いけど乗せるのは固定サイズのウィジェットに限られて、QVLayoutBoxは少し手間ですが可変サイズのウィジェットも乗せられた気がします。
            確かそうだった気が…。

          • なるほど!そういうことだったんですね。
            面倒くさがらずに QVLayoutBox を使っておけばいいということですね。
            わざわざ調べて頂いてしまったようで、ありがとうございました ^^;
            次のリリースで変更してみますね!

  2. bucchiさん

    はじめまして、qgmapとても便利に使わせていただいています。
    今回のバージョンのおかげで、今まで容量を食っていた地図データがかなり圧縮されそうです。

    まだスクリプトでのダウンロードは行っていませんが、qgmapで作られたスクリプトを使って再度ダウンロードをやり直そうかと考えています。

    GPS好きとしては、今後のGPSへの対応に期待しています。
    便利なソフトをありがとうございます。

    • bxk07344さん

      はじめまして!qgmap をお使い頂きありがとうございます。
      bxk07344 さんの「のぼぶろぐ」は結構早い段階から qgmap を紹介して頂いていたので、たまにお邪魔していました (^^)

      今回もブログでご紹介頂きありがとうございます。
      「のぼぶろぐ」の方にもコメントさせていただきましたが、メモリ不足になる問題があるようなので、次回リリースでは改善したいと思います。

      あと GPS ですね。
      GPS は現在位置表示としての使い方と、ログビューワとしての使い方があると思いますが、現在位置表示であれば比較的早めに実装できます。
      私が持ってる安価な uPod はロガーではなくレシーバなので、Zaurus 側でログを保存する機能も実装しないといけないこともあり、GPS ログ表示はやや時間がかかってしまうと思います。

      いずれ実装しますので、長い目で見守ってください (^^;

  3. はじめまして。
    みじま、と申します。
    すばらしいアプリを開発していただき、大変ありがとうございます。

    さっそく使用させていただいております。 そこで携帯電話のGPS位置情報をこのqgmapで表示させようと動作させていましたら、ちょっと動作におかしいところがあるのでは、と思いましたので投稿させていただきました。
    JUMP機能において、度分秒で指定した場合に指定位置にジャンプできない場合があると思いますので、よろしければご確認ください。

    例 35度07分50秒、137度12分58秒にジャンプする場合です。
    PC上のGoogleマップでは、35 07 50,137 12 58で「地図を検索」すると、地図表示後の値は35.130556,137.216111となります。
    しかしqgmapでは、35.07.50,137.12.58と指定した場合、Googleマップと少しずれた位置を表示します。ここで再度「J」キーを押すと変換後の値?(35.118664,137.203274)が表示されます。この値は、ちょっと変換誤差が多すぎると思いますが、いかがでしょうか?

    • みじま様、はじめまして。
      qgmap をお使い頂きありがとうございます。

      みじま様のコメントを読んで確認してみたところ、
      度分秒から度への変換処理にバグがありました・・。

      度+分/60+秒/3600 で計算すなければいけない所を
      度+分/60+/3600 で計算してました ^^;
      次のリリースで直しますね。
      バグ報告ありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。

*