GM_Lite の地図レシピ

qgmapの開発に平行して、GM_Liteで地図をダウンロードする時のレシピを作れないかなと考え中。

ネットを徘徊していると、自分で範囲を指定して地図ダウンロードしてるひとを見かけないので、東京都の地図はこれをコピペすればOKみたいに、必要な地図を選んで down_img.pl にコピペして実行できるようにすると便利かなと。

で、とりあえず東京都を各ズームレベル毎に切り出してみたんだけど、これが結構手間叫ぶ。広域の間はいいけど、詳細地図になると県境を追いかけるのが面倒。これを全県分手作業でやると思うと気が遠くなる・・・。

大雑把に切り出してしまえばいいんだけど、そうすると詳細地図になるにしたがって余分な領域もダウンロードしてしまうわけで、貧乏性な私は少しでも地図データを小さくしたいと思ってしまう。

なんとか自動で切り出せないかなぁ。日本地図の大陸部分のマスクデータがあれば(さらに欲を言えば各県のマスクデータがあれば)その部分の地図のみダウンロードすればいいんだけど、そんなマニアックなものがそうそう都合良く転がっているワケはない。

で、どうにかして、日本地図の輪郭のみの白紙地図みたいなものはないかと色々探してみると、 DCLライブラリに日本の海岸線と県境のデータが入っているらしいのと、カビパン男と私 – 日本の白地図にSVG形式で白地図データがあるのを発見。

DCLライブラリの方は緯度・経度のデータになっているようなので、自分でゴニョゴニョするには都合が良さそうだ。

日本の白地図の方は国土地理院のデータ(?)を元にSVGで書かれていて、緯度経度からSVG上への変換式も書かれている。しかも、各県毎にオブジェクトが分かれているらしい。これは使いやすそうだ。でもSVGって使ったことないんだよなぁ。
あと、元はフリーハンドで書き写したものらしく、ズレや歪みが無いかが心配かな。

どっちのデータもGoogleMapの地図と重ね合わせてズレがないか確認しないといけないな。

こんなことしてる間に1県ずつ手作業で切り出した方が早かったりして・・・あっかんべー

qgmap alpha5 リリース

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

今回の変更は以下の2つです。この修正により、常用が現実的になったと思います。

  • 位置の保存・復元
  • 緯度経度指定ジャンプ機能

まず、位置の保存・復元機能ですが、「Shift」+「0」~「9」キーで現在表示している緯度経度とズームレベルを保存できるようになりました。保存した位置は「0」〜「9」キーでジャンプすることができます。

また、「0」に保存した位置は特別で、アプリの初期表示位置になります。今までは起動すると神奈川県近辺が表示されていたため、その他の地域の方々にはいちいちスクロールする必要があり、常用は厳しかったと思います。この機能で自宅近辺を「0」に登録することでかなり使いやすくなったと思います。

もう一つはtera様からご要望があった、緯度・経度指定ジャンプ機能です。「J」キーを押すことでダイアログが開き、緯度・経度を入力できます。


緯度経度入力ダイアログ

緯度,経度の順に入力してください。今はまだパーサが貧弱なので、","の前後等にスペースが入っていると解釈できませんあっかんべー。スペースは一切入れずに連続して入力してください。

緯度経度の表記は、度.分.秒表記(12.34.56)と、度表記(12.3456)のどちらも入力可能です。ただ、"."の数でどちらの形式かを判断していますので、度.分.秒表記の場合は、秒まで入力してください。

  • 12.34 → 12.34 度と判断
  • 12.34.0 → 12度34分と判断

以上の修正で、一応地図として最低限使えるモノになったかなと思います。

あともうちょっと修正したらソースを整理してalphaを取ろうかなと思います。

qgmap ダウンロードページ作成

qgmapのダウンロードページを作りました。Topから Download でも行けます。

ちまちま作っていっているため、使い方や機能などがいろんなページに散乱してしまっている状態でしたので、1つのページにまとめました。あと、最新版がどこか探すのもたい編かなと思いまして。

使い方も今のところ初期リリース時のコピペですが、徐々に整備していこうと思います。

 

qgmap alpha4 リリース

お知らせ:新しいバージョンが出ています。最新バージョンはダウンロードページ

qgmap の alpha4 をリリースします。

変更点は、ここのところの開発メモに書いていた縮尺表示です。今回はあまり革新的な変更ではありません。

画面の左下に縮尺を表示するようになりました。


↑縮尺表示が付きました

苦労して導いた式を使って計算しているので、表示している緯度に合わせて縮尺が変化します。

ここのところ、ちょっとずつqgmapのまわりに動きが出てきて、Zetaの作者のHB1様や、GM_Liteの作者のtera様などからもコメントをいただき、さらに、何気なく qgmapでググってみたところ、 2ch でも好意的に取り上げられていて、ちょっと嬉し恥ずかしといった半面、身が引き締まる思いです。

ゆっくりですが、できるだけ使える、使いやすいものを目指して開発していきますので、長い目で見守ってください。。

使いやすいと言う意味では、そろそろ ダウンロードページとか、GM_Liteでの地図のダウンロードの仕方とかを解説したページを作った方がいいですね。 2ch でも使い方が分からず困っていた方もいらっしゃいましたので。

地道にいろいろ整備していきます。

qgmap 開発メモ – 縮尺表示その2

知恵熱にやられながらも、ついに任意の緯度の緯線1周の長さを求めることができた!

高校生の自分ならもっと早く解けたんだろうな・・・。時間は残酷だぜクールフッ

結果から言うと、緯度θの半径は、こうなった。

x = a2cosθ/√(a2+(b2-a2)sin2θ)

aは地球の長半径(中心と赤道の距離)、bは短半径(中心と北極・南極点の距離)を表している。

半径がわかれば2πr で円周の長さ=緯線の長さがわかるので、後は地球1周分の地図のドット数で割れば、1ドット当たりの距離が求まる!これで縮尺表示の目処が立った。笑う

せっかく錆付いた頭をフル回転させて導いたので、記念に過程も晒しておこう。以下は自己満の世界なので読まなくていいですよ。


楕円の式は以下のようになる。

x2/a2+y2/b2 = 1 ・・・①

ここでも、aは地球の長半径、bは短半径を表す。

まずこの楕円の法線ベクトルを求める。法線ベクトルvは以下の式で計算できる。

v=(∂f/∂x, ∂f/∂y)

楕円の方程式より法線ベクトルを求める。

f(x,y) = x2/a2+y2/b2-1
v=(∂f/∂x, ∂f/∂y)=(2x/a2, 2y/b2

方向が重要で、長さはどうでもいいので、扱いやすいように、a2b2/2をかける。

v=(xb2, ya2

この法線ベクトルを自身の長さで割って単位ベクトル化すると、

v‘=(xb2/|v|, ya2/|v|)

となる。ただし、

|v| =√(x2b4+y2a4)

である。

この単位法線ベクトルと赤道面がなす角度が緯度θなので、

v‘=(xb2/|v|, ya2/|v|) = (cosθ, sinθ)
∴ cosθ = xb2/|v| , sinθ = ya2/|v|

上の2つの式と、楕円の式①を連立方程式として、x,y を θの式で表す。

式①を変形

x2b2+y2a2 = a2b2
y2a2 = a2b2– x2b2 = b2(a2– x2) ・・・②

sinθの式を両辺2乗する。

|v|2sin2θ = y2a4 = a2(y2a2)

式②を代入

|v|2sin2θ = a2(b2(a2– x2))

x2について整理すると、

x2 = a2-(|v|2sin2θ)/a2b2 ・・・③

ここで |v|2 を求める。

|v| 2= x2b4+y2a4

式②を代入

|v| 2=x2b4+a2(b2(a2-x2))

整理すると

|v| 2=b2(x2(b2-a2)+a4)

これを式③に代入

x2 = a2-(b2(x2(b2-a2)+a4)*sin2θ)/a2b2

x2について整理すると

x2 = a4(1-sin2θ)/(a2+(b2-a2)sin2θ)

1-sin2θ = cos2θなので、

x2= a4cos2θ/(a2+(b2-a2)sin2θ)

平方根を取って

x = a2cosθ/√(a2+(b2-a2)sin2θ)

同様にyも求めて、θを0~πまで回してグラフを書いたところ、楕円の図と一致したので、たぶんあってるのでしょう。

ふぅ。