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を使いましょう。結構前のバージョンからこの方法あったのですね、知らなかったです。
ここは、この書き方がスマートというのを一度整理したいところです。