2010年9月29日水曜日

iPhoneと山岳地図(Bit Map) (2)

少しだけ地図の作り方のまとめ。

カシミール3Dを立ち上げて地図を開いてiPhoneに転送したい地図の領域を選びます。
ここで、地図の縮尺は領域を指定しやすいもの(多分広範囲を転送したい場合は
ひとつ大きな縮尺となるかもしれません)で問題ありません。




次にマウスで領域を作ります





次にマウスカッターを起動します。





実際に地図を切り出します。
私の場合はPNGでGarmapCEにて切りだしています。
下記の例ではD:\testに出力しています。





D:\testのディレクトリは下記のようになります。






私の場合は変換スクリプト(make_maps.pl) をここにコピーします。







そしてmake_maps.plをダブルクリックして実行させます。





上図のようにmap_filesというディレクトリに転送用の地図ファイルが出来ます。
ここディレクトリ名は転送後の地図名となりますので地図名にしたい名前に変更します。
下記の例では"test_mapとしています。







最後にディレクトリごと圧縮ツールにてzipファイルにします。



あとはiPhone側で地図転送モードににしてこのzipファイルをPCから転送します。





転送がうまくいくと下図のようにtest_mapがリストに現れます。




転送したあとの地図はタップすることですぐに見られます。



こんな感じでカシミール3Dから山岳地図がiPhoneに転送できます。


話は変わってカシミール3DのwaypointもKMLに変換することでBit Mapに転送できます。
下図は山のデータを転送しました。





waypointは検索ができるので山名を探すことができます。



もともと、5段階にズームができるので上図はズームしています。

なお、使用していますperl scriptですがこんな感じです。

#!/usr/local/bin/perl -w

use File::Copy;

$file_name = "mapinfo.dat";

open(INPUT,$file_name);
$line_num=1;
while($buffer=<INPUT>){
chomp($buffer);
if ($line_num==4) {
$width_num=$buffer;
} elsif ($line_num==5) {
$height_num=$buffer;
} elsif ($line_num==6) {
$top_lon=$buffer;
} elsif ($line_num==7) {
$left_lat=$buffer;
} elsif ($line_num==8) {
$bottom_lon=$buffer;
} elsif ($line_num==9) {
$right_lat=$buffer;
}
$line_num++;
}
close(INPUT);

for ($k=0; $k < $width_num ; $k++ ) {
$diff_lat = ($right_lat - $left_lat)/$width_num;
$left_lat_elem[$k]= $left_lat + $diff_lat * $k;
}
$left_lat_elem[$width_num] = $right_lat;

for ($k=0; $k < $height_num ; $k++ ) {
$diff_lon = ($top_lon - $bottom_lon)/$height_num;
$top_lon_elem[$k]= $top_lon - $diff_lon * $k;
}
$top_lon_elem[$height_num] = $bottom_lon; 

@org_file_names = glob("*.png");

$file_count = @org_file_names;

if ($file_count != $width_num * $height_num) {
print "Maps file number is incorrect\n";
print "Please check maps file name\n";
exit;
}
$file_count = 0;

$map_dir = "./map_files";
if(!-d $map_dir) {
mkdir ($map_dir);
}
chdir $map_dir;

for ($k=0; $k < $height_num; $k++) {
for ($i=0; $i < $width_num; $i++) {
$file_name = sprintf ("latlon WSG84 %3.5f %2.5f %3.5f %2.5f.png",$left_lat_elem[$i],$top_lon_elem[$k+1],$left_lat_elem[$i+1],$top_lon_elem[$k]);
$org_file_name = "$file_count" . ".png ";
print "$file_count" . ".png " . $file_name . "\n";
copy("../$org_file_name",".");
rename("$org_file_name","$file_name");
$file_count++;
}
}

chdir "..";



Active Perl (http://www.forest.impress.co.jp/lib/stdy/program/progdevenv/activeperl.html)を導入していれば上記スクリプトをmake_maps.plとして保存することでmap fileの変換ができるかと思います。(万が一上記スクリプトを使用される場合にはスクリプトはファイル名のリネームが伴いますのでオリジナルのmapファイルのバックアップをお願いします。当方では問題は発生していませんが)

2010年9月28日火曜日

iPhoneと山岳地図(Bit Map)

ちょっと調子に乗ってかなり広い範囲の地図をBit Mapに入れてみました。


地図の縮尺の拡大縮小中にも地図の切り替えは自動で行われますので
これだけ入れるとかなり地図の切り替えに引っ掛かりがありました。
Japanの地図で121tilesですが、



kita_alps_6kでは2304tilesになってしまっています。



現在、カシミールのマップカッターからBit Mapの地図への変換はperlを使用していますが、
今、gui (Java)に変換中しています。もう少し、変換を楽にしようとしています。

2010年9月26日日曜日

登山とiPhone (2)

Bit Mapによる山岳地図ですが約500に分けた地図も
今のところiPhoneへ転送時につなげてくれているようですが、
座標も含めてうまくつなげているか確認してみました。
Google Earthで利用可能なKMLファイルを転送できるので
転送して読み込ませてみました。






若干ずれているようにも見えますが、許容範囲内と思いました。

2010年9月25日土曜日

登山とiPhone

最近、Windows MobileからiPhoneに乗り換えたのですが、iPhoneだと山岳(地形)地図を扱うアプリが少ないようです。
そもそもオフラインで使用できるアプリはほとんどカーナビ関連のアプリの気がしています。
それでもなんとか見つけたのがBit Map(http://nixanz.com/)というアプリ(有料ですが)。
画像ファイルと緯度経度情報があればGPSで現在地やトラッキングが可能になるというもの。
画像ファイルの名前にて緯度経度情報を判断できるので比較的簡単にカシミール3Dから
マップカッタープラグインにて切り出した地図が活用できました。(自分はperlスクリプトを使用)
開発元ではOziExplorerを推奨していましたが、それを使用したことがないのでカシミール3Dから地図を作成しました。
分割した画像ファイルもうまく扱ってくれていますし、オフラインで使用できます。

スナップショットはこんな感じです。

PCから地図ファイルをアップロード中。
    - WiFiで行っていますが、認識率が良くないようでつながらないこともありました。
          iPhoneからSafariでWiFiを使用直後だとつながるように感じましたが、気のせいかも。
          あと、ファイルパスに日本語があるとアップロードに失敗します。



地図のデータが大きいと結構時間がかかりました。(100MBで15分ぐらい、500MBだと30分は超えました。)




転送後(転送自体にはそれ程時間はかかりません)にアプリでデータの再構築が行われているようで、
もともと分割していおいた地図データは転送後に再分割されているようです。



実際に、GPSでのTrackingはまだですが、地図はうまく転送できているようです。
都市部の地図ではうまく現在地を示していました。
GPSアプリとしては機能面(速度、高度の記録等)は足りない(自分はGPSのロガーは専用機を使用していますので
ロガーとしての昨日はこれに求めていません)とは思いますが、カシミール3Dの地図が
活用できるのでしばらく山岳での現在地確認にはこのアプリを使用していくつもりです。

手持ちのWindows Mobileは電子コンパス機能がなく方位が測定できませんが、
iPhoneはできるのでやっとこれで一台で賄えそうです。(まだ実績なしですが)

ちなみに山岳データを表示している例です。




一応都市部を試してみました。