Locus Map anchor.png

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は,

  • 多くのオンライン地図・オフライン地図に対応。
    オフライン地図にはOpenStreetMapベースのMapsforge形式のベクター地図も使用でき,ファイルサイズが小さい。自分で作成した地図も利用できる。
    オンライン地図には国土地理院のGSI Mapsに対応している。WMSにも対応している。オンライン地図はキャッシュすることが出来,キャッシュ済みの場合はモバイル通信しなくても表示できる。
    また,地図を重ねて表示もできる。
  • 地図表示が高速。
    Mapsforge形式のベクター地図では,スクロールしたりしても全くストレスがない。
  • Mapsforge形式のベクター地図ではThemeで表示をカスタマイズできる。
  • 等高線や起伏データの表示。
  • 各国語表示・音声出力対応。もちろん,日本語表示・日本語音声OK。
  • オフラインPOI,お気に入りポイント対応,Googleプレイス,ウィキペディア検索も出来る。
    オフラインPOIデータは,SQLite形式な独自DBフォーマット(公開していない)なデータ。LoMaps(Lucasストアでの有料のベクター地図)を購入すると,このオフラインPOI DBファイルがついてくる。
  • 座標・住所・連絡先検索が可能。
    オフライン検索にはLoMapsのオフラインPOI DBを利用した住所検索(市やストリート名で検索)機能もあるが,日本のOpenStreetMapの住所情報にストリート名(日本では町名や番地などになる)が入っているのが稀なため,あまり使えない。オフラインでの住所検索にはGeoNamesのデータを使って検索もできる。
    オンライン検索にはGoogle等が使用できる。
  • トラックの保存やインポート・エクスポート機能。
    GPSロガーとしても使用可能。時刻・標高付きGPXファイルを保存・インポート機能。
    あらかじめ,トラックを作成・編集することも出来る。
  • オンライン・オフラインでのルート検索,音声ガイド付きナビゲーション。
    ルート検索はオフライン(Brouter)でも可能。
    電車・バス利用のルート検索には対応していない。
    カーナビ,自転車,徒歩ナビ。ポイントへの接近通知対応。
  • ジオキャッシングで使いやすい機能搭載。
  • サイクルコンピューター機能。
    • BluetoothやANT+での各種センサーとの接続対応。
    • ダッシュボード機能がある。
      サイクルコンピュータのような表示のサポート。
  • プラグインで機能が追加できる。
  • 知り合いとの位置共有。

のような機能・特徴があり,非常に使いやすい素晴らしい地図アプリ。Locus Map Proを購入して使用している。

Page Top

Locus Map用の地図 anchor.png

Locus Mapでオフラインで使用できる日本地図には,Locus Mapを使ってLucusストアからダウンロード購入出来るLoMapsと呼ばれているベクター地図がある。Locus Map Free(無料版)でもファイル3個までは無料でダウンロードして使用することが出来るが,日本全体をカバーするにはファイル4個(北海道・本州・四国・九州)をダウンロードする必要がある。

実は初期のLoMapsのベクター日本地図はところどころデータが破損していて,正常に地図が表示されない問題があった。 :cry:
このことを報告した後,2015/12月以降のダウンロード出来る地図は問題が修正されていてその後は問題はなく使用出来ている。

また,このLoMapsは概ね3-4ヶ月毎に地図が更新されるのだが,この時は再度お金を払って(日本全部で200円程度)ダウンロードする必要がある。(上記の正常に表示されない地図からのバージョンアップでもお金を払ったことがあったが,不具合があったベクター地図を更新するのにも有料なのは納得出来なかったなぁ。)

LoMapsをダウンロードすると,オフラインで使えるPOI DBや住所検索DBが合わせてダウンロード出来るので有用ではある。(抱き合わせ販売・・・)
オフラインPOI DBのフォーマット仕様は公開してもらいたいなぁ。

LoMapsはOpenStreetMapのデータをMapsforge Map writerで変換した地図データとSRTMデータから作成した等高線データを組み合わせたベクター地図に,独自のPOI/住所DBファイルで構成されている。

Page Top

無料で使用できるベクター地図 anchor.png

有料のLoMaps以外でLocus Mapで無料で使用できるベクター日本地図がどこかにないのか探してみると,以下からダウンロードして使用することができた。(LoMaps以前にはフリーな日本の地図がLocus Mapのサイトからでもダウンロード出来た。)

  • Mapsforge Download Server
    Mapsforgeライブラリの開発者がOpenStreetMapから変換したベクター地図を提供しているサイトで,日本全体のベクター地図がダウンロード出来る。Locus Mapでもそのまま使用できる。
    残念ながら,このMapsforgeの地図には等高線データは含まれていない [worried] 更新頻度は1~2ヶ月ぐらいと比較的早い。Mapsforge POIファイルもダウンロードできる。(Locus Mapでは使用できない。)
    v3マップでは日本語ではなく英語表示だったけど,v4・v5マップでは日本語で表示出来る。
  • locusvectormaps
    OpenStreetMapから変換した日本全体のベクター地図がダウンロード出来る。
    残念ながら,こちらも等高線データは含まれていない [worried] 更新頻度は毎月1回程度されていて,日本語で表示される。
    問題としては,海が青く表示されない [worried]
  • vector.city
    OpenStreetMapから変換した日本のベクター地図がダウンロード出来る。locusvectormapsの後継サイトのようだ。
    ダウンロードできる日本のベクター地図は,ファイルが正常に作成出来ていないか破損しているファイルだった。 04/27/2022版は問題なかった。残念ながら等高線データは含まれていない。日本語での表示はOK。
    問題としては,海が青く表示されない [worried]
  • OpenAndroMaps
    OpenStreetMapから変換した日本全体のベクター地図がダウンロード出来る。
    しかもこのデータは,SRTMのデータから作成された20mの等高線がバッチリ入っています。(いくつかのヨーロッパの地図では10mの等高線が入っている。)嬉しいことに,日本語で表示するベクター地図もあります。(一時期,日本語対応のベクター地図は削除されていたんだけど復活している。ダウンロードする時Multilingual Mapを選べは日本語が入っているベクター地図をダウンロードできる。)
    しかも2020/07ぐらいから,Locus Mapで使用できるオフラインPOIデータもサポートされた :D
    この日本全体のベクター地図は一つの地図ファイルで分割されていないので,Locus Mapで複数の地図にまたがる検索などの問題が起きないのが嬉しい。これを無料で提供されているのには頭が下がります。 少しですが感謝したく寄付しました。
    更新頻度は3ヶ月から4ヶ月ぐらい。
  • AndroidMaps
    OpenStreetMapから変換した日本のベクター地図がダウンロード出来る。
    残念ながら,このベクター地図には等高線データは含まれていない [worried] 日本語での表示はOK。
  • Kurviger
    OpenStreetMapから変換した日本のベクター地図がダウンロード出来る。
    Kurvigerはオートバイ用の経路検索アプリで,Mapsforge Map Writer Pluginの開発者が共同開発しているAndroidアプリもある。このアプリで利用するベクター地図を提供しているようだ。
    残念ながら,このベクター地図には等高線データは含まれていない [worried] 日本語での表示はOK。

通常は,OpenAndroMapsのベクター地図を利用すれば問題無いと思う。更新頻度が上記のMapsforgeよりも遅いのが残念。更新頻度がもう少し上がってくれればいいんだけどな!

ところどころ(ローマ字)表記されるところがある。ただ,これはOpenStreetMapの登録がローマ字入りになっているからなんだけど。

Page Top

OpenStreetMapから日本のベクター地図を作成 anchor.png

上記のサイトから提供されているOpenStreetMapベースのベクター地図をダウンロードして利用は出来るが,地図が必ずしも最新ではないことがある。OpenStreetMapは自分で自由に地図を編集出来るのが楽しい。自分で編集したら,すぐそのデータを使いたくなっちゃいます。

そこで自前でOpenStreetMapの地図データからLocus Mapで使用できるベクター地図(.mapファイル)を作成することにした。

Page Top

OpenStreetMapの日本の地図データを用意する anchor.png

まず,こちらのページに書いてあるようにして,最新の日本の地図データ(japan-latest.osm.pbf)を用意する。

この日本の地図データをLocus Mapが表示できるベクター地図(mapsforgeライブラリで出力した地図)に変換する。

Page Top

日本の地図データを小さい領域に分割する anchor.png

日本全体の地図データは大きなファイルになってしまって,ツールを使っての変換処理も大変時間がかかってしまうのと,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ファイルを作成した。( fileHokkaido.poly fileTohoku.poly fileKanto.poly fileChubu.poly fileKinki.poly fileChugoku.poly fileShikoku.poly fileKyushu.polyfileHonshu.poly
このpolyファイルは,地図のエリアを緯度・経度の情報で指定する目的で使用出来る。

日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで,osmctools(MSYS2/MinGW-W64環境で自前ビルドしたfileosmctools.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ファイルで不要なタグを表示しなくすることも出来る。

Page Top

不要なタグ情報を削除してサイズを小さくして分割する anchor.png

上記はOpenStreetMapの日本全体の地図データをそのまま分割する場合なのだが,地図データから不要なタグ情報をあらかじめ削除して少しでも地図のサイズを小さくするために,日本の地図データを少し編集することにした。

日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで,osmctools(MSYS2/MinGW-W64環境で自前ビルドしたfileosmctools.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を使って削除する。filedel.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
Page Top

SRTMのデータから等高線地図を作成 anchor.png

日本のOpenStreatMapから各地域の地図データに分割は出来たんだけど,この地図には等高線が入っていない。
ハイキングやちょっとした山登りをするときには,等高線が見れないと不便。 そこで,等高線地図を作ることにした。

日本の等高線データを得られるサイト。

  • 国土地理院
    国土地理院から正確な標高データ(5mまたは10mメッシュ)をダウンロード出来る。
    ファイルフォーマットは,JPGIS(GML)ということだが・・・ この標高データから等高線データを作成して.osmに変換する方法がわからない。
    変換する方法がわかったんで試しに四国の10m等高線地図を作成してみた。確かにSRTMデータから作成した等高線地図より綺麗で正確な感じがする。しかしファイルサイズがあまりにも大きく20倍にもなってしまった。
  • SRTM
    Shuttle Radar Topography Mission(SRTM)と呼ばれる米スペースシャトルに積み込んだレーダを使って全世界の詳細な立体地形データを作成すること目的としたミッションがあって,その成果が利用できるみたい。
    SRTM3 Version3(3秒/90m 全世界)またはSRTM1 Version 3(1秒/30m)からデータをダウンロード出来る。SRTM1 Version3(1秒/30m)は,詳細データになるのだがどうもUSAのみみたいだ*5。日本の地形の場合はSRTM3 Version 3に含まれている。
    実際の地形データは(データがあるサイトにより)hgtファイルかtiffファイルになっていて,緯度経度で区切られた区画ごと(1度)のファイルになっている。
    また,http://dwtkns.com/srtm30m/では,位置を選択してSRTM1 Version3のhgtファイルをダウンロード出来る。

SRTMのデータをダウンロードしてさらにOpenStreetMapのフォーマットに変換してくれる以下のようなツールがあるみたいなんで,それを使用して等高線地図を作ってみた。

Page Top

srtm2osm anchor.png

まず見つけたツールがsrtm2osm(最新はバージョン1.14)。
OpenStreetMapのwikiに使い方が書かれていた。.netのアプリなんでWindows用。(monoを使ってLinuxでも動かせるようだが・・・)
srtm2osmのオプションの-bounds1に日本の左下の緯度・経度と右上の緯度・経度を指定すれば,SRTMデータがあるサーバからデータをダウンロードして,等高線データを作成して,それを.osmファイルとして作成してくれる。
ただ日本全国になると129個のファイル(データがある分)の.osmファイルが出来てしまって,これを1つの.osmにマージしないといけないのだが,うまくマージ(osmosisを使った)が出来なかった。

Page Top

phyghtmap anchor.png

次に見つけたのがphyghtmap version 1.42(python2.7が必要)。このツールも使ってみた*6。(最新版はPython3.xで動作する2.23)
Pythonで動くので,WindowsでもLinuxでも使える。日本の領域指定にfilejapan.polyを使った。
このツールでもやはり129個のデータをダウンロード(hgtディレクトリ)するのはsrtm2osmと同様だが,.osmに変換する時にオプションに--max-nodes-per-tile=0を使うと,1個の.osmにマージして出力してくれた :-D

> 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だと正常な標高データがダウンロード出来る。)

Page Top

日本の等高線データを各地域に分割する anchor.png

日本の等高線データ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データ:filehgt2015.zip/2022SRTMデータ:filehgt3v3_2022.zip

Page Top

海を青くする地図を作成 anchor.png

OpenStreetMapの地図データは陸地と海岸の境界線(coastlinesタグ)がサポートされなくなってきている。このためMapsforge形式のベクター地図を作成する時に何も対策をしないと,海の部分が青く表示出来ないベクター地図になってしまう。

Mapsforgeのライブラリでは,陸地と海の部分をタグ(陸地はnosea,海はsea)指定しておくと,海のタグ部分を青く表示するように設定できる。

なので海を青く表示するには,なんとかして陸地と海岸の境界を特定し,海側はkey='natural' value='sea'タグを,陸側はkey='natural' value='nosea'タグを地図データに追加する必要がある。

このために正しい方法かどうかはわからないが,以下のような対策をしてみる。

このためには,日本の陸地や海の領域を特定する地形データが必要になる。

Page Top

海部分のデータを作成 anchor.png

> cd sea

このディレクトリに,海を特定した上で key='natural' value='sea' タグを付けるため,テキストエディタを使ってjapan_s.osmを作成した。面倒なので日本全体を海にしている。
同様にして,filehokkaido_s.osm filetohoku_s.osm filekanto_s.osm filechubu_s.osm filekinki_s.osm filechugoku_s.osm fileshikoku_s.osm filekyushu_s.osm filehonshu_s.osm をそれぞれ作成した。

Page Top

陸地部分のデータを作成 anchor.png

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フォーマット(外形)のデータがある。このファイルをogr2ogrGDAL に含まれている。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

その後,fileshape2osm.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
Page Top

海(xxxx_s.osm)と陸地部分(xxxx_ns.osm)をマージする anchor.png

海(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" />がある地図データが作成できた。

Page Top

日本の地図と等高線と海・陸地をマージして完成 anchor.png

Locus Mapは,ベクター地図としてmapsforgeフォーマット.mapファイルをサポートしている。他にもGarminのベクター地図の.imgファイルもそのまま使える。

上で作成した各場所のベクター地図とベクター等高線地図,及び海を青くする地図,を1つのファイルにマージして日本の各地域のベクター地図.mapファイルに変換する。

変換ツールには,osmosis(最新は0.48.3)とMapsforge Map-Writer pluginmapsforge-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を割り当てても,本州なんかを処理するにはまったく足りない [worried]
搭載メモリが少ない場合は,オプションのtype=hdを使うと速度はかなり遅くなるがうまくいくことがある。

最近の日本全体や本州のmap地図を作成する場合は,RAMが16G搭載したNote PC(Java VMを動かす時に-Xms12G -Xmx12Gとか使って)でも,メモリ不足で停止しちゃうようになってしまった。
どうもzoom interval 1の書き出し時にエラー(java.nio.BufferOverflowException)でうまく行かなくなっている XD
これは,Mapsforge Map-Writer pluginでのオブジェクト書き出し時のメモリ割り当てサイズが固定値で,それを超えた量になってしまったためと思われる。
しょうがないので,tag mappingファイル(tags.xml)を編集してzoom interval 1(0~7)に割り当てるタグ(オブジェクト数)をできるだけ減らすようにしたら,なんとか本州の.mapも作成できた。この為,zoom 0~7だと表示する情報が減ってしまった。

等高線が表示されるように(さらにいくつか表示されるように)tag-conf-file=filetags.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時間ぐらいかかった :-o 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で使用することが出来た。
japan_map.pngjapan_map2.png

上記の作業をbatファイルにしておけば,定期的に日本のベクター地図を作成することが出来ると思う。

Page Top

themeファイル anchor.png

Mapsforgeのthemeの仕様はこちらで説明されている。

Locus Mapではdpiが違う端末でも表示の互換性が取れるようにthemeの仕様が拡張されていて,文字サイズや線幅などにdpをつけて定義できる。これを使うと解像度が高い端末でも文字等が小さすぎて見えにくいことを回避できる。

日本のベクター地図を使用するときに使用出来るfilethemeファイルをOpenAndroMapsのElevateをベースに作成してみた。
Locus MapのmapsVector/_themesフォルダーにコピーすれば使用できる。

Page Top

POIデータの作成 anchor.png

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 pluginmapsforge-poi-writer-0.6.1-jar-with-dependencies.jar(最新は0.17.0)を使った。DownloadしたMapsforge POI-Writer pluginのjarファイルは,osmosisのlib/defaultにコピーする。

抽出するPOIは,filepoi-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ファイルが作成できた。

Page Top

Mapsforge POI DBをLocus MapのオフラインPOI DBに変換する anchor.png

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は,filetagfilter.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フォルダーにコピーすると使用できた。

Page Top

GeoNamesのデータを住所検索に使う anchor.png

上記で作成したオフラインPOI DBファイルでは住所検索が出来ないので,代わりにGeoNamesのデータをオフライン住所検索に使ってみる。

GeoNamesのここからJP.zip(日本のデータ)をダウンロードする。
JP.zipを解凍してJP.txtをLocus Mapのdata/geoNamesフォルダーにコピーする。

これでLocus Mapの検索を開き「GenoNamesとGNSでオフライン検索」をマークしてファイルの選択でJPを選ぶと,住所検索として使用できた。GenoNamesのデータは,日本のすべての住所が入っているわけではないので,住所検索出来ないところも多い XD

Page Top

作成したベクター地図 anchor.png

Windowsでも動作するCruiserというアプリを使うと,作成した日本のベクター地図をPCで確認することが出来る。
Mapsforgeライブラリでの地図の標示は,非常に高速に処理されているのがわかる。

作成した日本のベクター地図は,こちら(気が向いた時に更新)に置いておく。


*1 04/05/2022にLocus Map 3 Classicに名前が変更された。
*2 おそらく日本全体の場合は32GBのメモリを搭載する必要がある。
*3 日本全体や本州のデータのような大きなサイズのデータを処理する場合,Windowsでも64bit版でないとうまく行かないため。
*4 OpenStreetMapを編集する場合,現在では日本語名(英語/ローマ字)のような表記は推奨されなくなったそうです。
*5 現在ではSRTM1 Version3にも全世界のデータが含まれているようだ。
*6 phyghtmap version 2.0以降ではPython3.xが必要。また,version 2.10以降ではデータをダウンロードするサイトが変更になって,USGS' earthexplorerでアカウントが必要になった。事前にアカウントを作成して,phyghtmapの実行時に--earthexplorer-user=USER_ID --earthexplorer-password=PASSWORDを指定する。

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 2300, today: 4, yesterday: 0
Last-modified: 2022-03-28 (Mon) 22:52:43 (JST) (144d) by yuji