1.モチベーション
基本的にインターネット接続ができず、インターネット接続できる端末は物理的に他の端末と切り離されている、というセキュリティ意識が(異常に)高い環境の人に、ニッチなメリットがあると思って書いています。
とりあえずここにコード類はおきました。
2.趣旨
Pythonで地図を使うとき、インタラクティブな操作(google mapライクな地図操作)を実現する一番メジャーな方法はFoliumパッケージだと思います。しかし、残念ながらFoliumはオンライン環境を前提に作られており、動かすたびにオンライン上のリソース(jsonファイルやcssファイル)を参照しに行くようになっているので、完全オフライン環境だと全然動きません😢
もちろん、単に「オフラインで地図を使いたい!」というだけの場合、Pythonにこだわりがなければ、QGISを使って一旦オンライン環境で必要な地図レイヤーを全部ダウンロードしておいて、そのデータをそのままオフライン環境でも使う、というのが一番手っ取り早い方法だと思います。しかしここでは、あくまでWebアプリみたいなものを作るために、「PythonでFoliumパッケージを使いたい...しかもオフラインで...」というかなりニッチなニーズに向けて方法を解説してみたいと思います。
実は同じ発想で作られた(と思われる)コード↓がgithubにあるのですが、少なくとも私の環境ではうまく動きませんでした。なんか古いし、メンテナンスもされてなさそうです。
コード解説
単純化すると、以下2ステップに集約されます。
- ①Foliumパッケージが参照しにいっているオンライン上のリソース(Jsonファイル、CSSファイル)をすべてローカルにDLしてきて、foliumパッケージを改変してそのローカルファイルを毎回参照するように改造する
- ②地図レイヤーは、QGISを使ってOpen Street MapのXYZタイルを必要な倍率のものだけ全部画像としてダウンロードしてローカルに持ってしまう*
※ 私の作った上記githubのリポジトリには、既にOpen Street Mapの2種類の地図の一定の倍率のデータを画像データとして格納してあるので、これを流用すればQGISを使った地図タイルのDL作業は不要。
(詳しい説明を今後加筆予定)