foliumを用いた地図表示を即時行う
foliumというモジュールで地図表示が簡単にできるが、一旦htmlファイルに出力してからブラウザ表示する必要があってやや使いづらかった(Jupyterを使えばよいみたいだが)のでtempfileとwebbrowserモジュールを使って即時ブラウザ表示するプログラムを作成してみた。
作成したfmapクラスのshow()を呼ぶとブラウザで表示される。2秒待ちを入れているのは、プログラム終了と同時にデストラクタが呼ばれて、表示される前に作成したhtmlファイルが削除されてしまうことを防ぐため。
ココがこのプログラムのメインの処理。NamedTemporaryFileでdelete=Falseとしておかないと、ファイルへの書き込み完了&ファイルセーブ後、ブラウザ表示前にファイル削除されてしまう。あとはsaveしたファイルをwebbrowser.openでブラウザ表示している。
NamedTemporaryFileでdelete=Falseとしてしまったので、デストラクタでファイル削除している。もう少し良い方法がないものかと思って色々工夫したがこれに落ち着いた。
ソース
import folium import tempfile import webbrowser class fmap(folium.Map): def __init__(self, **kw): super().__init__(**kw) self.listtf = list() def show(self): tf = tempfile.NamedTemporaryFile(suffix='.html', delete=False) map_osm.save(tf) webbrowser.open(tf.name) self.listtf.append(tf) def __del__(self): list(map(lambda tf: os.remove(tf.name), self.listtf)) map_osm = fmap(location=[45.5236, -122.675]) map_osm.show() time.sleep(2)
実行結果
補足説明
そもそもfoliumとは何かというのはこちらのページを見るのが早い。
こちらにもサンプルコードがある。
作成したfmapクラスのshow()を呼ぶとブラウザで表示される。2秒待ちを入れているのは、プログラム終了と同時にデストラクタが呼ばれて、表示される前に作成したhtmlファイルが削除されてしまうことを防ぐため。
map_osm = fmap(location=[45.5236, -122.675]) map_osm.show() time.sleep(2)
def show(self): tf = tempfile.NamedTemporaryFile(suffix='.html', delete=False) map_osm.save(tf) webbrowser.open(tf.name) self.listtf.append(tf)
def __del__(self): list(map(lambda tf: os.remove(tf.name), self.listtf))
コメント
コメントを投稿