オフライン地図アプリMaps.me用地図データ生成のための環境を構築してみました。普通はアプリ内でダウンロード出来る地図だけで問題ないと思うのですが、どうしても自分でカスタマイズしたい内容が出てきたのです。この環境があればオリジナル地図をMaps.meで使うことが出来ます。
何故にわざわざ地図を作るか?
ご存知の通り、Maps.meではすでに世界中の地図データが無料で提供されています。内容も定期的に更新されているので普通は自作する必要などありません。しかし、現時点(2018/04/29)では等高線が無いので山登りにはちょっと不便だったり、iPhone4などの古い端末で動作するバージョンだと何年か前の地図データしか無かったりします。地図データが自作出来ればそれも解決出来る、ハズ。ということで、やってみることにしました。
環境について
PC環境
まず、VMWarePlayerを使って仮想PC上にUbuntuをインストールしました。ここに地図生成に必要なツール類等の環境一式を構築していきます。ゲストPCのOSはUbuntu 16.10です(たまたまあった環境を再利用しました。多分18.04でもいけると思います)。
ホストPC
- OS:Windows10(64bit)
- CPU:Intel Core i5-4670(3.4GHz)
- メモリ:16GByte
- 仮想PC:VMware(R) Workstation 12 Player 12.5.9 build-7535481
ゲストPC
- OS:Ubuntu 16.10(64bit)
- CPU:4core
- メモリ:8Gbyte
- HDD:1TByte
作業ディレクトリ
本記事では以下ディレクトリで作業をする前提で記載しています。環境に応じて読み替えてください。
- 作業用ディレクトリ:/media/kiri/data
- mapmeプロジェクト:/media/kiri/data/git/mapsme
- OSM地図データ:/media/kiri/data/pbf/planet-latest.o5mもしくはjapan.o5m
- 海岸線データ:/media/kiri/data/pbf/WorldCoasts.geom
- 地図ファイルの出力先ディレクトリ:target
Maps.me地図作成のための環境構築
環境構築には以下のドキュメントにある手順を参考にしました。バージョンアップに伴って内容が変わっているかもしれないので、最新の情報はリンク先を確認してください。
- GitHub - mapsme/omim/INSTALL.md - Building MAPS.ME
https://github.com/mapsme/omim/blob/master/docs/INSTALL.md
(Step.1)必要なパッケージをインストール
Ubuntuのインストールが終わったら必要なパッケージ類をインストールします。
$ sudo apt-get install git cmake # Qt5 $ sudo apt-get install qt5-default qtcreator #clang 3.8 $ sudo apt-get install clang libc++-dev libboost-iostreams-dev libglu1-mesa-dev $ sudo apt-get install libtbb2 libluabind0.9.1v5 liblua50 libstxxl1v5 libtbb-dev libluabind-dev libstxxl-dev libosmpbf-dev libprotobuf-dev libboost-thread-dev libboost-system-dev libboost-program-options-dev libboost-filesystem-dev libboost-date-time-dev sudo apt-get install sqlite3 libsqlite3-dev
python-probufも必要ですが、Ubuntu 16.04ではpython-probufのバージョンが古くて動かないのでpipでインストールします(Ubuntu18.04はapt-getでいけると思います)。
<pre># Ubuntu 16.04 $ pip install protobuf # Ubuntu 18.04 $sudo apt-get install python-protobuf</pre>
念のため、protobufのバージョンを確認。
$ pip show protobuf --- Metadata-Version: 2.0 Name: protobuf Version: 3.5.2.post1 Summary: Protocol Buffers Home-page: https://developers.google.com/protocol-buffers/ Author: protobuf@googlegroups.com Author-email: protobuf@googlegroups.com Installer: pip License: 3-Clause BSD License Location: /home/kiri/.local/lib/python2.7/site-packages Requires: setuptools, six Classifiers: Programming Language :: Python Programming Language :: Python :: 2 Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 Programming Language :: Python :: 3.3 Programming Language :: Python :: 3.4 $ python -c "import google.protobuf; print google.protobuf.__version__" 3.5.2.post1
Ubuntu 16.04環境でapt-getからいれると古いバージョンがインストールされて動きませんでした。以下のように古いバージョンが入っている場合はapt purgeでアンインストールしてから新しいものをインストールしてください。
$ pip show protobuf --- Metadata-Version: 1.0 Name: protobuf Version: 2.6.1 Summary: Protocol Buffers Home-page: https://developers.google.com/protocol-buffers/ Author: protobuf@googlegroups.com Author-email: protobuf@googlegroups.com License: New BSD License Location: /usr/lib/python2.7/dist-packages Requires: Classifiers:
(Step.2)Qt5のインストール
Qtはapt-getからでもインストール出来ますが、Ubuntu16.04環境では地図スタイルの生成ツールに必要なQtのモジュールが入っておらずビルドエラーが発生します。そのためQt公式サイトからダウンロードしてインストールしました。Ubuntu 18.04で構築する場合はapt-getでいけるかもしれませんので、この項はひとまず飛ばしください。もしQt関連のビルドエラーが出た場合にはあらためてこの項のようにQt5をインストールすればよいと思います。
まず、Qt公式サイトからOpenSource版をダウンロードします。実行するとインストーラが起動するので指示に従ってください。
- Qt - Download Qt
https://www.qt.io/download
$ chmod +x qt-unified-linux-x64-3.0.4-online.run $ sudo ./qt-unified-linux-x64-3.0.4-online.run
- インストール先:/opt/Qt
次にqtchooserにインストールしたパスを設定します。
$ cd /usr/lib/x86_64-linux-gnu/qtchooser $ sudo ln -s /opt/Qt/qt5.10.1.conf . $ qtchooser -l 4 5 default qt4-x86_64-linux-gnu qt4 qt5-x86_64-linux-gnu qt5.10.1 qt5 $ qtchooser -print-envQT_SELECT="qt5.10.1" QTTOOLDIR="/opt/Qt/5.10.1/gcc_64/bin" QTLIBDIR="/opt/Qt/5.10.1/gcc_64/lib"
環境変数を設定します。これは地図生成ツールのビルドに必要でした。
$ export QT_SELECT=qt5.10.1 $ export QT_PATH=/opt/Qt $ export PATH=$PATH:$QT_PATH/5.10.1/gcc_64/bin $ export LD_LIBRARY_PATH=$QT_PATH/5.10.1/gcc_64/lib $ qmake -query QT_VERSION 5.10.1
(Step.3)maps.meプロジェクトを取得
地図作成ツールを含むmaps.meプロジェクトをgithubから取得します。
$ mkdir -p git/mapsme $ cd git/mapsme $ git clone https://github.com/mapsme/omim.git $ cd omim $ git submodule init $ git submodule update
普通は最新のソースコードで問題ないと思いますが、もし古いバージョンのmaps.me向けに地図を作りたい場合はそのバージョン時点の地図生成ツールが必要です。
基本的にmaps.meはアプリケーション本体のバージョンに適合した地図フォーマットでないと読み込めません(アプリのアップデート配信直後に地図アップデート通知が来るのはこのため)。無理に読み込もうとするとアプリケーションが例外を投げて落ちます。
#例えば"release-64"ブランチを取得する場合 $ git checkout release-64 $ git submodule init $ git submodule update
(Step.4)地図生成ツールのビルド
取得したプロジェクトをビルドします。ビルドした内容は以下のパスに格納されますが、地図生成にはスクリプトが用意されているのでビルドしたプログラム(generator_tool等)を直接操作することは無いと思います。
- git/mapsme/omim/omim-release-build/
$ cd git/mapsme/omim $ echo | ./configure.sh $ tools/unix/build_omim.sh -r
カスタム地図の作成
地図作成に使用するスクリプトについて
Maps.meプロジェクトには、必要な手順を一括で実行してくれるスクリプトが以下のディレクトリに用意されています。
- omim/tools/unix
このなかで使うのは次の3つかと思います。
- build_omim.sh : プロジェクトのビルド用スクリプト。プロジェクトをcheckoutしたらまずはコレを実行します。
- generate_planet.sh : Maps.me用地図(*.mwm)作成スクリプト。パラメータを与えれば最初から最後まで自動でやってくれます。
- generate_symbols.sh : 地図スタイル作成スクリプト。地図の見た目をカスタマイズしたり新しい要素(等高線など)を地図に追加する場合に使います。
スクリプトの詳細については以下のドキュメントが参考になります。
- GitHub - mapsme/omim/docs/MAPS.md - MWM Files
https://github.com/mapsme/omim/blob/master/docs/MAPS.md
"generate_planet.sh"の使い方
地図を自作するにあたって必要な処理は"generate_planet.sh"がほとんどやってくれます。やることはオプションと環境変数でパラメータを渡すことだけです。詳しい使い方はパラメータを与えずにスクリプトを実行すると表示される使い方を参照してください(バージョンによってはオプションスイッチが若干違います)。
#現時点(2018/04/28)のバージョンです $ omim/tools/unix/generate_planet.sh Usage: ./generate_planet.sh [-c] [-u] [-l] [-w] [-r] -u Update planet until coastline is not broken -U Download planet when it is missing -l Generate coastlines -w Generate a world file -r Generate routing files -o Generate online routing files -a Equivalent to -ulwr -p Generate only countries, no world and no routing -c Clean last pass results if there was an error, and start anew -v Print all commands executed -h This help message If there is unfinished job, continues it, ignoring all arguments (use -p if in doubt). Use -c to clean temporary data and build everything from scratch. Useful environment variables: PLANET Planet file to use TARGET Where to put resulting files REGIONS Newline-separated list of border polygons to use. Example usage: REGIONS=$(ls ../../data/A*.poly) ./generate_planet.sh NS Node storage; use "map" when you have less than 64 GB of memory ASYNC_PBF Generate PBF files asynchronously, not in a separate step MODE A mode to start with: coast, inter, routing, test, etc. MAIL E-mail address to send notifications OSRM_URL URL of the osrm server to build world roads. SRTM_PATH Path to 27k zip files with SRTM data. OLD_INTDIR Path to an intermediate_data directory with older files.
よく使うであろう環境変数は次の通りです。
環境変数 | 説明 | 例 |
PLANET | OSM地図へのパス。指定された地図が無い場合はOSMから自動ダウンロードされます。 | PLANET=~/planet-latest.o5m |
TARGET | mwmファイルの出力先。中間生成物もここにおかれます。 | TARGET=~/target |
REGIONS | polyファイルのパス。ここで指定したpolyファイル毎にmwmファイルが出力されます(omim/data/boardersに世界中のpolyファイルがあります)。 | 東京都の地図だけ出力したい場合
REGIONS=~/git/omim/data/borders/Japan_Kanto_Tokyo.poly |
NS | 処理中にノードキャッシュを何処に保持するかを指定します。指定出来るのは以下3種類です。
|
NS=raw |
SRTM_PATH | SRTM1(NASA EARTHDATAが公開しているデジタル標高モデル)が格納されているパスを指定します。
必須ではないですが、このオプションを指定しておくと道路のノードに標高が追加され、Maps.meで徒歩/自転車のルーティングをした時にルートの高低差が表示されるようになります。 |
SRTM_PATH=./hgt/
(最後の"/"まで入力しないとエラーになります) |
環境変数をいちいち指定するのが面倒な場合は以下のようなスクリプトを作っておくと便利です。
#!/bin/bash SCRIPT_PATH="$(dirname "$0")" export REGIONS="$(ls $SCRIPT_PATH/../../data/borders/Japan*.poly)" export PLANET="/media/kiri/data/pbf/planet-latest.o5m" export COASTS="/media/kiri/data/pbf/WorldCoasts.geom" export TARGET="${TARGET:-$SCRIPT_PATH/target}" export SRTM_PATH="/media/kiri/data/SRTM/" export NS=raw #export NS=map #export NS=mem bash "$SCRIPT_PATH/generate_planet.sh" $@
このファイルを"omim/tools/unix"に配置して以下のように実行します。TARGETが未指定の場合はスクリプトのあるディレクトリにtargetが作成されます。
$ omim/tools/unix/test.sh -l
"generate_styles.sh"の使い方
Maps.meアプリで各要素(道、川、POI、etc...)をどのように描画するか指定するスタイルファイルを生成します。前項のgenerate_planet.shがスタイルを参照するので先に実行する必要がありますが、特にスタイルを変更しないのであれば不要です。
スクリプトに引数はなく単純に実行するだけで処理が進みます。また、初回実行時のみツール(skin_generator_tool)のビルドが行われます。
$ omim/tools/unix/generate_styles.sh
スタイルはMapCSSで記述されています。以下のディレクトリに定義があるので、スタイルを変更する場合はこちらを編集してからスクリプトを実行します。他に"styles/vehicle"以下にもスタイル定義がありますが、こちらは現時点(2018/4/28)では使用されていないようです。
- omim/data/styles/clear/style-clear (通常スタイル)
- omim/data/styles/clear/style-night(夜間表示スタイル)
MapCSSについては以下のドキュメントが参考になります。
- OpenStreetMap Wiki - MapCSS/0.2
https://wiki.openstreetmap.org/wiki/MapCSS/0.2
このスクリプトを実行すると"omim/data"以下にファイルが生成されます。表示スタイルに関係するファイル/ディレクトリとして以下のものがあります。スタイルを変更した場合、これらをMaps.meのstylesディレクトリ(無い場合は作成する)に転送すると反映されます。
- omim/data/resources-*-clear/
- omim/data/resources-*-dark/
- omim/data/drules_proto_clear.bin
- omim/data/drules_proto_dark.bin
地図に新しい要素を追加した場合は以下のファイルも更新されます。こちらは重要で、必ず地図と対応したファイルを読み込ませる必要があります。Android端末では少し面倒でOBBファイルを作成して読み込ませるか、apkをばらして置き換えるかします。iOSは実際に試せていませんが、ソースコードを見た感じだとテキストファイルをそのままMaps.meのディレクトリに配置すれば読み込むようです。この辺りは別記事で詳しく書きたいと思います。
- omim/data/classificator.txt
- omim/data/types.txt
- omim/data/colors.txt
全世界の地図を生成する場合
maps.meプロジェクトに用意されているスクリプトを実行すると、地図データのダウンロードからmaps.me用地図ファイル(*.mwm)生成まで一括して行ってくれます。ただ、相当な時間(メモリ/HDD容量も)を必要とします。私の環境では実行したもののいつまで経っても終わる気配が無いので断念しました。
$ cd git/omim/tools/unix/ $ ./generate_planet.sh -a
地域を絞って生成する場合
ここでは日本に絞って地図を生成します。地図のカスタマイズで試行錯誤する場合はさらに絞ってどこかの都道府県のみにすると時間短縮出来ます。
"WorldCoasts.geom"の生成
まず海岸線データ"WorldCoasts.geom"を生成します。これにはOSMのデータが世界丸ごと(約60GByte)で、初回実行時にはダウンロードに時間がかかります。OSM地図はパラメータを指定しなければユーザディレクトリ(~/)にダウンロードされます。
$ NS=raw TARGET=/media/kiri/data/target omim/tools/unix/generate_planet.sh -Ul [2018/04/28 15:12:20]: STATUS Start Using tool: /media/kiri/data/git/suke-blog/omim/../omim-build-release/generator_tool [2018/04/28 15:12:35]: STATUS Step 2: Creating and processing new coastline in ./target/intermediate_data/coasts/coastlines-latest.o5m LOG TID(1) INFO 425.514 generator/osm_source.cpp:470 Finish() Generating coastline polygons [2018/04/28 23:07:03]: WARNING: OSRM_URL variable is not set. World roads will not be calculated. [2018/04/28 23:07:03]: STATUS Step 3: Generating intermediate data for all MWMs [2018/04/29 01:20:26]: STATUS Step 4: Generating features of everything into ./target ...
コンソールの進行状況を見て、"Step 4"まで進んでいれば"target/intermediate_data/"に"WorldCoats.geom"が出来ているはずです。確認してファイルが存在していればスクリプトを中断してかまいません。このファイルは後ほど使用するので何処か別な場所に退避させておきます。
$ ll target/intermediate_data/*.geom -rw-rw-r-- 1 kiri kiri 155915741 Apr 28 23:07 target/intermediate_data/WorldCoasts.geom # backup WorldCoasts.geom $ cp target/intermediate_data/WorldCoasts.geom /media/kiri/data/pbf
ちなみに、"Step 4"の途中で止めた場合でディスク消費量は約81GByteでした。"WorldCoasts.geom"を退避させたらtarget以下は削除して問題ありません。
$ du -bhc ./target 4.0K ./target/intermediate_data/coasts/tmp 2.2G ./target/intermediate_data/coasts 564K ./target/intermediate_data/tmp 81G ./target/intermediate_data 27K ./target/logs 335K ./target/borders 81G ./target 81G total
世界地図から必要な地域を切り出す
OSMの地図データ"planet-latest.o5m"から必要となる部分だけを切り出します。こうすると処理時間を大幅に短縮することが出来ます。ここでは日本に絞って切り出したいと思います。次のようにコマンドを実行してください。
$ osmconvert planet-latest.o5m -B=japan.poly -o=japan.o5m
ここで指定している"japan.poly"は以下のサイトのものを使用しました。日本全体を切り出す場合にはこれを使うのが一番簡単だと思います。
あるいは、Geofabricのサイトから切り出し済みの日本地図データ(japan-latest.pbf)を取得するのもありです。
- Geofabric - Download OpenStreetMap data for this region:Japan
http://download.geofabrik.de/asia/japan.html
もっと細かい単位で切り出したい場合は、maps.meプロジェクトに都道府県毎のpolyファイルがあるのでそれを使うとよいと思います(ファイル名に半角スペースが含まれているのでご注意)。
$ ls omim/data/borders/Japan*.poly Japan_Chubu Region_Aichi_Nagoya.poly Japan_Kanto_Tokyo.poly Japan_Chubu Region_Aichi_Toyohashi.poly Japan_Kinki Region_Mie.poly Japan_Chubu Region_Fukui.poly Japan_Kinki Region_Nara.poly Japan_Chubu Region_Gifu.poly Japan_Kinki Region_Osaka_Osaka.poly Japan_Chubu Region_Ishikawa.poly Japan_Kinki Region_Osaka_West.poly Japan_Chubu Region_Nagano.poly Japan_Kinki Region_Wakayama.poly Japan_Chubu Region_Niigata.poly Japan_Kyushu Region_Fukuoka.poly Japan_Chubu Region_Shizuoka.poly Japan_Kyushu Region_Kagoshima.poly Japan_Chubu Region_Toyama.poly Japan_Kyushu Region_Kumamoto.poly Japan_Chubu Region_Yamanashi.poly Japan_Kyushu Region_Miyazaki.poly Japan_Chugoku Region_Hiroshima.poly Japan_Kyushu Region_Nagasaki.poly Japan_Chugoku Region_Okayama.poly Japan_Kyushu Region_Oita.poly Japan_Chugoku Region_Shimane.poly Japan_Kyushu Region_Okinawa.poly Japan_Chugoku Region_Tottori.poly Japan_Kyushu Region_Saga.poly Japan_Chugoku Region_Yamaguchi.poly Japan_Shikoku Region_Ehime.poly Japan_Hokkaido Region_East.poly Japan_Shikoku Region_Kagawa.poly Japan_Hokkaido Region_North.poly Japan_Shikoku Region_Kochi.poly Japan_Hokkaido Region_Sapporo.poly Japan_Shikoku Region_Kyoto.poly Japan_Hokkaido Region_West.poly Japan_Shikoku Region_Tokushima.poly Japan_Kanto_Chiba.poly Japan_Tohoku_Akita.poly Japan_Kanto_Gunma.poly Japan_Tohoku_Aomori.poly Japan_Kanto_Ibaraki.poly Japan_Tohoku_Fukushima.poly Japan_Kanto_Kanagawa.poly Japan_Tohoku_Iwate.poly Japan_Kanto_Saitama.poly Japan_Tohoku_Miyagi.poly Japan_Kanto_Tochigi.poly Japan_Tohoku_Yamagata.poly
(option)SRTM_PATHを指定する場合
SRTM_PATHを指定するとルート上のざっくりとした高低差が表示されるようになります。車では関係ありませんが、山歩きや自転車ツーリングの際には便利です。
まずSRTM1のデータが手元に無い方は入手してください。ブラウザからでもダウンロード出来ますがphyghtmapを使って一括ダウンロードするのが簡単かと思います。phyghtmapは最新のバージョンを使用してください(2018/05/08時点で2.10が最新)。古いバージョンだとSRTMのダウンロードURLが変更になっていたりでうまく動きません。また、SRTMのダウンロードには"NASA Earthdata"のユーザ登録が必要です。
- phyghtmap
http://katze.tfiu.de/projects/phyghtmap/ - NASA EARTHDATA LOGIN
https://urs.earthdata.nasa.gov/home
以下のようにしてSRTM1のデータをダウンロードします。今回は"--polygon"オプションでダウンロード範囲を日本に絞りました(無指定だと世界中のデータがダウンロードされます)。EARTHDATAのログインID(YOUR_USER_ID)とパスワード(YOUR_PASSWORD)は各自のものに置き換えてください。
$ mkdir SRTM $ cd ./SRTM $ phyghtmap --srtm=1 --download-only --polygon=japan.poly --earthexplorer-user=YOUR_USER_ID --earthexplorer-password=YOUR_PASSWORD
次にダウンロードしたデータ(*.hgt)をzip圧縮します。二度手間ですが、こうしておかないとMaps.meのツールが読み込んでくれません。
$ cd ./hgt # zip圧縮 $ find ./ -name \*.hgt -exec zip ./{}.zip {} \; # 拡張子を変更 $ rename "s/hgt.zip/SRTMGL1.hgt.zip/;" *.hgt.zip
map.me地図ファイル(*.mwm)生成
以下のようにスクリプトを実行します。環境変数で切り出した地図や海岸線のデータを指定しているので作業環境に応じて変更してください。mwmファイルはREGIONSに指定したpolyファイル毎に作成されます。
# generate_planetを直接実行する $ SRTM_PATH=./hgt/ TARGET=/media/kiri/data/target REGIONS=(ls /media/kiri/data/git/mapsme/omim/data/borders/Japan*.poly) COASTS=/meida/kiri/data/pbf/WorldCoasts.geom PLANET=/media/kiri/data/pbf/japan.o5m NS=raw omim/tools/unix/generate_planet.sh -r # あるいはテストスクリプトの環境変数を変更して実行する $ omim/tools/unix/test.sh -r
この処理はそこそこ長丁場になります。私の環境では一晩といったところでしょうか。メモリが潤沢にある環境(10GByteくらい?)であれば、環境変数NS=mapとすることで作業時間が短縮出来ると思います。メモリが少ないとスワップが大量発生して逆に遅くなるのでNS=rawとした方が速くなります。
また、地域を日本に絞ると最後のテストでエラーが発生しますがこれで正常です(テストプログラムが国外の道路を指定していて、当然ながらそこが無くのでエラーとなる)。
スマートフォン上で表示を確認する
地図(*.mwm)が出来たら、そのファイルをスマートフォンに転送して既存の地図ファイルを上書きしてやります。必要であればスタイルファイル等も置き換えます。
地図の格納先はmaps.meの"設定"->"地図の保存先"を確認してください。
所感
Garmin用地図に続いてMaps.me用地図自作に挑戦です。今回の記事では現時点(2018/04)での最新版アプリに対応した地図データが出来上がりました。ここからどんな地図を作るかというと、取り合えず以下のふたつをやってみたいと考えています。
- iPhone4で動く古いバージョンのMaps.me向け地図
- 山登りで使えそうな等高線付き地図
今回のネタは、我が家で眠っているiPhone4をスーパーカブ専用GPSナビにしようと目論んだのが始まりです。実はMaps.meならいつでも最新地図が入手できると思い込んでいたのですが、なんと本体バージョンに依存することが発覚。どおりでiPhone4(アプリのバージョンが古い)で見ると地図が古いままなわけです。ならば自作しかない、となったわけです。
正直なところマイナーなネタだとは思いますが、もし興味がありましたら次回以降に紹介する等高線付き地図の自作記事もお付き合い頂ければと思います(試行錯誤でしたが等高線付き地図については目星がつきました)。それでは。
参考
この記事は以下の内容を参考にさせて頂きました。
- エンジニア的な事を何かしらアウトプットしておくブログ - Qt5.9.3をUbuntu16.04にインストール
http://kconcon3.hatenablog.com/entry/2017/12/01/190933 - Qt Forum - [SOLVED] Qt のバージョン確認について
https://forum.qt.io/topic/39615/solved-qt-%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%A2%BA%E8%AA%8D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 - GitHub - mapsme/omim/INSTALL.md - Building MAPS.ME
https://github.com/mapsme/omim/blob/master/docs/INSTALL.md - GitHub - mapsme/omim/docs/MAPS.md - MWM Files
https://github.com/mapsme/omim/blob/master/docs/MAPS.md - GitHub - mapsme/omim - Build error in std::bind #1222
https://github.com/mapsme/omim/issues/1222 - OpenStreetMap Wiki - MapCSS/0.2
https://wiki.openstreetmap.org/wiki/MapCSS/0.2