ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

nav-u (NV-U1 NV-U2 NV-U3)コミュのオービスデータ入手!

  • mixiチェック
  • このエントリーをはてなブックマークに追加
 こんにちは。
 僕は、NV-U2ユーザですが、先日の地図&ファームウエア更新に伴ない、ようやくNV-U2でもマーク数
の上限が、500個から2,000個に増えたのを受け、オービスデータを入手して入れてみることにしました。
 以下、調べた内容と、オービスデータを得るまでです。折角ですので、nav-uユーザの皆様と、共有さ
せてもらおうと思いました。ファームアップ前のNV-U2, U1を除き、NV-U1, U3, U3Vでも、2,000個対応の
機種では、事情は同じと思います。
 他にも情報がありましたら、交換させてください。

 "NV-U2 オービス データ"とかでググると、色々情報が出てきますが、nav-u用xmlファイル入手の方
法は、大体以下の4種類となるようです。

(1) シェアウエアNavuEditをダウンロード購入し、同サイトにある専用データをxmlファイルに変換する
→ttp://homepage3.nifty.com/xxx-xxx/orbis/index.htm (オービス情報)
 シェアウエア代金が、2,100円だそうです。データは無料ですが、NavuEditが無いと、変換が困難ぽ
いです。
 さすがに有料だけあって、データのメンテナンスがされてますし、最近、警告音の進入角の指定に
も対応したようです。

(2) オービス Guide (オービス・ガイド)のパナソニック用pmfファイルをxmlファイルに変換する
→ttp://www11.plala.or.jp/sp1/__index01.html (オービス Guide (オービス・ガイド))
 パナソニック用のデータを無料で公開して下さっており、頻繁ではありませんが、データのメンテナ
ンスもされているようです。
 パナソニック用のpmfファイルは、比較的単純なテキストファイルなので、これを自分で変換するか、
何らかのツールを入手して変換すれば、nav-u用のxmlファイルを入手できます。
 ブログ等の情報からでは、この方法でデータを入手されている方が、最も多いようです。
 (1)のページにも、pmf→xmlの変換プログラムがありましたが、これも有料でした。
 nav-u用で無料のソフトは見つかりませんでしたが、昔のSonyのXYZシリーズ用の変換プログラ
ムが使えるようです。しかし昔のものなので、進入角に対応していないようです。pmfファイル自体は、
進入角の情報を持っていますが、多分反映しません。
→ttp://www.ne.jp/asahi/kdm/homepage/ta/soft_list_convertpointdata.html (たかっち 趣味と自
己満ソフトウェアのページ - ソフトウェア - ConvertPointData - ダウンロード)

(3) nav-u用xmlデータを直接ダウンロードする
→ttp://melanges.duck.nu/2008/08/25_222222.php (SONY nav-u(nv-u2, nv-u1)用オービスデー
タ 080721版 | Melanges)
 直接使えるデータで、一番良さそうなのが上記でしたが、こちらの方も、(2)のデータを自分でxml
に変換して公開しているようです。
 しかし、(2)のページでは、データは再配布禁止となっており、著作権法に違反しての配布となって
いるのが気になりますし、データのアップデートも無さそうです。去年7月のデータなので、進入角にも
未対応です。

(4) Yahooオークションで買う
 Yahooオークションで、1,500円で売っているのを見つけました。データがオリジナルかどうかは不
明です。未確認ですが、(1)か(2)の違法コピーの可能性が高そうに思いました。


・・・ということで、現時点で、誰に後ろ暗いことなく無料でデータを入手するには、(2)のデータを自分
でxmlに変換するのが一番良さそうだ、ということになりました。
 漢字コードが、(2)の元のpmfファイルはShiftJISで、これをxmlではutf-8に変換しないといけませ
んので、コード変換が手軽そうなperlを使用することにして、以下のプログラムを作成しました。

---- キリトリ pmf2xml.pl ----
#! perl
use utf8;
use Encode;

sub print_header() {
print XML_OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print XML_OUT "<!DOCTYPE glorie PUBLIC \"-//GLORIE//GLORIE V1.0//EN\" \"glorie.dtd\">\n";
print XML_OUT "<glorie version=\"1.0\" model=\"Sony corporation:nav-u:v1.00\">\n";
}

sub print_pntitem($$$$$$$$$$$) {
my $date = $_[0];
my $time = $_[1];
my $latitude = $_[2];
my $longitude = $_[3];
my $name = $_[4];
my $rname = $_[5];
my $imaj = $_[6];
my $imin = $_[7];
my $sound = $_[8];
my $radius = $_[9];
my $direction = $_[10];
print XML_OUT "\t<format>\n";
print XML_OUT "\t\t<datum>tokyo</datum>\n";
print XML_OUT "\t\t<unit>degree</unit>\n";
print XML_OUT "\t\t<time>", $date, "T", $time, "+09:00</time>\n";
print XML_OUT "\t</format>\n";
print XML_OUT "\t<gpoi>\n";
print XML_OUT "\t\t<poi>\n";
print XML_OUT "\t\t\t<point>\n";
print XML_OUT "\t\t\t\t<pos>\n";
printf(XML_OUT "\t\t\t\t\t<lat>%.6f</lat>\n", $latitude);
printf(XML_OUT "\t\t\t\t\t<lon>%.6f</lon>\n", $longitude);
print XML_OUT "\t\t\t\t</pos>\n";
print XML_OUT "\t\t\t</point>\n";
print XML_OUT "\t\t\t<name>\n";
print XML_OUT "\t\t\t\t<nb>", $name, "</nb>\n";
print XML_OUT "\t\t\t\t<rt>", $rname, "</rt>\n";
print XML_OUT "\t\t\t</name>\n";
print XML_OUT "\t\t</poi>\n";
print XML_OUT "\t\t<category vendor=\"Sony:nav-u\">1:local</category>\n";
print XML_OUT "\t\t<linkfile>\n";
print XML_OUT "\t\t\t<image href=\"\">\n";
printf(XML_OUT "\t\t\t\t<comment>%d,%d</comment>\n", $imaj, $imin);
print XML_OUT "\t\t\t</image>\n";
printf(XML_OUT "\t\t\t<multimedia format=\"nav-u:sound\" href=\"file://./nav_u_common/%d\" repeat=\"2\">\n", $sound);
print XML_OUT "\t\t\t\t<comment>enable:true</comment>\n";
print XML_OUT "\t\t\t\t<activate-condition>\n";
print XML_OUT "\t\t\t\t\t<activate-radius>\n";
printf(XML_OUT "\t\t\t\t\t\t<outmost>%d</outmost>\n", $radius);
print XML_OUT "\t\t\t\t\t\t<inmost>0</inmost>\n";
print XML_OUT "\t\t\t\t\t</activate-radius>\n";
if ($direction >= 0) {
print XML_OUT "\t\t\t\t\t<activate-direction>\n";
printf(XML_OUT "\t\t\t\t\t\t<dcenter>%d</dcenter>\n", $direction);
print XML_OUT "\t\t\t\t\t\t<deviation>30</deviation>\n";
print XML_OUT "\t\t\t\t\t</activate-direction>\n";
}
print XML_OUT "\t\t\t\t</activate-condition>\n";
print XML_OUT "\t\t\t</multimedia>\n";
print XML_OUT "\t\t</linkfile>\n";
print XML_OUT "\t</gpoi>\n";
}

sub print_groups(@) {
my $i = 0;
print XML_OUT "<!-- start group -->\n";
print XML_OUT "<!-- COMMENT VER1 -->\n";
foreach (@_) {
printf(XML_OUT "<!-- GP%d:%s-->\n", $i, $_);
++$i;
}
print XML_OUT "<!-- end group -->\n";
}

sub print_tail() {
print XML_OUT "</glorie>\n";
print XML_OUT "\n";
}

foreach $pmf (@ARGV) {
my $ifname = $pmf;
$_ = $pmf;
s/.pmf$/.xml/;
my $ofname = $_;

print $ifname, "\n";
print $ofname, "\n";
open PMF_IN, '<:encoding(shiftjis)', $ifname;
open XML_OUT, '>:encoding(utf8)', $ofname;

&print_header();
while (my $line = <PMF_IN>) {
if (substr($line, 0, 1) ne "#") {
next;
}
my @pntdata = split(/\t/, $line);
# print XML_OUT $line;
# my $i = 0;
# foreach (@pntdata) {
# printf(XML_OUT "%d %s\n", $i++, $_);
# }
my $date = substr($pntdata[21], 1, 4) . "-" .
substr($pntdata[21], 5, 2) . "-" .
substr($pntdata[21], 7, 2);
my $time = substr($pntdata[21], 9, 2) . ":" .
substr($pntdata[21], 11, 2) . ":" .
substr($pntdata[21], 13, 2);
my $latitude = substr($pntdata[4], 1, 3) +
substr($pntdata[4], 4, 2) / 60 +
substr($pntdata[4], 6, 3) / 36000;
my $longitude = substr($pntdata[3], 1, 3) +
substr($pntdata[3], 4, 2) / 60 +
substr($pntdata[3], 6, 3) / 36000;
my $name = "(" . substr($pntdata[12], 1) . ")" .
substr($pntdata[17], 1) . "-" .
substr($pntdata[18], 1);
my $mark = 23;
my $sound = 0;
my $radius = substr($pntdata[15], 1);
if ($pntdata[9] eq "#01B5") {
$mark = 24;
$sound = 2;
$radius = 1000;
} elsif ($pntdata[9] eq "#01B7") {
$mark = 24;
$sound = 1;
$radius = 500;
} elsif ($pntdata[9] eq "#00E8") {
$mark = 25;
$sound = 3;
$radius = 700;
}
my $direction = -1;
if (substr($pntdata[13], 1, 2) == 1) {
$direction = substr($pntdata[14], 1) * 45;
}
&print_pntitem($date, $time, $latitude, $longitude, $name, "",
0, $mark, $sound, $radius, $direction);
}
&print_groups(("nothing", "local"));
&print_tail();
close XML_OUT;
close PMF_IN;
}

#00 - "09", "19", "21"
#01 - "00"
#02 - "00"
#03 - DDDMMSSs (longitude)
#04 - DDDMMSSs (latitude)
#05 - "0800"
#06 - "0800"
#07 - "0800"
#08 - "0800"
#09 - "01B5", "01B7", "00E8"
#10 - "01"
#11 - "03"
#12 - <name>
#13 - "01"
#14 - <direction>
#15 - <radius>
#16 - <sound name>
#17 - <description1>
#18 - <description2>
#19 - ""
#20 - ""
#21 - YYYYMMDDhhmmss
#22 - "01"
#23 - ""
#24 - "00"
---- オワリ pmf2xml.pl ----

 perlは初心者なもので、ショボいプログラムをお見せするのが恥ずかしいですが、まあ使えると思い
ましたので、公開させていただきます。
 htmlで先頭の空白文字が見えなくなってしまうようで、インデントが消えてしまい、見た目が必要以
上に悪くなっていますが、コピペしてして使う分には、動作に影響無さそうなので、このまま書き込み
ます。

 僕は、perlをwindows上で、こちらのサイトから、strawberry-perl-5.8.8.3.exeをダウンロードして使用
させて頂きましたが、多分perl 5.8.xなら動くと思いますし、他のOSでも同じに使えると思います。

→ttp://strawberryperl.com/releases.html (Strawberry Perl Changes)

 PCで、perlが使える環境に無い方は、まず上記をダウンロードしてインストールしてください。
 Windowsの場合、コマンドプロンプトから"perl -v"を実行して、v5.8.xだったら、多分大丈夫です。

 上記のperlスクリプトを、notepadなど適当なエディタにコピペして、pmf2xml.plという名前で適当な
フォルダに保存します。
 同じフォルダに、pmfファイル(xxx.pmf、xxx部分は適当に付ける)を格納し、コマンドプロンプトから
そのフォルダに移動("cd <フォルダ名>")して、"perl pmf2xml.pl xxx.pmf"を実行すると、同じフォル
ダにxxx.xmlファイルを出力します。
 ちなみに、コマンドプロンプトは、残念ながらワイルドカードを展開してくれませんので、ファイル名
を省略し、"perl pmf2xml.pl *.pmf"といった指定では、うまくいきません。cygwinなどで、unix系の
シェルコマンドを使っていれば、ワイルドカード指定で、複数ファイルを一気に指定して変換できます。

 先にも書きましたが、漢字コードが、pmfファイルはShiftJISで、xmlはutf-8ですので、普通の文字
は大丈夫ですが、丸付き数字などWindowsの一部特殊記号(多分半角カナも)は、うまく変換できず、
ちょっと文字化けします。
 必要なら変換前に、テキストエディタでpmfファイルの丸付き数字などを適当に書き換えておくと
吉だと思います。


 一応、ここまでの手順で、やる気になれば、大抵の方は、nav-u用のxmlファイルの入手に成功
するんじゃないかと思います。xmlファイルをnav-uに登録するのは、Sonyサイトのnav-uツールを
使えば、普通にできます。
 直接xmlファイルを公開できれば、一番簡単なのですが、(2)のデータが再配布禁止となっていま
すので、直接の配布は、遠慮させていただきます。
 他に、無料で再配布可能で、メンテナンスされている良いデータがあれば、xmlの直接配布もで
きるかと思いますが、そんなのがあれば、僕が配布するまでも無く、どこかのページで公開される
ことでしょう・・・(もしあったら、教えてください。上記の努力のほとんどが無駄になってしまいますが、
本望です(笑))

 プログラムの内容についての質問とかは、トピでお願いします。決め打ちで適当に値を入れてい
るところや、pmfファイルの意味が不明で、正しく変換できていないところなど、改善の余地は沢山
あると思います。
 オービスデータの内容等、オービスや取り締まり関連の情報についても、交換させていただけれ
ば、と思います。

 なお、perlの文法や使い方についての一般的な質問は、できればここでは避けて、他で調べる
ようにしてくださると、ありがたいです。

 では、よろしくお願いします。

コメント(1)

 しかし、オービス情報だけで700件近く、その他ネズミ捕り情報と合わせて1500件以上を登録してみ
ると、特に広域を表示したときには、マークだらけで見た目も壮観ですが、何だかモッサリ度がグッとアッ
プしたような気が・・・

 今のところ、ルートシミュレーションで確認して遊んだだけで、実際の案内でどうなるか確認していま
せんが、もしかしたら、案内の遅れとかが発生するかもしれません・・・
 そこまでは遅くなっていないと思うのですが、もし案内が遅れるようだと、ナビとして役立たずですの
で、マークを減らすしかなくなりそうですね。

 あと、スクリプトでは、警告音の種類と距離について、

・高速オービスのサウンド: サウンド3、1km
・一般オービスのサウンド: サウンド2、500m
・ネズミ捕りのサウンド: サウンド4、700m

で、決め打ち設定しています。

 この辺の設定値も合わせて、週末に、ちょっと使ってみてから決めようかな〜と思っています。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

nav-u (NV-U1 NV-U2 NV-U3) 更新情報

nav-u (NV-U1 NV-U2 NV-U3)のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング