2022/03/20

【Python】foliumで複数の地図タイルを切り替えて表示する方法

以前、「【Python】foliumで地質図を表示する方法」という記事を書きましたが、実用していく上で、地図タイルを切り替えられると便利だなと思い当たりました。

本記事では、複数の地図タイルを切り替えて表示する方法を紹介します。

以前の記事で紹介した地理院地図のタイルとシームレス地質図のタイルを例として、地図タイルの切り替えを行います。

出力結果


関連記事

2022/03/15

【Python】pptx形式のPowerPointファイルからテキストデータを抽出する

PowerPointファイルからテキストデータを抽出することで、テキストマイニングや文書ファイルの検索といった応用が可能になります。
本記事では、pptx形式のPowerPointファイルからテキストデータを抽出するPythonスクリプトについて、三種類の手法を比較して紹介します。

python-pptxを使用する


python powerpoint テキスト 抽出」などで検索してよくヒットするのが、「python-pptx」を使用する方法です。
python-pptxは、pptx形式のPowerPointファイルを操作できるpythonライブラリで、Pythonによるスライド作成の自動化などの記事をよく見かけますが、作成だけでなく読み取りも可能です。
注意点として、読み取り・書き込みパスワードや権限が設定されている場合は利用出来ないという問題があります。また、「x」のついていない方の.ppt形式のPowerPointファイルは開けないので、何らかの方法で.pptxに変換する必要があります。

例1:

Pythonの標準ライブラリを使用する


Office 2007 以降で保存可能になった.docx, .xlsx, .pptx といった拡張子のOfficeファイルは、XMLファイルなどをzip圧縮したものです。したがって、「re」や「zipfile」、「xml.etree.ElementTree」といった標準ライブラリだけを用いて読み取ることができます。
python-pptxを使用する場合と同様に、読み取り・書き込みパスワードや権限が設定されている場合はzipが解凍できないため利用出来ないという問題があります。また、.ppt形式の場合も、zipファイルではないので開けません。
ライブラリを追加したくない場合などはこの手法が使えると思います。

例2:
参考:

pywin32(win32com)を使用する


Windows環境で実行するという条件がつきますが、この方法であればパスワードや権限が設定されているPowerPointファイルからもテキストが取り出せます。win32comとかPyWin32とかPython for Windows extensionsとか呼ばれているライブラリを用いる方法です。
VBAで操作することに慣れている場合は、細かいところまで手が届くので良いかと思います。この方法だと、PowerPointのアプリケーションを経由して情報が抽出されるので、PowerPointアプリにアカウント設定がされていれば、権限設定のある.pptx形式のみならず、.ppt形式のPowerPointファイルの場合も操作可能です。
問題として、WindowsPowerPointアプリのインストール・設定が必要となるので、環境構築の手間がかかります。

例3:
参考:

win32comを使用することで、.pptファイルを.pptxファイルやpdfに変換することもできるので、上記の手法などと組み合わせて使うというのも一つの手かもしれません。

ここまで紹介した例では、「ノート」の中身のテキスト抽出について触れていませんでしたが、やり方を紹介されている方を見つけたのでリンクを掲載させていただきます。


関連記事:

2021/09/14

【Python】matplotlibでDEMデータを表示する

国土地理院の基盤地図情報(数値標高モデル)などのDEMデータをその他のデータと組み合わせてmatplotlibでプロットしたい時に使えそうなプログラムが出来たので公開します。
例で使用したDEMデータは、国土地理院からダウンロードしたデータを予め結合したGeoTIFFを使用しています。
また、GeoTIFFの読み込みには、GDALを使用しています。

DEMデータの結合方法やGDALの導入については、色々なサイトで公開されているので、検索してください。本記事では、割愛します。
matplotlibでの標高塗り分けが本記事の中心部分となります。matplotlibのterrainでの塗り分けで満足出来ない場合にご活用いただければ幸いです。


スクリプト例


出力例


matplotlibのカラーマップに好みのものがなかったので、ArcGISっぽい?カラーマップを外部サイトから読み込んで使用しています。
カラーマップのファイルは、ローカルから直接読み込んで使用した方が良いと思いますので、上記のコードを利用される際はファイルをダウンロードして、コードを書き換えてください。


関連記事

2021/08/06

【Python】複数画像をPDFに変換する方法の比較

以前も、複数画像をPDFに変換する方法に関して、img2pdfの紹介記事を書いたのですが、img2pdfやそれ以外の手法での実行時間やファイルサイズなどを比較してみました。

本記事では、img2pdfを用いてpdfにする方法と、reportlabとPillowを組み合わせる方法、Pillowのみを使う方法の三種類を比較した結果を紹介します。

実行時間は、実行環境などで変わるため、あくまで目安です。計測に関しても、Jupyter Lab上で、実行した結果であり、複数回測って平均をとるというような厳密なことはしておりません。

実行環境は、以下の通りです。

MacBook Pro 13-inch (2017)
------
Python 3.8.11
img2pdf 0.4.1
reportlab 3.3.0
Pillow 8.1.0

下記のスクリプトは、いずれも書籍をスキャンしたpngファイル(連番ファイル名)を、pdfに変換することを想定しています。

Method1 : img2pdfを使う

Method2 : reportlabとPillowを組み合わせる

Method3 : Pillowだけを使う


10個の異なるpng画像ファイル群での実行時間と出力ファイルサイズの比較は、以下の通りです。


img2pdfを用いた方法は、実行時間(変換にかかる時間)が特に短いです。 出力されたpdfファイルサイズは、pngファイルの合計サイズよりとほぼ同じサイズになっており、pngファイルを複雑に処理していないことが伺われます。 img2pdfに関して、残念なのはアルファチャンネルのある透過pngに対応していない点です。事前に処理しておいてね、という仕様となっています。


reportlabとPillowを組み合わせる方法ですが、実行時間が特に長く、画像のみのpdfを作るのであれば、reportlabを組み合わせる必要はないかなと感じました。


Pillowだけを用いる方法は、入力ファイルによって結果がばらついていますが、基本的にはファイルサイズが圧縮されています。リサンプリングしているため実行時間が伸びますが、この方法では、qualityの値を調整することでファイルサイズをさらに圧縮することも可能なので、ファイルサイズを調整したい時には良い方法だと思います。
ただし、img2pdfのように、見開きの設定など複雑なことはできないようなので、割り切って使うか他のツールと組み合わせる必要があります。


追記:2022/12/09
PyMuPDFを使って、変換する方法が分かったので追加しました。実行速度などは測っていません。

Method4 : PyMuPDFを使う

参考:

Method5 : borbを使う

borbを使って変換することも出来ましたが、v2.1.7では画像をPDFにする際に自動でOCR処理をするようで変換処理が遅いです。OCR処理をスキップ指定できる方法が分かれば更新します。基本的には余白が自動で入る設計で、このような変換は想定していないと思われます。
続き

2021/05/10

【Python】foliumで地質図を表示する方法

 先日「【Python】foliumで活断層を表示する方法」という記事を書いたばかりですが、今回もfoliumネタです。

foliumは、LeafletというJavaScriptライブラリをPythonから使える様にしたものですので、地図タイルとして様々な地図が利用できます。有名どころでは、国土地理院の地理院地図の地理院タイルなどがあります。そのほかにも、foliumにビルドインされている地図もあります(参考)。


本記事では、日本シームレス地質図を地図タイルとして使う際のサンプルコードを掲載します。

出力参考:


地理院地図を使う際のサンプルコードも併せて掲載します。

出力参考:


地理院タイルでは、ズームレベルの制限などもありますが、英語版や土地利用図、火山基本図、衛星画像など様々なタイルが公開されています。

利用にあたっては、承認などが必要な場合もある様ですのでご注意下さい。

参考:「国土地理院の地図の利用手続

関連記事