poi_converterは,Mapsforge POI DBファイルをLocus Map用offline POI DBファイルに変換するPythonで動作するコマンドラインツール。
poi_converterはPython3.xで動作するので,WindowsマシンでもLinuxマシンでも使える。
ただ注意することとして,Python3のsqlite3は拡張エクステンションがロードできるようにビルドされている必要がある。
以下のように使います。
> 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} | 出力モードの指定 create: 新規作成 append: POIの追加 |
Windowsマシンに,poi_converterが動作するようにインストールした。
Python 3.9を公式のインストーラーでインストールしている環境に,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がインストールされていた。
Python 3.9.13のDLLsディレクトリにインストールされているsqlite3.dllは,拡張モジュールのロードに対応していないバージョンになっている。
このため,困ったことにPythonモジュールのspatialiteがうまく動作しない。
本来ならはPythonをソースコードからビルドしてインストールすればいいのだが,これはちょっと面倒なので他の方法を試した。
ここのSQLiteのダウンロードサイトからWindows用のビルド済みバイナリをダウンロードする。
64bit版: sqlite-dll-win64-x64-3420000.zip
32bit版: sqlite-dll-win32-x86-3420000.zip
Python 3.9.13がインストールされているディレクトリにDLLsディレクトリがあるので,そこにあるsqlite3.dllファイルを上記のダウンロードしたzipファイルを解凍したものに入れ替えて,sqlite3.defもコピーする。
空間データ処理のためのツールSpecialiteをインストールする。
ここのページにあるMS Windows binariesのcurrent stable versionの64bitまたは32bitボタンをクリックして,以下のファイルをダウンロードする。
64bit版: mod_spatialite-5.0.1-win-amd64.7z
32bit版: mod_spatialite-5.0.1-win-x86.7z
64bit Windowsの場合は,mod_spatialite-5.0.1-win-amd64.7zを解凍して,任意のディレクトリ(例:C:\WinApl\spatialite)にコピーして,さらにシステム環境変数のPATHにディレクトリを追加する。
その他必要なPythonのモジュールをインストールした。
spatialiteモジュールをインストールした。
> pip install spatialite
spatialite==0.0.3がインストールされた。
osmiumモジュールは,whlファイル(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をインストールする。
> cd ~/mapdata/poi > git clone https://github.com/lieblerj/poi_converter.git
インストールの確認。
> python poiconverter.py -version poiconverter.py 0.6.1
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
その上で,以下のいづれかで対応する。
$ export SETUPTOOLS_USE_DISTUTILS=stdlib
$ 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モジュールをインストールした。
> pip install spatialite
spatialite==0.0.3がインストールされた。
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/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
CentOS 7.9(2009)に,poi_converterが動作するようにPython3をインストールする。
注意することとして,Python3のsqlite3が拡張エクステンションがロードできるようにビルドされている必要がある。しかしCentOSのパッケージに拡張エクステンションがロードできるようなPython3パッケージが見つからなかった。
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をビルドして,インストールする。
$ 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
Pythonモジュールのspatialiteをインストールする。
$ 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
poi_converterをインストールする。
$ cd ~/mapdata/poi $ git clone https://github.com/lieblerj/poi_converter.git
インストールの確認。
$ python poiconverter.py -version poiconverter.py 0.6.1
configディレクトリにあるLocus MapのオフラインPOI DBの構造定義ファイルのinit.sqlファイルを,init.sqlファイルに入れ替える。
それと,同じconfigディレクトリにある変換するPOIを選択するための定義ファイルtagfilter.txtを,tagfilter.txtファイルに入れ替える。
これらのファイルは,自分用に多少追加・変更している。
新しくコメントをつける