waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISのCSMapMaker Pluginを3.2対応にしたつもり

3.2対応にしました

やろうと思いつつ、半年以上手付かずだったのですが。
waigani.hatenablog.jp

QGISのCSMapMaker Pluginを3.2対応にしてみました。
github.com

動作確認はしておりますが、お手元のデータでお試しいただき、不具合ありましたらご報告いただけると助かります。

対応中に詰まった点

参考にした記事

まぁ色々つまりますよね。先人たちの用意してくれたものは有効に使いましょう。
全容を把握するには、下記の記事は参照しておきましょう。
QGIS API Documentation: Backwards Incompatible Changes
The road to QGIS 3.0 – part 1 – North Road

ここも助かりました。
Updating A Plugin From QGIS 2 to QGIS 3 | GIS for Thought

具体的に詰まった点

QgsMapLayerRegistryがない

QgsProjectに含まれるように変更されています。
https://gisforthought.com/updating-a-plugin-from-qgis-2-to-qgis-3/ でも触れられていますね。

QGIS2で、

QgsMapLayerRegistry.instance().addMapLayer(layer)

としていたのですが、QGIS3では、

QgsProject.instance().addMapLayer(layer)

とする必要があります。

self.iface.legendInterface()使えない?

レイヤの表示/非表示の切り替えの際に、QGIS2では、

self.iface.legendInterface().setLayerVisible(layer, False)

としていたのを、QGIS3では、

QgsProject.instance().layerTreeRoot().findLayer(layer).setItemVisibilityChecked(False)

としてみました。
ただこのの記述で正解なのか、よくわからず。どなたかもっと良いやりかた知りませんか?

QgsMapRendererがない

https://north-road.com/2016/07/25/the-road-to-qgis-3-0-part-1/ でもインパクト大きいよと言っていますね。
画像出力する際に、PyQGIS Developer CookbookのMap Rendering and Printingにも載っているのでQgsMapRenderer使っていたのですが、使えなくなっています。
QgsMapRendererJob と QgsMapSettingsを使いましょう。結構前のバージョンからこの方法あったのですね、知らなかったです。
ここは、この書き方がスマートというのを一度整理したいところです。

QGIS 3対応でお困りのことありませんか?

株式会社MIERUNEでは、QGIS3対応プラグインの作成を承っております。

また、QGIS講習会、QGIS導入コンサルタントについても対応可能ですので、お気軽にお声がけください。