qgmap 0.1.3 リリース

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

今回の修正点は以下の2つです。

  • ダブルタップでセンタリング (sugarware様ご要望)
  • 地図画像のガンマ補正 (青嵐様ご要望)

他にも tattsu 様からPHS位置取得の精度向上のパッチを頂いていたのですが、外を回ってテストをする時間がなくて、今回は見送らせていただきました。

ダブルタップの方は結構前になってしまいますが、sugarware様から頂いたご要望です。大変お待たせしました。
ちょっと遊び心で本物の GoogleMaps のセンタリングのようにスクロールしながらタップした位置に移動します。
ただ、Qtopiaの仕様(?)か、ダブルタップと認識されにくく、ちょっとコツが要るようです。
ダブルクリックよりは気持ちゆっくり目に、「ポン、ポン」とタップすると認識されやすい気がします。

2つ目は、青嵐様ご要望のガンマ補正機能です。こちらは重くなりそうだなと思いながらも調べていると、GoogleMaps の PNG 画像は 8bit パレットなので、パレットを変更してしまえば画素をいじること無く簡単に色を変えられることに気づき、実装してしまいました。

設定は、左上のアイコンから

 メニュー

「Gamma」を選択します。(ようやく2つ目のアイテムが追加されてメニューらしくなりました^^;)

すると、ガンマ補正のダイアログが表示されます。

ガンマ補正

スライダで補正値を変更すると、後ろの画像でプレビューすることができます。
「OK」を押せば設定が適用されます。もちろん次回起動時も反映されます。

個人的には、ガンマ補正値が 0.5 前後くらいが見やすいかなと思います。
屋外、屋内など、見る状況により変更するといいかもしれません。

改めて見てみると 0.1.2 をリリースしてからもう3週間も間が開いていたんですね・・・。
主にGW-CF54Gドライバの方を作業していたので間が開いてしまっていたのですが、少なくても1ヶ月に1回は更新したいですね。
まだまだ足りない機能がいっぱいあるので。

次はいよいよ GPS に手を出す予定です。いまのところは (^^;

関連した記事:


10 comments

  1. さっそく要望を叶えて頂きありがとうございます。
    自分の環境では前処理はちょっと時間かかり過ぎなので助かりました。
    それで厚かましいですが、もう一つ要望を
    csv形式の位置情報とコメントを表示出来ないですか?
    GarminのカスタムPOIデータ互換なら情報が多くて便利なのですが(ガソリンスタンドとか、その他いろいろ作られてる)
    データが多いと重くなりそうですが、検討ください
    あ動作報告c860です

    • 初めてカスタムPOIデータという物を知ったのですが、ハンディGPS(というのかな?)ではこういうデータを表示できるんですね。これは便利そう。
      確かにカスタムPOIデータと互換にすれば、多くのGARMIN用のデータ資産が使えて良さそうですね。

      検討してみますが、大がかりな機能になりそうなので、実装はちょっと先になると思います。
      あと、青嵐様が懸念しているとおり、データをうまく扱わないと重くメモリ食いになりかねないので、まじめに検討しないとですね。
      sqlite 等の DBMS と組み合わせると良さそうな雰囲気です。

  2. bucchiさま、ダブルタップ対応ありがとうございます。
    さっそく試してみました。
    最初はダブルタップのタイミングを掴むのに苦労しましたが、なんとなく慣れました。gm_liteと同じような感じで使えてます。

    以前から試していたgm_liteの住所データを利用した住所検索機能ですが、やっと使えるようになりました。
    とは言ってもgm_lite.htmlから住所検索機能を切り出しただけみたいなものなんですけど(^^;
    gm_liteのteraさまに感謝感謝です。

    ところで、ここのコメントにhtmlソースを載せる事は可能(How)でしょうか?

    • sugarware様、お久しぶりです!

      要望いただいてから、だいぶ間が開いてしまってすいませんでした。

      ダブルタップと認識されるにはちょっとコツがいりますよね。
      Qtのダブルクリックイベントではなくて、クリックイベントで独自にダブルクリックを判定する処理を実装したほうがいいかなとも思ったのですが、とりあえず手抜きしてます ^^;

      なんと住所検索機能を実装されたのですか!
      切り出したということは gm_lite.html みたいにブラウザ上で動くものですか?
      ちょっと興味津々です。

      ここのコメントは一部の HTML を認識してしまうので、ソースを載せると中途半端に認識されて修飾されてしまうかもしれませんね・・。
      TABやインデントも無視されてしまうかも・・。

      ま、でもとりあえず貼り付けてみていただけますか?
      ちょっと失敗してひどくなったら、こちらで削除しますので。

      • bucchiさま

        はい、ブラウザで動く方式です。
        gm_lite.htmlに少し追加するだけでも良かなとも思ったのですが、qgmapと同時にgm_liteまで動かすとメモリへの負担が大きそうなので、住所検索機能以外をばっさりと落としてみました。
        実は前のコメントの投稿の際、htmlファイルを貼り付けてプレビューしたところ、何とコメントの中で住所検索機能が動いてしまいました。住所データへのアクセスが出来ないので正常には動作しないのですが。
        それと”コメントの投稿”ボタンを押しても投稿されないようです。
        なので先程は貼り付けはしませんでした。

        今回はbucchiさんに渡すためだけにでも取りあえず貼り付けてみます。
        但し投稿出来る様に”< " を "&lt"、">” を “&gt”に変更していますので、これを戻して下さい。インデント等も無くなっている様ですので読み難いと思います。
        その他の注意点は以下の通りです。
        ・27行目でgm_lite/addr/をフルパスで指定して下さい。
        ・都道府県[OK]市町村[OK]詳細[Go]で座標を表示します。
        ・座標はCtrl-A then Ctrl-Cでクリップボードに取り込めます。
        ・[New]を押すと新規検索を開始します。

        以下がaddr4qgmap.htmlです。

        &lthtml&gt
        &lthead&gt
        &ltmeta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″&gt
        &lttitle&gt経度緯度検索&lt/title&gt
        &ltstyle type=”text/css”&gt

        select {
        font-size: 100%;
        }

        input {
        font-size: 90%;
        }

        #aJumpFormFrame {
        height: 22px;
        border: solid 1px gray;
        padding: 5px;
        background-color: silver;
        z-Index: 1;
        display: block;
        }

        &lt/style&gt
        &ltscript type=”text/javascript”&gt

        addrDir = “/mnt/cf/gm_lite/addr/”; // set your file location
        aIdsOld = [“00″,”0000″,”0000”];
        document.onkeydown = cbKeyDown;

        /*
        * キーが押された場合のコールバック
        */
        function cbKeyDown(evt)
        {
        keycode = evt.which;
        if (keycode == 78) // “N” for New
        showAJumpForm();
        return(false);
        }

        /*
        * 指定場所の緯度、経度を表示
        */
        function jumpLocation(ll)
        {

        ll = ll.split(“,”);
        llx = Number(ll[1]);
        while (llx &lt -180) llx += 360.0;
        while (llx &gt 180) llx -= 360.0;
        lly = Number(ll[0]);
        while (lly &lt -90) lly += 180.0;
        while (lly &gt 90) lly -= 180.0;

        ll = String(lly).substr(0,10) + “,” + String(llx).substr(0,10);
        document.forms[“aJumpForm”].elements[2].value = ll;
        document.forms[“aJumpForm”].elements[2].focus(1);
        clipboardData.setData(“Text”, ll);
        }

        /*
        * ジャンプフォーム(住所)の表示/非表示
        */
        function showAJumpForm()
        {
        aIds = [];
        loadScript(addrDir+”addr1.js”);
        document.forms[“aJumpForm”].elements[1].value = “OK”;
        document.getElementById(“aJumpFormFrame”).style.display = “block”;
        document.forms[“aJumpForm”].elements[0].focus();
        }

        /*
        * 外部のJavaScriptのロード
        */
        function loadScript(scriptName)
        {
        scriptObj = document.createElement(“script”);
        scriptObj.type = “text/javascript”;
        scriptObj.src = scriptName;
        document.getElementsByTagName(“head”)[0].appendChild(scriptObj);
        }

        /*
        * ジャンプフォーム(住所)に要素を追加
        */
        function appendAOption(aId,aStr)
        {
        optionObj = document.createElement(“option”);
        optionObj.value = aId;
        optionObj.innerHTML = aStr;
        document.forms[“aJumpForm”].elements[0].appendChild(optionObj);
        if ((aIds.length==0 && aId==aIdsOld[0]) ||
        (aIds.length==1 && aId==aIdsOld[1] && aIds[0]==aIdsOld[0]) ||
        (aIds.length==2 && aId==aIdsOld[2] && aIds[0]==aIdsOld[0] && aIds[1]==aIdsOld[1]))
        optionObj.selected = “selected”;
        }

        /*
        * ジャンプフォーム(住所)に指定された緯度、経度を表示
        */
        function aJumpLocation()
        {
        aIds.push(document.forms[“aJumpForm”].elements[0].value);
        if (aIds.length == 3) {
        aIdsOld = aIds;
        loadScript(addrDir+aIds[0]+”/”+aIds[1]+”/ajump.js”);
        document.forms[“aJumpForm”].elements[1].value = “New”;
        } else {
        while (document.forms[“aJumpForm”].elements[0].childNodes.length &gt 0)
        document.forms[“aJumpForm”].elements[0].removeChild(document.forms[“aJumpForm”].elements[0].lastChild);
        if (aIds.length == 1) {
        loadScript(addrDir+aIds[0]+”/addr2.js”);
        } else if (aIds.length == 2) {
        loadScript(addrDir+aIds[0]+”/”+aIds[1]+”/addr3.js”);
        document.forms[“aJumpForm”].elements[1].value = “Go”;
        } else {
        showAJumpForm();
        }
        }
        }

        &lt/script&gt
        &lt/head&gt
        &ltbody&gt
        &ltdiv id=”aJumpFormFrame”&gt
        &ltform id=”aJumpForm” action=”javascript:aJumpLocation();”&gt
        &ltfont size = +4&gt
        住所: &ltselect /&gt &ltinput type=”submit”/&gt &ltbr&gt
        座標: &ltinput type=”text” size=21 value=”ctrl-AC”/&gt
        &lt/font&gt
        &lt/form&gt
        &lt/div&gt
        &ltscript type=”text/javascript”&gt
        showAJumpForm();
        &lt/script&gt
        &lt/body&gt
        &lt/html&gt

        • やはりタグが解釈されてしまいましたか。
          JavaScript が書き込めちゃうのはセキュリティ的にちょっとまずいですね (^^;

          なるほど、住所を選択するとブラウザ上に緯度経度が表示されて、コピペでジャンプできるということですね。
          今旅行中で手元に確認できる環境がないので、帰ったら試してみますね。
          ありがとうございました!

          • bucchiさま、
            旅行中のコメントありがとうございます。折角の連休ですので旅行を堪能して帰って来てください。

            teraさまのgm_lite.htmlはOSやブラウザを判別して様々な環境に対応出来る様になっておりましたが、今回のaddr4qgmap.htmlは細かな動作環境の配慮も無く、Zaurus用Operaのみを対象にしています。というか、Zaurus用Netfrontでさえ正常動作しませんでした。
            PC用ブラウザでもChromeやFirefoxはダメみたいです。
            Webブログラミングもなかなか大変ですね。

          • 昨晩旅行から帰ってきまして、早速試してみました。
            これはいいですね!
            場所を検索して緯度経度をコピペすれば手軽にジャンプできますね。

            ただ、やはり JavaScript はちょっと重いようで、大量の地名をコンボボックスに追加するケースではだいぶ待たされちゃいますね。
            早く qgmap に実装しないとですね。

            実装するなら sqlite 等の DB を使うのが一番素直ですね。
            DB を実装してしまえばカスタムPOIデータの表示等、色々と応用できるので、なるべく早い段階で実装するようにします。
            もうしばらくお待ちください。

          • 確かにコンボボックスへのリスト設定が多い場合には遅いですね。私の場合、北海道の旭川など項目が非常に多い場合、リスト表示さえもされなくなってしまいます。ボタンは押せるのでストールはしてないようですが…
            試しに旭川の項目数を減らしてみたところ、337まではOKで、338以上ではダメでした。
            メモリ不足か、Opera7.5のJavaScriptの制限なんでしょうかね。
            この機会にJavaScriptをもっと勉強してみます。

            bucchiさまのDBの組み込み化、様々な機能が追加できそうで楽しみです。

          • 旭川は 300 以上も地名があるんですね。。

            きっとこれは Opera の制限なんでしょうね。
            普通コンボボックスへ 300 以上も追加しないですからね (^^;
            Qt の制限だと、qgmap でも同じ問題に突き当たるので、Qt の制限じゃないことを祈るばかりです。

            DB化は GPS 対応の後に実装しようと思います。まったりとお待ちください (^^)

コメントを残す

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

*