Locus Map anchor.png

Locus MapはAndroid端末で動作するGPS地図アプリケーション。無料版のLocus Mapと有料版のLocus Map Pro(04/05/2022にLocus Map 3 Classicに名前が変更されて販売中)があった。

03/15/2021にLocus Mapの後継アプリのLocus Map 4がリリースされ,無料版と有料版のSilver(€10/年)とGold(€24/年)のサブスクリプション契約版になった。Locus Map無料版もLocus Map 4無料版に変更された。

旧Locus Map/旧Locus Map Pro(現Locus Map 3 Classic)は,

  • 多くのオンライン地図・オフライン地図に対応。
    オフライン地図にはOpenStreetMapベースのMapsforge形式のベクター地図も使用でき,地図データのファイルサイズは比較的小さい。自分で作成した地図も利用できる。
    他にもGarminのベクター地図の.imgファイルもそのまま使える。
    日本でのオンライン地図には国土地理院のGSI Mapsに対応している。WMSにも対応している。
    オンライン地図はキャッシュすることが出来,キャッシュ済みの場合はモバイル通信しなくても表示できる。
    また,複数の地図を重ねて表示もできる。
  • 地図表示が高速。
    Mapsforge形式のベクター地図では,スクロールしたりしても全くストレスがない。
  • Mapsforge形式のベクター地図ではテーマ(Theme)で表示をカスタマイズできる。
  • 等高線や起伏データの表示。
  • 各国語表示・音声出力対応。
    もちろん,日本語表示・日本語音声ができる。
  • 多くの座標タイプ・単位に対応。
    MGRSにも対応している。
  • オフライン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(無料版)でもこのLoMapsからファイル3個までは無料でダウンロードして使用することが出来るが,日本全体をカバーするにはファイル4個(北海道・本州・四国・九州)をダウンロードする必要がある。

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

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

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

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

Page Top

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

有料のLoMaps以外でLocus Mapで無料で使用できるMapsforge形式のベクター日本地図がどこかにないのか探してみると,以下からダウンロードして使用することができた。(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 Download Serverよりも遅いのが残念。更新頻度がもう少し上がってくれればいいんだけどな!

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

Page Top

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

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

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

Page Top

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

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

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

Mapsforge形式のベクター地図にはmapsforgeライブラリでoption指定の仕方でV3,V4,V5のバージョンのどれかが作成される。

  • V3
    言語タグは無く,OpenStreetMapのデフォルトの言語タグのみ使用される。
  • V4
    マルチ言語対応。
    osmosis/Mapsforge Map-Writer pluginでpreferred-languagesオプションで使用する言語をコンマで区切って指定する。
    --preferred-languages=ja,en
  • V5
    タグに変数が使用できるようになった。
    osmosis/Mapsforge Map-Writer pluginでtag-values=trueオプションを使う。
    --tag-values=true

このページで作成しているMapsforge形式のベクター地図は,V3で作成するようにしている。

Page Top

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

日本全体の地図データは大きなファイルになってしまって,ツールを使っての変換処理も大変時間がかかってしまうのと,PCに多くのメモリーを搭載していないと*1処理が途中でメモリ不足で停止してしまう。なので幾つかの小さい地域に分けたほうが良いみたいだ。

Locusストアで提供されているLoMaps日本地図も,北海道・本州・四国・九州の4個に分けられている。(本州は大きい領域だけど・・・) OsmAnd/OsmAnd+では,北海道・東北・関東・中部・近畿・中国・四国・九州の8個に分けられている。

そこで,Locus MapやOsmAnd/OsmAnd+と同じように北海道・本州(東北・関東・中部・近畿・中国)・四国・九州の4個(8個)に分けて作成してみた。

まず日本全体の地図データ(japan-latest.osm.pbf)を北海道・本州・四国・九州,といったの4個の.pbfファイルに,もしくは北海道・東北・関東・中部・近畿・中国・四国・九州の8個の.pbfファイルに分割する。(北海道・四国・九州は共通)

日本全体の地図を4個(or 8個)に分割するため,領域を定義したpolyファイルを作成した。( fileHokkaido.poly fileTohoku.poly fileKanto.poly fileChubu.poly fileKinki.poly fileChugoku.poly fileShikoku.poly fileKyushu.polyfileHonshu.poly
このpolyファイルは,地図のエリアを緯度・経度の情報で指定する目的で使用出来る。

日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで,osmctoolsosmconvertを使って,各地域の地図データ.pbfファイルに分割できる。
日本全体の地図データを単純に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\Honshu.poly   -o=honshu.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

日本全体の地図データを単純に8個に分割する場合は以下のようにする。

> 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

分割するのにオブジェクト・タグが境界にまたがっている場合,そのまま分割するとオブジェクト・タグが落ちてしまう場合があるので,--complex-waysをつけている。(4個に分割する場合は,またがらないとは思うが・・・)

Page Top

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

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

地図データを編集しない場合は,Locus Mapだと不要なタグはThemeファイルを使って表示しなくすることも出来る。

日本全体の地図データの.pbfファイルはバイナリデータに圧縮したファイルなんで, osmctools のosmconvertを使ってosmfilterで編集出来るように.o5mファイルに変換する。

まず,日本全体のpbf地図データをo5mフォーマットに変換する。

> osmconvert japan-latest.osm.pbf -o=japan-latest.o5m

その後,4個に分割する。

> osmconvert --complex-ways japan-latest.o5m -B=..\poly\Hokkaido.poly -o=hokkaido.o5m
> osmconvert --complex-ways japan-latest.o5m -B=..\poly\Honshu.poly   -o=honshu.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

8個に分割するばあいは,

> 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にいらないタグを入れておく。 4個に分割している場合は,

> osmfilter hokkaido.o5m --parameter-file=del.txt > hokkaido_temp.o5m
> osmfilter honshu.o5m   --parameter-file=del.txt > honshu_temp.o5m
> osmfilter shikoku.o5m  --parameter-file=del.txt > shikoku_temp.o5m
> osmfilter kyushu.o5m   --parameter-file=del.txt > kyushu_temp.o5m

として,8個に分割している場合は,

> 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

とした。

ところどころ,名前に「ほげほげ(英語)」のように登録されているデータがあるので,ついでに(英語)の部分を削除する。*2
これは,地図データを.osmファイルに変換してからperlを使って削除した。
4個の場合は,

> osmconvert hokkaido_temp.o5m -o=hokkaido_temp.osm
> osmconvert honshu_temp.o5m   -o=honshu_temp.osm
> osmconvert shikoku_temp.o5m  -o=shikoku_temp.osm
> osmconvert kyushu_temp.o5m   -o=kyushu_temp.osm
> perl -p -e 's/\(.+?\)//g;' hokkaido_temp.osm > hokkaido.osm
> perl -p -e 's/\(.+?\)//g;' honshu_temp.osm   > honshu.osm
> perl -p -e 's/\(.+?\)//g;' shikoku_temp.osm  > shikoku.osm
> perl -p -e 's/\(.+?\)//g;' kyushu_temp.osm   > kyushu.osm

として,8個の場合は,

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

とした。

こんなようにして,(英語)を削除した。ちょっと地図データのサイズが小さくなった。

これで,ベクター日本地図のhakkaido.osm(北海道),honshu.osm(本州),shikoku.osm(四国),kyushu.osm(九州)または,hakkaido.osm(北海道),tohoku.osm(東北),kanto.osm(関東),chubu.osm(中部),kinki.osm(近畿),chugoku.osm(中国),shikoku.osm(四国),kyushu.osm(九州)が出来た。
.osmファイルはテキストファイル(xml)で,日本全体だと24Gbyte以上になっちゃう。

この後,.osmを.pbf(圧縮ファイル)に変換しておく。
4個の場合は,

> osmconvert hokkaido.osm -o=hokkaido.osm.pbf
> osmconvert honshu.osm   -o=honshu.osm.pbf
> osmconvert shikoku.osm  -o=shikoku.osm.pbf
> osmconvert kyushu.osm   -o=kyushu.osm.pbf
> del *.osm

8個の場合は,

> 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
> del *.osm

で変換する。

Page Top

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

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

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

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

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

Page Top

srtm2osm anchor.png

まず見つけたツールがsrtm2osm version 1.12(最新バージョン1.16.5)。
OpenStreetMapのwikiに使い方が書かれていた。.netアプリなんでWindows専用。(monoを使ってLinuxでも動かせるようだが・・・)

srtm2osmのオプションの-bounds1に日本の左下の緯度・経度と右上の緯度・経度を指定すれば,SRTMデータがあるサーバーからデータをダウンロードして,等高線データを作成して,それを.osmファイルとして作成してくれる。

日本全体の等高線データを作りたいので緯度・軽度を1°毎の矩形(299個)で指定したら,129個のファイル(データがある分)の.osmファイルが出来た。これらを1つの.osmにマージしないといけないのだが,マージがうまく出来なかった。

しょうがないので以下のようにして1つの.osmファイルを作成した。しかしこのやり方だと日本以外の韓国なども対象になるのもあって等高線を作成するのにすごく時間がかかるのと,海底の等高線も作成されちゃう ;(

> cd srtm
> srtm2osm -bounds1 24 122 46 146 -step 10 -cat 100 50 -large -firstnodeid 20000000000 -firstwayid 10000000000 -incrementid -o japan_srtm.osm
Page Top

phyghtmap anchor.png

次に見つけたのがphyghtmap version 1.42(python2.7が必要)で,このツールを使ってみた*4。最新版はPython3.xで動作するversion 2.23。
Pythonで動くのでWindowsでもLinuxでも使える。

phyghtmapを使用するとSRTMのデータをダウンロードして,その後.osmファイルに変換してくれる。既にSRTMのデータがダウンロード済みの場合は,.osmファイルへの変換のみを行ってくれる。

日本の領域指定にはpolyファイルで指定できるので,filejapan.polyを使った。
このツールでもやはり129個のデータをダウンロード(hgtディレクトリにhgtまたはtiffファイル)するのはsrtm2osmと同様だが,.osmに変換する時にオプションに--max-nodes-per-tile=0を使うと,1個の.osmにマージして出力してくれた :-D
詳細データのSRTM1 Version 3(1秒/30m)をダウンロードするには,--srtm=1 --srtm-version=3のオプションを指定する。デフォルトは--srtm=3 --srtm-version=3(3秒/90m)。

> 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 --no-zero-contour --earthexplorer-user=USER_ID --earthexplorer-password=PASSWORD
> move 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

USER_IDとPASSWORDはphyghtmapの最初の起動時のみ必要。

--step=20で20mの等高線に,--line-cat=500,100で500m/100m毎に少し太線にするようにした。
--step=10 --line-cat=100,50とすれば10mの等高線にも出来る。ファイルサイズは倍になる。

--write-timestampオプションを指定しないと,後でosmosisでマージしてLocus map用のベクター地図.mapファイルを作成する時にtimestampが無いってエラーを出してうまくいかない。
また,--no-zero-contourで0mの等高線を作成しないようにしている。

これで,なんとかハイキング用に使える20m(または10m)での日本の等高線地図japan_srtm.osm(japan_srtm10.osm)を作成できた。

ただ出来上がった等高線地図には,おかしな等高線がたくさん出来ている。ダウンロードしたSRTMの.hgtファイルを確認したら,ところどころデータがおかしいのが原因。
srtm2osmでダウンロードした.hgtファイルのデータは大丈夫みたい。どうもhttp://dds.cr.usgs.gov/srtm/version2_1/SRTM3/Eurasia/にあるSRTMデータはいくつかファイルが壊れていて,http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL3.003/2000.02.11/ のファイルだと問題ない。なのでsrtm2osmでダウンロードした.hgtファイルに入れ替えて,再度phyghtmapを使って.osmファイルを作成した。

これでやっと,日本の等高線データfilejapan_srtm.pbf(20m等高線),filejapan_srtm10.pbf(10m等高線)が作成できた。(version2.10以降のphyghtmapだと正常な標高データがダウンロード出来る。

Page Top

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

日本の等高線データjapan_srtm.pbfから地図データと同様に4個(8個)に分割するのも,osmconvertを使った。phyghtmapで直接作成することも出来るが,こっちのやり方のほうが早かった。

4個の場合は,

> osmconvert japan_srtm.pbf -B=..\poly\Hokkaido.poly -o=hokkaido_srtm.pbf
> osmconvert japan_srtm.pbf -B=..\poly\Honshu.poly   -o=honshu_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

8個の場合は,

> 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

として,作成した。

一度作成しておけば,後は地図と等高線をマージすれば等高線入り日本地図データが作れることになる。

ちなみに,ダウンロードした.hgtファイルをLocus/data/srtmフォルダーに入れておいて,Locus mapで地形を表示する設定にすると,起伏なんかが明暗表示されて見やすくなる。

Page Top

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

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

Locus Mapで使われているMapsforgeの表示ライブラリでは,Theme(テーマ)で陸地と海の部分をタグ(陸地はnosea,海はsea)指定しておくと,海のタグ部分を青く表示するように設定できる。

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

このために正しい方法かどうかはわからないが,以下のような対策をしてみる。
このやり方の場合,日本の陸地や海の領域を特定する地形データが別途必要になる。

Page Top

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

> cd sea

このディレクトリに,海を特定した上で key='natural' value='sea' タグを付けるため,テキストエディタを使ってfilejapan_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にGDALが含まれているので,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も使用した。
4個の場合は,

> 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\Honshu.poly   -o=honshu_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

8個の場合は,

> 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\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

で作成した。

Page Top

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

海(xxxx_s.osm)と陸地部分(xxxx_ns.osm)をマージして,xxxx_sea.osmを作成しておく。

4個の場合は,

> 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="honshu_s.osm"   --read-xml file="honshu_ns.osm"   --sort --merge --write-xml file="honshu_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"

8個の場合は,

> 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"

で作成する。

出来たosmファイルをpbfファイルに変換しておく。

4個の場合は,

> osmconvert hokkaido_sea.osm -o=hokkaido_sea.pbf
> osmconvert honshu_sea.osm   -o=honshu_sea.pbf
> osmconvert shikoku_sea.osm  -o=shikoku_sea.pbf
> osmconvert kyushu_sea.osm   -o=kyushu_sea.pbf

8個の場合は,

> 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

で作成した。

やっと,陸地は<tag k="natural" v="nosea" />が,海の部分は<tag k="natural" v="sea" />がある地図データが作成できた。

Page Top

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

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

変換ツールには,osmosisMapsforge Map-Writer pluginを使っている。

osmosis/Mapsforge Map-Writer pluginで日本の地図を処理するには,かなり多くのメモリが必要になる。
使用するメモリの設定はosmosisのbin/osmosis.batで,

set JAVACMD_OPTIONS=-Xms5G -Xmx5G

と設定して,使用するNotePCが8GBのRAMが搭載されているので5Gにしてみた。
しかし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ファイルを作成した。

4個の場合は,

> 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="OpenStreetMap contributors %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="OpenStreetMap contributors %date% made by Yuji Ueno" type=hd
> 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="OpenStreetMap contributors %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="OpenStreetMap contributors %date% made by Yuji Ueno"

8個の場合は,

> 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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %date% made by Yuji Ueno"

でマージした。

とにかく時間がかかる。4分割の場合は全部マージすると大体27時間(現在のNote PCだと8時間,サーバーマシンで16時間)ぐらいかかった :-o

こうやって,北海道(hokkaido.osm.map),本州(honshu.osm.map),四国(shikoku.osm.map),九州(kyushu.osm.map)の4個セットか,北海道(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個セットの日本のベクター地図が出来た。

北海道(hokkaido.osm.map),本州(honshu.osm.map),四国(shikoku.osm.map),九州(kyushu.osm.map)の4個のベクター地図をLocus MapのmapsVectorフォルダーにコピーして,日本の地図をLocus Mapで使用することが出来た。
japan_map.pngjapan_map2.png

上記の作業をbatファイルにして,定期的に自動で日本のベクター地図を作成することにした。
作成されたMapsforge形式のベクター地図はバージョンV3となる。

Page Top

テーマthemeファイル anchor.png

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

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

上記で作成したLocus Map用の日本のベクター地図は,独自のtag mappingファイル(tags.xml)によりLoMapsより多くのオブジェクトを含んでいる。これらのオブジェクト(等高線を含む)が表示出来るように,file自分用のThemeファイル(V3用のテーマ)を作成して使用している。

Locus MapのmapsVector/_themesフォルダーにこのファイル(zipのまま)をコピーすれば使用できる。

Page Top

POIデータの作成 anchor.png

POI(Point of Interest)は地図上の特定のポイント情報のこと。

Mapsforgeライブラリには,OpenStreetMapのデータからPOIを抽出するためのPOI Writerプラグイン(バージョン0.6.1から対応した)がある。このプラグインを使うとOpenStreetMapの地図データから任意のものをPOIとして抽出して,Mapsforge形式のSQLite DBファイルに書き出すことが出来る。

POIとして抽出するOpenStreetMapのタグ要素としては,nodeとwayを対象にしていてrelationは省かれている。geo-tags=trueオプションを使うとrelationも対象になるはずだが,osmosisの処理途中でエラーで停止してしまった。
なのでrelationで設定されているところ(関西国際空港など)は,POIとして出力されない ;( OpenStreetMapを編集してrelationだけのオブジェクトには,nodeかwayでPOI情報を追加してもらうとありがたいのだが・・・

LoMapsのオフラインPOI DBではrelationも処理されているようだ。

POI DBファイルを作成するのには,mapファイル作成する時にも使ったosmosisMapsforge POI-Writer pluginを使っている。

抽出するPOIは,filepoi-mapping.xmlファイル(tagsディレクトリに置く)に設定しておく。デフォルトからいくつか追加している。

以下のようにしてosmosisコマンドで.poiファイルを作成した。

4個に分割する場合,

> cd poi
> osmosis --read-pbf file="..\jpmap\hokkaido.osm.pbf" --poi-writer file="hokkaido.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %date% made by Yuji Ueno"

8個に分割する場合は,

> cd poi
> osmosis --read-pbf file="..\jpmap\hokkaido.osm.pbf" --poi-writer file="hokkaido.osm.poi" tag-conf-file=..\tags\poi-mapping.xml comment="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %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="OpenStreetMap contributors %date% made by Yuji Ueno"

これで,北海道(hokkaido.osm.poi),本州(honshu.osm.poi),四国(shikoku.osm.poi),九州(kyushu.osm.poi),または北海道(hokkaido.osm.poi),東北(tohoku.osm.poi),関東(kanto.osm.poi),中部(chubu.osm.poi),近畿(kinki.osm.poi),中国(chugoku.osm.poi),四国(shikoku.osm.poi),九州(kyushu.osm.poi)のMapsforge形式のPOI DBファイルが作成できた。

Page Top

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

Locus Mapでは残念ながらMapsforge POI DBをオフラインPOI DBとしては使用できない。

MapsforgeライブラリでPOI DBがサポートされる前から,Locus MapではオフラインPOI機能を搭載するため独自にオフラインPOI DBを作成していた。なので独自フォーマットなのはしょうがない。
またこのLoMapsの一部であるオフラインPOI DBは,住所検索用のDBデータも入っているようだ。

LoMapsのオフラインPOI DBのフォーマット仕様は公開されていないのでLoMapsを購入しないとオフラインPOI DBを使用することは出来なかったが,独自にフォーマットを解析した人が仕様を公開してくれている ;)

また,Mapsforge POI DBをLocus Mapのoffline POI DBに変換するツールpoi_converterも公開されているので,このツールを使ってMapsforge POI DBからLocus Map用のオフラインPOI DBを作成してみた。*5 ただ住所検索用のデータは,残念ながら変換できないようだ。

このおかげかどうかはわからないがOpenAndroMapsでも,2020/07ぐらいからLocus Mapで使用できるオフラインPOI DB(住所検索DBは含まれていない)をサポートしている。

Locus MapのオフラインPOI DB構造を,fileinit.sqlファイル(configディレクトリに置く)で設定しておく。また,変換するPOIの選択は,filetagfilter.txtファイル(configディレクトリに置く)に設定しておく。これらのファイルは,自分用に多少追加・変更している。

4個の場合は,

> python poiconverter.py -if poi -om create hokkaido.osm.poi hokkaido.osm.db
> python poiconverter.py -if poi -om create honshu.osm.poi   honshu.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

8個の場合は,

> 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

とした。

北海道(hokkaido.osm.db),本州(honshu.osm.db),四国(shikoku.osm.db),九州(kyushu.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)のLocus Mapで使えるオフラインPOI DBファイルが作成できた。

北海道(hokkaido.osm.db),本州(honshu.osm.db),四国(shikoku.osm.db),九州(kyushu.osm.db)の4個のファイルをLocus MapのmapsVectorフォルダーにコピーするとオフラインPOI DBとして使用できた。

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ライブラリでの地図の標示は,非常に高速に処理されているのがわかる。

作成した日本のベクター地図(2023/07頃から10m等高線にした)はこちら Newに置いておく。

Page Top

使用したツール anchor.png

  • osmctools
    OpenStreetMapの数種類ある地図データ形式を相互に変換・データの追加・削除などが行えるコマンドラインツール。
  • osmosis
    OpenStreetMapの地図データ(PostgreSQLのDB)を,いろいろ処理するためのJavaコマンドラインアプリケーション。
    このツールは,プラグインを使って機能を拡張できるように設計されている。
  • phyghtmap
    NASA SRTMデータやGeoTIFFデータからOpenStreetMap用の等高線地図データ(.osmファイル)を作成するツール。
  • poi_converter
    Mapsforge POI DBファイルをLocus Map用offline POI DBファイルに変換するPythonで動作するコマンド。
  • QGIS
    地理空間情報データの閲覧,編集,分析なんかが出来るオープンソースで開発されている地理情報システム(GIS)ソフトウェア。
    Windowsマシンでは,QGISに含まれているgdalのogr2ogrコマンドが必要なのでインストールした。
    Linuxマシンでは,gdalをインストールすればogr2ogrコマンドが使用できる。
  • fileshape2osm.py(Python3用に修正した)
    Shapeフォーマットの外形データを,OpenStreetMapの.osmファイルに変換するツール。

*1 おそらく日本全体の場合は32GBのメモリを搭載したPCが必要。
*2 OpenStreetMapを編集する場合,現在では日本語名(英語/ローマ字)のような表記は推奨されなくなったそうです。
*3 現在ではSRTM1 Version3にも全世界のデータが含まれているようだ。
*4 phyghtmap version 2.0以降ではPython3.xが必要。また,version 2.10以降ではデータをダウンロードするサイトが変更になって,USGS' earthexplorerでアカウントが必要になった。事前にアカウントを作成して,phyghtmapの実行時に--earthexplorer-user=USER_ID --earthexplorer-password=PASSWORDを指定する。
*5 直接OpenstreetMapのpbfファイルから直接POIを抽出できるが,この場合はnodeのみの抽出となる。

Attach file:
filejapan_srtm.pbf 112DL [Info] filejapan_srtm10.pbf 115DL [Info] filetagfilter.txt 214DL [Info] filepoi-mapping.xml 140DL [Info] fileinit.sql 130DL [Info] fileyuji.zip 47DL [Info] filetags.xml 1002DL [Info] filehgt1v3_2022.zip 35DL [Info] filejapanlist.txt 207DL [Info] filehgt3v3_2022.zip 31DL [Info] filehgt2015.zip 32DL [Info] filejapan_s.osm 168DL [Info] fileshape2osm.py 1500DL [Info] filetohoku_s.osm 1138DL [Info] filekinki_s.osm 1034DL [Info] filekanto_s.osm 1209DL [Info] filechugoku_s.osm 1124DL [Info] filechubu_s.osm 1181DL [Info] filekyushu_s.osm 1150DL [Info] fileshikoku_s.osm 1150DL [Info] ... more 16 files. [ Show All ]

コメント一覧

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ
yuji  投稿日時 2023/6/21 7:22 | 最終変更
Locus Mapではいくつかの種類のオフラインベクター地図が使用できます。Locusで提供しているLoMapsは最近Mapsforge V4形式に変更されました。
この場合,テーマもLoMaps V4形式の物に変更する必要があります。Mapsforge形式の地図は,表示するときに使用するテーマに基づいてレンダリングされます。表示の色やどのアイコン表示するかなどが,テーマで設定されています。

通常デフォルトのテーマはLocus Mapを更新するとテーマも更新されます。

テーマを自分で編集することで色などは自由に変更できます。

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: 4997, today: 7, yesterday: 0
Last-modified: 2022-03-28 (Mon) 22:52:43 (JST) (921d) by yuji