|
現: 2023-07-31 (月) 14:47:09 yuji  |
| + | * poi_converter [#n75cfd7f] |
| + | [[poi_converter>https://github.com/lieblerj/poi_converter]]は,Mapsforge POI DBファイルをLocus Map用offline POI DBファイルに変換するPythonで動作するコマンドラインツール。~ |
| | | |
| + | poi_converterはPython3.xで動作するので,WindowsマシンでもLinuxマシンでも使える。~ |
| + | |
| + | ただ注意することとして,Python3のsqlite3は拡張エクステンションがロードできるようにビルドされている必要がある。~ |
| + | |
| + | * 使い方 [#x5f89fe5] |
| + | 以下のように使います。~ |
| + | > python poiconverter.py [-h] [-version] -if {pbf,poi} -om {create,append} input_file output_file |
| + | |input_file|入力するMapsforge POI DBまたはOpenStreetMapのpbfファイルのファイル名| |
| + | |output_file|出力するLocus Map用offline POI DBファイル名| |
| + | |-h, --help |ヘルプの表示| |
| + | |-version|バージョン表示| |
| + | |-if {pbf,poi}|入力ファイル形式の指定| |
| + | |-om {create,append}|出力モードの指定&br;create: 新規作成 append: POIの追加| |
| + | |
| + | * Windowsマシンにpoi_converterをインストールする [#u0ea6ac0] |
| + | Windowsマシンに,poi_converterが動作するようにインストールした。~ |
| + | |
| + | ** Pythonを標準インストーラーでインストールしている場合 [#d59505c0] |
| + | Python 3.9を[[公式のインストーラー>https://www.python.org/downloads/windows/]]でインストールしている環境に,[[poi_converter>https://github.com/lieblerj/poi_converter]]をインストールしてみた。~ |
| + | |
| + | Python 3がインストールされているかの確認。~ |
| + | > python --version |
| + | Python 3.9.13 |
| + | |
| + | > pip --version |
| + | pip 23.2.1 from C:\Python39\lib\site-packages\pip (python 3.9) |
| + | |
| + | Python 3.9.13がインストールされていた。~ |
| + | |
| + | *** sqlite3と変更とspatialiteのインストール [#oef298b0] |
| + | Python 3.9.13のDLLsディレクトリにインストールされている''sqlite3.dllは,拡張モジュールのロードに対応していないバージョン''になっている。~ |
| + | このため,困ったことにPythonモジュールの''spatialite''がうまく動作しない。~ |
| + | |
| + | 本来ならはPythonをソースコードからビルドしてインストールすればいいのだが,これはちょっと面倒なので他の方法を試した。~ |
| + | |
| + | *** SQLiteの入れ替え [#sc6fc303] |
| + | ここの[[SQLiteのダウンロードサイト>https://www.sqlite.org/download.html]]からWindows用のビルド済みバイナリをダウンロードする。~ |
| + | 64bit版: [[sqlite-dll-win64-x64-3420000.zip>https://www.sqlite.org/2023/sqlite-dll-win64-x64-3420000.zip]]~ |
| + | 32bit版: [[sqlite-dll-win32-x86-3420000.zip>https://www.sqlite.org/2023/sqlite-dll-win32-x86-3420000.zip]]~ |
| + | |
| + | Python 3.9.13がインストールされているディレクトリにDLLsディレクトリがあるので,そこにある''sqlite3.dll''ファイルを上記のダウンロードしたzipファイルを解凍したものに入れ替えて,''sqlite3.def''もコピーする。~ |
| + | |
| + | *** mod_spacialiteのインストール [#u9a70b20] |
| + | 空間データ処理のためのツールSpecialiteをインストールする。~ |
| + | |
| + | [[ここのページ>http://www.gaia-gis.it/gaia-sins/]]にあるMS Windows binariesのcurrent stable versionの64bitまたは32bitボタンをクリックして,以下のファイルをダウンロードする。~ |
| + | 64bit版: [[mod_spatialite-5.0.1-win-amd64.7z>http://www.gaia-gis.it/gaia-sins/windows-bin-amd64-prev/mod_spatialite-5.0.1-win-amd64.7z]]~ |
| + | 32bit版: [[mod_spatialite-5.0.1-win-x86.7z>http://www.gaia-gis.it/gaia-sins/windows-bin-x86-prev/mod_spatialite-5.0.1-win-x86.7z]]~ |
| + | |
| + | 64bit Windowsの場合は,mod_spatialite-5.0.1-win-amd64.7zを解凍して,任意のディレクトリ(例:C:\WinApl\spatialite)にコピーして,さらにシステム環境変数のPATHにディレクトリを追加する。~ |
| + | |
| + | *** pythonモジュールのインストール [#q29516e5] |
| + | その他必要なPythonのモジュールをインストールした。~ |
| + | |
| + | ''spatialite''モジュールをインストールした。~ |
| + | > pip install spatialite |
| + | spatialite==0.0.3がインストールされた。~ |
| + | |
| + | //''osmium''モジュールをインストールした。~ |
| + | // > pip install osmium |
| + | //osmium==3.6.0がインストールされた。 |
| + | ''osmium''モジュールは,whlファイル(&ref(osmium-3.2.0-cp39-cp39-win_amd64.whl);)でインストールした。 |
| + | > pip install osmium-3.2.0-cp39-cp39-win_amd64.whl |
| + | |
| + | ''tqdm''モジュールをインストールした。~ |
| + | > pip install tqdm |
| + | tqdm==4.63.1がインストールされた。~ |
| + | |
| + | *** poi_converterをインストール [#a4d03244] |
| + | [[poi_converter>https://github.com/lieblerj/poi_converter]]をインストールする。~ |
| + | > cd ~/mapdata/poi |
| + | > git clone https://github.com/lieblerj/poi_converter.git |
| + | |
| + | インストールの確認。~ |
| + | > python poiconverter.py -version |
| + | poiconverter.py 0.6.1 |
| + | |
| + | ** PythonをMSYS2/MinGW-w64でインストールしている場合 [#a469205b] |
| + | poi_converter自体は上記でインストールされている。~ |
| + | |
| + | poi_converterが動作する環境は以下のようにして整備する。~ |
| + | |
| + | Pythonモジュールをビルドする場合に,そのままではMSVCが使われてしまいMinGW-w64のgccは使われない。~ |
| + | これをMinGW-w64のgccをビルドやインストール時に使うように指示する必要がある。~ |
| + | |
| + | まず,Pythonがインストールされているディレクトリのlib/python3.10/distutilsディレクトリに,''distutils.cfg''ファイルを以下の内容で作成する。~ |
| + | # setup.cfg |
| + | #---------------------------------------------- |
| + | # This is a customized (global) distutils.cfg |
| + | # https://docs.python.org/3/install/index.html |
| + | #---------------------------------------------- |
| + | # other locations (windows): |
| + | # local setup.cfg |
| + | # system prefix\Lib\distutils\distutils.cfg |
| + | # personal %HOME%\pydistutils.cfg |
| + | #---------------------------------------------- |
| + | |
| + | [global] |
| + | verbose=1 |
| + | |
| + | [build] |
| + | compiler=mingw32 |
| + | force=1 |
| + | |
| + | [build_ext] |
| + | compiler=mingw32 |
| + | force=1 |
| + | |
| + | その上で,以下のいづれかで対応する。~ |
| + | - 環境変数SETUPTOOLS_USE_DISTUTILS=stdlibと設定すると,distutilsフラグが設定される。~ |
| + | こうすると,Pythonがインストールされているdisutilsディレクトリにあるdisutils.cfgを使用するようになる。~ |
| + | $ export SETUPTOOLS_USE_DISTUTILS=stdlib |
| + | - ユーザー側の設定ファイルを使用する~ |
| + | 通常のWindows Pythonの場合は,%USERPROFIL%\pydistutils.cfgになる。~ |
| + | LinuxやMSYS/MinGW-w64のPythonの場合は,~/.pydistutils.cfgファイルになる。~ |
| + | ただこの方法だと,MSYS2/MinGW-w64でないPythonを併用している場合は問題となるかもしれない。~ |
| + | - ./site-packages/_distutils/distutils.cfgをプロジェクトディレクトリにコピーして,ファイル名をsetup.cfgに変更する。~ |
| + | これはプロジェクト毎にディレクトリを作成してビルドする場合に便利だと思う。~ |
| + | - 任意のcfgファイルを,環境変数DIST_EXTRA_CONFIGで指定する。~ |
| + | $ export DIST_EXTRA_CONFIG=/mingw64/lib/python3.10/distutils/distutils.cfg |
| + | - たぶんコマンドで指定する方法でも指定できると思う。~ |
| + | $ python -m build -C--global-option=--no-user-cfg -C--global-option=--verbose -C--build-option="build --compiler=mingw32 --force" |
| + | |
| + | *** spatialiteモジュールのインストール [#be3f5e96] |
| + | ''spatialite''モジュールをインストールした。~ |
| + | > pip install spatialite |
| + | spatialite==0.0.3がインストールされた。~ |
| + | |
| + | *** pyosmiumのインストール [#r189f1ec] |
| + | pyosmiumはソースコードからwhlファイルをビルドして,その後pipでインストールした。~ |
| + | |
| + | pyosmiumのソースコードを取得する。~ |
| + | $ git clone https://github.com/osmcode/pyosmium.git |
| + | $ cd pyosmium |
| + | |
| + | setup.pyファイルを以下のように編集する。~ |
| + | 87行目あたりを, |
| + | cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, |
| + | '-DPYTHON_EXECUTABLE=' + sys.executable] |
| + | ↓ |
| + | cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, |
| + | '-DPYTHON_EXECUTABLE=D:\\MinGW64\\mingw64\\bin\\python.exe'] |
| + | 93-100行目をコメントする。~ |
| + | に変更した。 |
| + | |
| + | whlファイルをビルドする。~ |
| + | $ export "CPPFLAGS=-I/mingw64/include" |
| + | $ export "LDFLAGS=-L/mingw64/lib" |
| + | $ python -m build -w |
| + | : |
| + | : |
| + | Successfully built osmium-3.6.1-cp310-cp310-mingw_x86_64.whl |
| + | うまくwhlファイルが''dist/&ref(osmium-3.6.1-cp310-cp310-mingw_x86_64.whl);''が作成されれば,pyosmiumのビルドはうまくいっている。~ |
| + | |
| + | 作成したwhlファイルでpyosmium==3.6.1をインストールする。~ |
| + | $ cd dist |
| + | $ pip install osmium-3.6.1-cp310-cp310-mingw_x86_64.whl |
| + | |
| + | *** tqdmモジュールをインストール~ [#p682e7eb] |
| + | tqdmモジュールをインストールした。~ |
| + | > pip install tqdm |
| + | tqdm==4.65.0がインストールされた。~ |
| + | |
| + | * Linuxマシンにpoi_converterをインストールする [#e93047f1] |
| + | CentOS 7.9(2009)に,poi_converterが動作するようにPython3をインストールする。~ |
| + | |
| + | 注意することとして,Python3のsqlite3が拡張エクステンションがロードできるようにビルドされている必要がある。しかしCentOSのパッケージに拡張エクステンションがロードできるようなPython3パッケージが見つからなかった。~ |
| + | |
| + | ** Python3のインストール [#s73100a4] |
| + | CentOS7.9(2009)でPython 3.9.12をソースからビルドしてインストールした。~ |
| + | これは,拡張エクステンションモジュールがロードできるsqlite3を含むPython3が必要なため。~ |
| + | |
| + | Python 3.9.12のソースコードを取得して,ビルドしてインストールする。~ |
| + | $ mkdir python |
| + | $ wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz |
| + | $ tar xfz Python-3.9.12.tgz |
| + | $ cd Python-3.9.12 |
| + | $ ./configure --enable-loadable-sqlite-extensions |
| + | $ make |
| + | $ sudo make install |
| + | |
| + | インストール後,シンボリックリンクを張っておく。~ |
| + | $ sudo ln -s /usr/local/bin/python3.9 /usr/bin/python3 |
| + | $ sudo ln -s /usr/local/bin/pip3 /usr/bin/pip3 |
| + | |
| + | 動作を確認してみる。~ |
| + | $ python3 --version |
| + | Python 3.9.12 |
| + | |
| + | $ pip3 --version |
| + | pip 23.1.2 from /usr/local/lib/python3.9/site-packages/pip (python 3.9) |
| + | |
| + | これでPython 3.9.12がインストールできた。~ |
| + | |
| + | ** sqlite3のビルドとインストール [#mabbd35b] |
| + | sqlite3をビルドして,インストールする。~ |
| + | $ mkdir sqlite3 |
| + | $ wget https://www.sqlite.org/2022/sqlite-autoconf-3380200.tar.gz |
| + | $ tar xvfz sqlite-autoconf-3380200.tar.gz |
| + | $ cd sqlite-autoconf-3380200 |
| + | $ ./configure |
| + | $ make |
| + | $ sudo make install |
| + | |
| + | 確認してみる。~ |
| + | $ sqlite3 --version |
| + | 3.38.2 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f |
| + | |
| + | ** spatialiteのインストール [#i432bb46] |
| + | Pythonモジュールのspatialiteをインストールする。~ |
| + | |
| + | *** geosのビルドとインストール [#g4e54182] |
| + | $ cd geos |
| + | $ wget http://download.osgeo.org/geos/geos-3.9.4.tar.bz2 |
| + | $ tar xfj geos-3.9.4.tar.bz2 |
| + | $ cd geos-3.9.4 |
| + | $ ./configure |
| + | $ make |
| + | $ sudo make install |
| + | |
| + | *** libspatialiteのビルドとインストール [#k776c9da] |
| + | $ wget https://www.gaia-gis.it/gaia-sins/libspatialite-sources/libspatialite-4.3.0.tar.gz |
| + | $ tar xfa libspatialite-4.3.0.tar.gz |
| + | $ cd libspatialite-4.3.0 |
| + | $ ./configure |
| + | $ make |
| + | $ sudo make install |
| + | |
| + | *** spatialiteモジュールのインストール [#g53575db] |
| + | ''spatialite''モジュールをインストールする。~ |
| + | $ pip3 install spatialite |
| + | spatialite==0.0.3がインストールされた。 |
| + | |
| + | ** osmiumモジュールのインストール [#y9838698] |
| + | ''osmium''モジュールをインストールする。~ |
| + | $ pip3 install osmium==3.3.0 |
| + | |
| + | ** tqdmモジュールのインストール [#ad828fdb] |
| + | インストールされてなければ,''tqdm''モジュールをインストールしする。~ |
| + | $ pip3 install tqdm |
| + | tqdm==4.64.0がインストールされている。~ |
| + | |
| + | ** poi_converterをインストール [#a4d03244] |
| + | [[poi_converter>https://github.com/lieblerj/poi_converter]]をインストールする。~ |
| + | $ cd ~/mapdata/poi |
| + | $ git clone https://github.com/lieblerj/poi_converter.git |
| + | |
| + | インストールの確認。 |
| + | $ python poiconverter.py -version |
| + | poiconverter.py 0.6.1 |
| + | |
| + | * 設定ファイルの変更・追加 [#pda18614] |
| + | configディレクトリにあるLocus MapのオフラインPOI DBの構造定義ファイルのinit.sqlファイルを,&ref(../init.sql);ファイルに入れ替える。~ |
| + | |
| + | それと,同じconfigディレクトリにある変換するPOIを選択するための定義ファイルtagfilter.txtを,&ref(../tagfilter.txt);ファイルに入れ替える。~ |
| + | |
| + | これらのファイルは,自分用に多少追加・変更している。~ |