Locus Mapは,Android端末で動作するGPS地図アプリケーション。無料版のLocus Mapと有料版のLocus Map Pro*1がある。
03/15/2021に無料版Locus Mapの後継だと思われるLocus Map 4(有料版は,SilverとGoldのサブスクリプション契約になった)がリリースされた。
Locus Map/Locus Map Proは,
のような機能・特徴があり,非常に使いやすい素晴らしい地図アプリ。Locus Map Proを購入して使用している。
Locus Mapでオフラインで使用できる日本地図には,Locus Mapを使ってLucusストアからダウンロード購入出来るLoMapsと呼ばれているベクター地図がある。Locus Map Free(無料版)でもファイル3個までは無料でダウンロードして使用することが出来るが,日本全体をカバーするにはファイル4個(北海道・本州・四国・九州)をダウンロードする必要がある。
実は初期のLoMapsのベクター日本地図はところどころデータが破損していて,正常に地図が表示されない問題があった。
このことを報告した後,2015/12月以降のダウンロード出来る地図は問題が修正されていてその後は問題はなく使用出来ている。
また,このLoMapsは概ね3-4ヶ月毎に地図が更新されるのだが,この時は再度お金を払って(日本全部で200円程度)ダウンロードする必要がある。(上記の正常に表示されない地図からのバージョンアップでもお金を払ったことがあったが,不具合があったベクター地図を更新するのにも有料なのは納得出来なかったなぁ。)
LoMapsをダウンロードすると,オフラインで使えるPOI DBや住所検索DBが合わせてダウンロード出来るので有用ではある。(抱き合わせ販売・・・)
オフラインPOI DBのフォーマット仕様は公開してもらいたいなぁ。
LoMapsはOpenStreetMapのデータをMapsforge Map writerで変換した地図データとSRTMデータから作成した等高線データを組み合わせたベクター地図に,独自のPOI/住所DBファイルで構成されている。
有料のLoMaps以外でLocus Mapで無料で使用できるベクター日本地図がどこかにないのか探してみると,以下からダウンロードして使用することができた。(LoMaps以前にはフリーな日本の地図がLocus Mapのサイトからでもダウンロード出来た。)
通常は,OpenAndroMapsのベクター地図を利用すれば問題無いと思う。更新頻度が上記のMapsforgeよりも遅いのが残念。更新頻度がもう少し上がってくれればいいんだけどな!
ところどころ(ローマ字)表記されるところがある。ただ,これはOpenStreetMapの登録がローマ字入りになっているからなんだけど。
上記のサイトから提供されているOpenStreetMapベースのベクター地図をダウンロードして利用は出来るが,地図が必ずしも最新ではないことがある。OpenStreetMapは自分で自由に地図を編集出来るのが楽しい。自分で編集したら,すぐそのデータを使いたくなっちゃいます。
そこで自前でOpenStreetMapの地図データからLocus Mapで使用できるベクター地図(.mapファイル)を作成することにした。
まず,こちらのページに書いてあるようにして,最新の日本の地図データ(japan-latest.osm.pbf)を用意する。
この日本の地図データをLocus Mapが表示できるベクター地図(mapsforgeライブラリで出力した地図)に変換する。
日本全体の地図データは大きなファイルになってしまって,ツールを使っての変換処理も大変時間がかかってしまうのと,PCに多くのメモリーを搭載していないと*2処理が途中でメモリ不足で停止してしまう。なので幾つかの小さい地域に分けたほうが良い。
Locusストアで提供されているLoMaps日本地図も,北海道・本州・四国・九州の4個に分けられている。OsmAnd/OsmAnd+では,北海道・東北・関東・中部・近畿・中国・四国・九州の8個に分けられている。
そこで,Locus MapやOsmAnd/OsmAnd+と同じように北海道・本州(東北・関東・中部・近畿・中国)・四国・九州の4個(8個)に分けて作成してみた。
まず日本全体の地図データ(japan-latest.osm.pbf)を北海道・東北・関東・中部・近畿・中国・四国・九州,といった8個の.pbfファイル,もしくは北海道・本州・四国・九州の4個の.pbfファイルに分割する。(北海道・四国・九州は共通)
日本全体の地図を8個(or 4個)に分割するため,領域を定義したpolyファイルを作成した。( Hokkaido.poly
Tohoku.poly
Kanto.poly
Chubu.poly
Kinki.poly
Chugoku.poly
Shikoku.poly
Kyushu.poly
Honshu.poly)
このpolyファイルは,地図のエリアを緯度・経度の情報で指定する目的で使用出来る。
日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで,osmctools(MSYS2/MinGW-W64環境で自前ビルドしたosmctools.zip*3)のosmconvertを使って,各地域の地図データ.pbfファイルに分割できる。
日本全体の地図データを単純に8個(or 4個)に分割する場合は以下のようにする。
> cd jpmap > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Hokkaido.poly -o=hokkaido.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Tohoku.poly -o=tohoku.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Kanto.poly -o=kanto.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Chubu.poly -o=chubu.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Kinki.poly -o=kinki.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Chugoku.poly -o=chugoku.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Shikoku.poly -o=shikoku.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Kyushu.poly -o=kyushu.osm.pbf > osmconvert --complex-ways japan-latest.osm.pbf -B=..\poly\Honshu.poly -o=honshu.osm.pbf
分割するのにオブジェクト・タグが境界にまたがっている場合,そのまま分割するとオブジェクト・タグが落ちてしまう場合があるので,--complex-waysをつけている。(4個に分割する場合は,またがらないとは思うが・・・)
Locus Mapでは,Themeファイルで不要なタグを表示しなくすることも出来る。
上記はOpenStreetMapの日本全体の地図データをそのまま分割する場合なのだが,地図データから不要なタグ情報をあらかじめ削除して少しでも地図のサイズを小さくするために,日本の地図データを少し編集することにした。
日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで,osmctools(MSYS2/MinGW-W64環境で自前ビルドしたosmctools.zip*3)のosmconvertを使って,osmfilterで編集出来るように.o5mファイルに変換する。
まず,日本全体のpbf地図データをo5mフォーマットに変換する。
> osmconvert japan-latest.osm.pbf -o=japan-latest.o5m
その後,分割する。
> osmconvert --complex-ways japan-latest.o5m -B=..\poly\Hokkaido.poly -o=hokkaido.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Tohoku.poly -o=tohoku.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Kanto.poly -o=kanto.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Chubu.poly -o=chubu.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Kinki.poly -o=kinki.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Chugoku.poly -o=chugoku.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Shikoku.poly -o=shikoku.o5m > osmconvert --complex-ways japan-latest.osm -B=..\poly\Kyushu.poly -o=kyushu.o5m > osmconvert --complex-ways japan-latest.o5m -B=..\poly\Honshu.poly -o=honshu.o5m
上記と同様に--complex-waysをつけている。
そして,いらないタグ(他の言語,電線とか)をosmfilterを使って削除する。del.txtにいらないタグを入れておく。
> osmfilter hokkaido.o5m --parameter-file=del.txt > hokkaido_temp.o5m > osmfilter tohoku.o5m --parameter-file=del.txt > tohoku_temp.o5m > osmfilter kanto.o5m --parameter-file=del.txt > kanto_temp.o5m > osmfilter chubu.o5m --parameter-file=del.txt > chubu_temp.o5m > osmfilter kinki.o5m --parameter-file=del.txt > kinki_temp.o5m > osmfilter chugoku.o5m --parameter-file=del.txt > chugoku_temp.o5m > osmfilter shikoku.o5m --parameter-file=del.txt > shikoku_temp.o5m > osmfilter kyushu.o5m --parameter-file=del.txt > kyushu_temp.o5m > osmfilter honshu.o5m --parameter-file=del.txt > honshu_temp.o5m
ところどころ,名前に「ほげほげ(英語)」のように登録されているデータがあるので,ついでに(英語)の部分を削除する。*4
これは,地図データを.osmファイルに変換してからperlを使って削除した。
> osmconvert hokkaido_temp.o5m -o=hokkaido_temp.osm > osmconvert tohoku_temp.o5m -o=tohoku_temp.osm > osmconvert kanto_temp.o5m -o=kanto_temp.osm > osmconvert chubu_temp.o5m -o=chubu_temp.osm > osmconvert kinki_temp.o5m -o=kinki_temp.osm > osmconvert chugoku_temp.o5m -o=chugoku_temp.osm > osmconvert shikoku_temp.o5m -o=shikoku_temp.osm > osmconvert kyushu_temp.o5m -o=kyushu_temp.osm > osmconvert honshu_temp.o5m -o=honshu_temp.osm > perl -p -e 's/\(.+?\)//g;' hokkaido_temp.osm > hokkaido.osm > perl -p -e 's/\(.+?\)//g;' tohoku_temp.osm > tohoku.osm > perl -p -e 's/\(.+?\)//g;' kanto_temp.osm > kanto.osm > perl -p -e 's/\(.+?\)//g;' chubu_temp.osm > chubu.osm > perl -p -e 's/\(.+?\)//g;' kinki_temp.osm > kinki.osm > perl -p -e 's/\(.+?\)//g;' chugoku_temp.osm > chugoku.osm > perl -p -e 's/\(.+?\)//g;' shikoku_temp.osm > shikoku.osm > perl -p -e 's/\(.+?\)//g;' kyushu_temp.osm > kyushu.osm > perl -p -e 's/\(.+?\)//g;' honshu_temp.osm > honshu.osm
こんなようにして,(英語)を削除した。ちょっと地図データのサイズが小さくなった。
これで,ベクター日本地図のhakkaido.osm(北海道),tohoku.osm(東北),kanto.osm(関東),chubu.osm(中部),kinki.osm(近畿),chugoku.osm(中国),shikoku.osm(四国),kyushu.osm(九州)及びhonshu.osm(本州)が出来た。.osmファイルはテキストファイル(xml)で,日本全体だと24Gbyte以上になっちゃう。
この後,.osmを.pbf(圧縮ファイル)に変換しておく。
> osmconvert hokkaido.osm -o=hokkaido.osm.pbf > osmconvert tohoku.osm -o=tohoku.osm.pbf > osmconvert kanto.osm -o=kanto.osm.pbf > osmconvert chubu.osm -o=chubu.osm.pbf > osmconvert kinki.osm -o=kinki.osm.pbf > osmconvert chugoku.osm -o=chugoku.osm.pbf > osmconvert shikoku.osm -o=shikoku.osm.pbf > osmconvert kyushu.osm -o=kyushu.osm.pbf > osmconvert honshu.osm -o=honshu.osm.pbf > del *.osm
日本のOpenStreatMapから各地域の地図データに分割は出来たんだけど,この地図には等高線が入っていない。
ハイキングやちょっとした山登りをするときには,等高線が見れないと不便。
そこで,等高線地図を作ることにした。
日本の等高線データを得られるサイト。
SRTMのデータをダウンロードしてさらにOpenStreetMapのフォーマットに変換してくれる以下のようなツールがあるみたいなんで,それを使用して等高線地図を作ってみた。
まず見つけたツールがsrtm2osm(最新はバージョン1.14)。
OpenStreetMapのwikiに使い方が書かれていた。.netのアプリなんでWindows用。(monoを使ってLinuxでも動かせるようだが・・・)
srtm2osmのオプションの-bounds1に日本の左下の緯度・経度と右上の緯度・経度を指定すれば,SRTMデータがあるサーバからデータをダウンロードして,等高線データを作成して,それを.osmファイルとして作成してくれる。
ただ日本全国になると129個のファイル(データがある分)の.osmファイルが出来てしまって,これを1つの.osmにマージしないといけないのだが,うまくマージ(osmosisを使った)が出来なかった。
次に見つけたのがphyghtmap version 1.42(python2.7が必要)。このツールも使ってみた*6。(最新版はPython3.xで動作する2.23)
Pythonで動くので,WindowsでもLinuxでも使える。日本の領域指定にjapan.polyを使った。
このツールでもやはり129個のデータをダウンロード(hgtディレクトリ)するのはsrtm2osmと同様だが,.osmに変換する時にオプションに--max-nodes-per-tile=0を使うと,1個の.osmにマージして出力してくれた
> cd srtm > phyghtmap --polygon=..\poly\japan.poly --output-prefix=japan_srtm --srtm=3 --step=20 --line-cat=500,100 --start-node-id=20000000000 --start-way-id=10000000000 --write-timestamp --max-nodes-per-tile=0 > mv japan_srtm_lon122.56_153.89lat21.21_45.80_srtm3.osm japan_srtm.osm > osmconvert japan_srtm.osm -o=japan_srtm.pbf > del japan_srtm.osm
--step=20で20mの等高線に(--step=10で10mにも出来る。ファイルサイズは倍になる。),--line-cat=500,100で500m/100m毎に少し太線にするようにした。
--write-timestampオプションを指定しないと,後でosmosisでマージしてLocus map用のベクター地図.mapファイルを作成する時にtimestampが無いってエラーを出してうまくいかない。
これで,なんとか20m(ハイキング用なんで20m)での日本の等高線地図japan_srtm.osmを作成できた。
ただ出来上がった等高線地図には,おかしな等高線がたくさん出来ている。ダウンロードしたSRTMの.hgtファイルを確認したら,ところどころデータがおかしいのが原因。
srtm2osmでダウンロードした.hgtファイルのデータは大丈夫みたいなので(つまりhttp://dds.cr.usgs.gov/srtm/version2_1/SRTM3/Eurasia/にあるデータはいくつか壊れていてダメで,http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL3.003/2000.02.11/ のだと大丈夫),srtm2osmでダウンロードした.hgtファイルに入れ替えて,再度phyghtmapを使って.osmファイルを作成した。
これでやっと,日本の等高線データのjapan_srtm.pbfが作成できた。(version2.10以降のphyghtmapだと正常な標高データがダウンロード出来る。)
日本の等高線データjapan_srtm.osmから地図データと同様に8個(4個)に分割するのも,同じようにすれば作成できる。(phyghtmapで直接作成することも出来るが,こっちのやり方のほうが早かった。)
> osmconvert japan_srtm.pbf -B=..\poly\Hokkaido.poly -o=hokkaido_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Tohoku.poly -o=tohoku_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Kanto.poly -o=kanto_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Chubu.poly -o=chubu_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Kinki.poly -o=kinki_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Chugoku.poly -o=chugoku_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Shikoku.poly -o=shikoku_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Kyushu.poly -o=kyushu_srtm.pbf > osmconvert japan_srtm.pbf -B=..\poly\Honshu.poly -o=honshu_srtm.pbf
一度作成しておけば,後は地図と等高線をマージすれば等高線入り日本地図データが作れることになる。
ちなみに,ダウンロードした.hgtファイルをLocus/data/srtmフォルダーに入れておいて,Locus mapで地形を表示する設定にすると,起伏なんかが明暗表示されて見やすくなる。
(2015SRTMデータ:hgt2015.zip/2022SRTMデータ:
hgt3v3_2022.zip)
OpenStreetMapの地図データは陸地と海岸の境界線(coastlinesタグ)がサポートされなくなってきている。このためMapsforge形式のベクター地図を作成する時に何も対策をしないと,海の部分が青く表示出来ないベクター地図になってしまう。
Mapsforgeのライブラリでは,陸地と海の部分をタグ(陸地はnosea,海はsea)指定しておくと,海のタグ部分を青く表示するように設定できる。
なので海を青く表示するには,なんとかして陸地と海岸の境界を特定し,海側はkey='natural' value='sea'タグを,陸側はkey='natural' value='nosea'タグを地図データに追加する必要がある。
このために正しい方法かどうかはわからないが,以下のような対策をしてみる。
このためには,日本の陸地や海の領域を特定する地形データが必要になる。
> cd sea
このディレクトリに,海を特定した上で key='natural' value='sea' タグを付けるため,テキストエディタを使ってjapan_s.osmを作成した。面倒なので日本全体を海にしている。
同様にして,hokkaido_s.osm
tohoku_s.osm
kanto_s.osm
chubu_s.osm
kinki_s.osm
chugoku_s.osm
shikoku_s.osm
kyushu_s.osm
honshu_s.osm をそれぞれ作成した。
OpenStreetMap Dataというサイトから,世界の陸地線のデータである,land-polygons-split-4326.zipファイルをダウンロードする。
> wget https://osmdata.openstreetmap.de/download/land-polygons-split-4326.zip > unzip land-polygons-split-4326.zip
zipファイルを解凍すると,land_polygons.shpという世界全体のShapeフォーマット(外形)のデータがある。このファイルをogr2ogr( GDAL に含まれている。Windowsの場合,QGISがインストールされていればogr2ogrも使える。)というツールを使用して,日本全体の外形のShapeデータのjapan.shpを取り出す。
> ogr2ogr -overwrite -progress -skipfailures -clipsrc 122.560700 21.209920 153.890100 45.802450 japan.shp land-polygons-split-4326\land_polygons.shp
その後,shape2osm.py(Python3で動くように修正したもの)を使用して,日本全体の外形データを,japan_ns.osmファイルに変換する。
> python shape2osm.py -l japan_ns -o 10000000 japan.shp
これで,日本全体の陸地の外形データのjapan_ns.osmが作成される。この時,shape2osm.pyにより, key='natural' value='nosea' タグが追加されている。
そして,日本全体の外形データから,北海道,東北,関東,中部,近畿,中国,四国,九州,(本州)の外形データを作成する。これはosmconvertを使用して各場所をカットすることにした。
ツールにはOpenStreetMapのwikiに書かれているosmosis(最新は0.48.3)も使用する。
> osmosis --read-xml file="japan_s.osm" --read-xml file="japan_ns.osm" --sort --merge --write-xml file="japan_ns2.osm" > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Hokkaido.poly -o=hokkaido_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Tohoku.poly -o=tohoku_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Kanto.poly -o=kanto_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Chubu.poly -o=chubu_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Kinki.poly -o=kinki_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Chugoku.poly -o=chugoku_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Shikoku.poly -o=shikoku_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Kyushu.poly -o=kyushu_ns.osm > osmconvert --complex-ways japan_ns2.osm -B=..\poly\Honshu.poly -o=honshu_ns.osm
海(xxxx_s.osm)と陸地部分(xxxx_ns.osm)をマージして,xxxx_sea.osmを作成しておく。
> osmosis --read-xml file="hokkaido_s.osm" --read-xml file="hokkaido_ns.osm" --sort --merge --write-xml file="hokkaido_sea.osm" > osmosis --read-xml file="tohoku_s.osm" --read-xml file="tohoku_ns.osm" --sort --merge --write-xml file="tohoku_sea.osm" > osmosis --read-xml file="kanto_s.osm" --read-xml file="kanto_ns.osm" --sort --merge --write-xml file="kanto_sea.osm" > osmosis --read-xml file="chubu_s.osm" --read-xml file="chubu_ns.osm" --sort --merge --write-xml file="chubu_sea.osm" > osmosis --read-xml file="kinki_s.osm" --read-xml file="kinki_ns.osm" --sort --merge --write-xml file="kinki_sea.osm" > osmosis --read-xml file="chugoku_s.osm" --read-xml file="chugoku_ns.osm" --sort --merge --write-xml file="chugoku_sea.osm" > osmosis --read-xml file="shikoku_s.osm" --read-xml file="shikoku_ns.osm" --sort --merge --write-xml file="shikoku_sea.osm" > osmosis --read-xml file="kyushu_s.osm" --read-xml file="kyushu_ns.osm" --sort --merge --write-xml file="kyushu_sea.osm" > osmosis --read-xml file="honshu_s.osm" --read-xml file="honshu_ns.osm" --sort --merge --write-xml file="honshu_sea.osm"
pbfファイルに変換しておく。
> osmconvert hokkaido_sea.osm -o=hokkaido_sea.pbf > osmconvert tohoku_sea.osm -o=tohoku_sea.pbf > osmconvert kanto_sea.osm -o=kanto_sea.pbf > osmconvert chubu_sea.osm -o=chubu_sea.pbf > osmconvert kinki_sea.osm -o=kinki_sea.pbf > osmconvert chugoku_sea.osm -o=chugoku_sea.pbf > osmconvert shikoku_sea.osm -o=shikoku_sea.pbf > osmconvert kyushu_sea.osm -o=kyushu_sea.pbf > osmconvert honshu_sea.osm -o=honshu_sea.pbf
やっと,陸地は<tag k="natural" v="nosea" />が,海の部分は<tag k="natural" v="sea" />がある地図データが作成できた。
Locus Mapは,ベクター地図としてmapsforgeフォーマット.mapファイルをサポートしている。他にもGarminのベクター地図の.imgファイルもそのまま使える。
上で作成した各場所のベクター地図とベクター等高線地図,及び海を青くする地図,を1つのファイルにマージして日本の各地域のベクター地図.mapファイルに変換する。
変換ツールには,osmosis(最新は0.48.3)とMapsforge Map-Writer pluginのmapsforge-map-writer-0.6.0-jar-with-dependencies.jar(最新は0.17.0)を使った。DownloadしたMapsforge Map-Writer pluginのjarファイルは,osmosisのlib/defaultにコピーする。
使用するメモリの設定はosmosisのbin/osmosis.batで,
set JAVACMD_OPTIONS=-Xms5G -Xmx5G
を追加して設定する。
しかしMapsforge Map-Writer pluginを使って8GのRAMを搭載したWindows Note PCで上記のように5Gを割り当てても,本州なんかを処理するにはまったく足りない
搭載メモリが少ない場合は,オプションのtype=hdを使うと速度はかなり遅くなるがうまくいくことがある。
最近の日本全体や本州のmap地図を作成する場合は,RAMが16G搭載したNote PC(Java VMを動かす時に-Xms12G -Xmx12Gとか使って)でも,メモリ不足で停止しちゃうようになってしまった。
どうもzoom interval 1の書き出し時にエラー(java.nio.BufferOverflowException)でうまく行かなくなっている
これは,Mapsforge Map-Writer pluginでのオブジェクト書き出し時のメモリ割り当てサイズが固定値で,それを超えた量になってしまったためと思われる。
しょうがないので,tag mappingファイル(tags.xml)を編集してzoom interval 1(0~7)に割り当てるタグ(オブジェクト数)をできるだけ減らすようにしたら,なんとか本州の.mapも作成できた。この為,zoom 0~7だと表示する情報が減ってしまった。
等高線が表示されるように(さらにいくつか表示されるように)tag-conf-file=tags.xmlに設定しておく。
以下のコマンド(本州だけはtype=hdを使っている)でマージして,各.mapファイルを作成した。
> osmosis --read-pbf file="jpmap\hokkaido.osm.pbf" --read-pbf file="srtm\hokkaido_srtm.pbf" --merge --read-pbf file="sea\hokkaido_sea.pbf" --merge --mapfile-writer file="hokkaido.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\tohoku.osm.pbf" --read-pbf file="srtm\tohoku_srtm.pbf" --merge --read-pbf file="sea\tohoku_sea.pbf" --merge --mapfile-writer file="tohoku.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\kanto.osm.pbf" --read-pbf file="srtm\kanto_srtm.pbf" --merge --read-pbf file="sea\kanto_sea.pbf" --merge --mapfile-writer file="kanto.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\chubu.osm.pbf" --read-pbf file="srtm\chubu_srtm.pbf" --merge --read-pbf file="sea\chubu_sea.pbf" --merge --mapfile-writer file="chubu.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\kinki.osm.pbf" --read-pbf file="srtm\kinki_srtm.pbf" --merge --read-pbf file="sea\kinki_sea.pbf" --merge --mapfile-writer file="kinki.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\chugoku.osm.pbf" --read-pbf file="srtm\chugoku_srtm.pbf" --merge --read-pbf file="sea\chugoku_sea.pbf" --merge --mapfile-writer file="chugoku.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\shikoku.osm.pbf" --read-pbf file="srtm\shikoku_srtm.pbf" --merge --read-pbf file="sea\shikoku_sea.pbf" --merge --mapfile-writer file="shikoku.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\kyushu.osm.pbf" --read-pbf file="srtm\kyushu_srtm.pbf" --merge --read-pbf file="sea\kyushu_sea.pbf" --merge --mapfile-writer file="kyushu.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="jpmap\honshu.osm.pbf" --read-pbf file="srtm\honshu_srtm.pbf" --merge --read-pbf file="sea\honshu_sea.pbf" --merge --mapfile-writer file="honshu.osm.map" tag-conf-file=tags\tags.xml map-start-zoom=10 comment="%date% made by Yuji Ueno" type=hd
とにかく時間がかかる。4分割の場合は全部マージするだけでも大体27時間ぐらいかかった 8分割(本州除く)だと全体では6時間ぐらいで作成出来た。
こうやって,北海道(hokkaido.osm.map),東北(tohoku.osm.map),関東(kanto.osm.map),中部(chubu.osm.map),近畿(kinki.osm.map),中国(chugoku.osm.map),四国(shikoku.osm.map),九州(kyushu.osm.map)の8個と本州(honshu.osm.map)の日本のベクター地図が出来た。
これらから北海道(hokkaido.osm.map),本州(honshu.osm.map),四国(shikoku.osm.map),九州(kyushu.osm.map)の4個のベクター地図をLocus MapのmapsVectorフォルダーにコピーして,日本の地図をLocus Mapで使用することが出来た。
上記の作業をbatファイルにしておけば,定期的に日本のベクター地図を作成することが出来ると思う。
Mapsforgeのthemeの仕様はこちらで説明されている。
Locus Mapではdpiが違う端末でも表示の互換性が取れるようにthemeの仕様が拡張されていて,文字サイズや線幅などにdpをつけて定義できる。これを使うと解像度が高い端末でも文字等が小さすぎて見えにくいことを回避できる。
日本のベクター地図を使用するときに使用出来るthemeファイルをOpenAndroMapsのElevateをベースに作成してみた。
Locus MapのmapsVector/_themesフォルダーにコピーすれば使用できる。
POI(Point of Interest)は地図上の特定のポイントの情報のこと。
Mapsforgeライブラリには,OpenStreetMapのデータからPOIを抽出するためのPOI Writerプラグイン(バージョン0.6.1から対応した)がある。
このプラグインを使ってMapsforge形式のPOIを抽出しSQLite DBファイルに書き出すことが出来る。
POIとして抽出するOpenStreetMapの要素としてはnodeとwayでrelationは省かれている。geo-tags=trueを使うとrelationも対象になるのだが,エラーになってしまった。なのでrelationで設定されている場合(関西国際空港など)は,POIに出力されない LoMapsのオフラインPOI DBではrelationも処理されているようだ。
POI DBファイルを作成するのには,mapファイル作成する時にも使ったosmosis(最新は0.48.3)とMapsforge POI-Writer pluginのmapsforge-poi-writer-0.6.1-jar-with-dependencies.jar(最新は0.17.0)を使った。DownloadしたMapsforge POI-Writer pluginのjarファイルは,osmosisのlib/defaultにコピーする。
抽出するPOIは,poi-mapping.xmlファイル(tagsディレクトリに置く)に設定しておく。
osmosisコマンドで.poiファイルを作成する。
> cd poi > osmosis --read-pbf file="..\jpmap\hokkaido.osm.pbf" --poi-writer file="hokkaido.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\tohoku.osm.pbf" --poi-writer file="tohoku.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\kanto.osm.pbf" --poi-writer file="kanto.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\chubu.osm.pbf" --poi-writer file="chubu.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\kinki.osm.pbf" --poi-writer file="kinki.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\chugoku.osm.pbf" --poi-writer file="chugoku.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\shikoku.osm.pbf" --poi-writer file="shikoku.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\kyushu.osm.pbf" --poi-writer file="kyushu.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno" > osmosis --read-pbf file="..\jpmap\honshu.osm.pbf" --poi-writer file="honshu.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="%date% made by Yuji Ueno"
これで,北海道(hokkaido.osm.poi),東北(tohoku.osm.poi),関東(kanto.osm.poi),中部(chubu.osm.poi),近畿(kinki.osm.poi),中国(chugoku.osm.poi),四国(shikoku.osm.poi),九州(kyushu.osm.poi),本州(honshu.osm.poi)のMapsforge形式のPOI DBファイルが作成できた。
Locus Mapでは,残念ながらMapsforge POI DBは使用できない。
MapsforgeライブラリでPOI DBがサポートされる前から,Locus MapではオフラインPOI機能を搭載するため独自にオフラインPOI DBを作成していた。なので独自フォーマットなのはしょうがない。
またこのLoMapsの一部であるオフラインPOI DBは,住所検索用のDBデータも入っている。
LoMapsのオフラインPOI DBのフォーマットは公開されていないので,LoMapsを購入しないとオフラインPOI DBを使用することは出来なかったが,独自にフォーマットを解析した人が仕様を公開してくれている
このおかげかどうかはわからないがOpenAndroMapsでも,2020/07ぐらいからLocus Mapで使用できるオフラインPOI DB(住所検索DBは含まれていない)をサポートしている。
また,Mapsforge POI DBをLocus Mapのoffline POI DBに変換するツールpoi_converterが公開されているので,このツールを使ってLocus Map用のオフラインPOI DBを作成してみた。しかし,住所検索用のデータは残念ながら変換できないようだ。
変換するPOIは,tagfilter.txtファイル(configディレクトリに置く)に設定しておく。
> python poiconverter.py -if poi -om create hokkaido.osm.poi hokkaido.osm.db > python poiconverter.py -if poi -om create tohoku.osm.poi tohoku.osm.db > python poiconverter.py -if poi -om create kanto.osm.poi kanto.osm.db > python poiconverter.py -if poi -om create chubu.osm.poi chubu.osm.db > python poiconverter.py -if poi -om create kinki.osm.poi kinki.osm.db > python poiconverter.py -if poi -om create chugoku.osm.poi chugoku.osm.db > python poiconverter.py -if poi -om create shikoku.osm.poi shikoku.osm.db > python poiconverter.py -if poi -om create kyushu.osm.poi kyushu.osm.db > python poiconverter.py -if poi -om create honshu.osm.poi honshu.osm.db
北海道(hokkaido.osm.db),東北(tohoku.osm.db),関東(kanto.osm.db),中部(chubu.osm.db),近畿(kinki.osm.db),中国(chugoku.osm.db),四国(shikoku.osm.db),九州(kyushu.osm.db),本州(honshu.osm.db)のLocus Mapで使えるオフラインPOI DBファイルが作成できた。
北海道(hokkaido.osm.db),本州(honshu.osm.db),四国(shikoku.osm.db),九州(kyushu.osm.db)の4個のファイルをLocus MapのmapsVectorフォルダーにコピーすると使用できた。
上記で作成したオフラインPOI DBファイルでは住所検索が出来ないので,代わりにGeoNamesのデータをオフライン住所検索に使ってみる。
GeoNamesのここからJP.zip(日本のデータ)をダウンロードする。
JP.zipを解凍してJP.txtをLocus Mapのdata/geoNamesフォルダーにコピーする。
これでLocus Mapの検索を開き「GenoNamesとGNSでオフライン検索」をマークしてファイルの選択でJPを選ぶと,住所検索として使用できた。GenoNamesのデータは,日本のすべての住所が入っているわけではないので,住所検索出来ないところも多い
Windowsでも動作するCruiserというアプリを使うと,作成した日本のベクター地図をPCで確認することが出来る。
Mapsforgeライブラリでの地図の標示は,非常に高速に処理されているのがわかる。
作成した日本のベクター地図は,こちら(気が向いた時に更新)に置いておく。
新しくコメントをつける