Pythonコマンドを介してプロジェクトCRSを設定することは可能ですか?


10

Pythonコマンドを使用して、QGISでプロジェクトのプロジェクトCRSを設定することはできますか?

私の場合、ユーザーはQGISを開き、作成したプラグインを起動すると、このプラグインがepsgコード31467(Gauss Krueger Zone 3)を持つ空間データをロードします。残念ながら、QGISのデフォルトのCRSはWGS84なので、単位とスケールで問題が発生します。

私の最初のアプローチはこのコードを使用することでした:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

この変更により(データが既に視覚化された後)、CRSがGauss Krueger Zone 3に変更されます。少なくとも、右下隅のespgコードが変更されました。単位はまだ度数であり、スケールは完全に間違っています。GaussKrügerでの1:5000はWGS 84で1:528822376です(私の場合はQGIS)。プロパティでプロジェクトCRSを手動で設定した後、プロジェクトcrsは実際にはGK3であり、スケールと単位は正しいです。

だから私の質問は、プロジェクトCRSを私が行った方法とは別の方法で設定できますか?手動の方法は避けたい。


次のコードを追加して問題を解決しました:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

これにより、単位がメートルに設定され、スケールが自動的に更新されます。0はメートル、1は足、2は度、3は不明を表します。

回答:


7

はい、可能です。SourcepoleのOpenlayersプラグインは、CRSをEPSG:3857に自動的に設定します。

openlayers_layers.pyとopenlayers_plugin.pyをご覧ください。


8

少し遅れて回答しましたが、プラグインをインストールせずに誰かがgoogleからそのページに移動した場合、http://www.purplelinux.co.nzがその良い情報を提供します。

purplelinuxで見つかった例(正常に動作しています)は、次のことを示唆しています。

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


また、次のように呼び出してCRSを作成することもできます。

QgsCoordinateReferenceSystem("PROPERTY:ID")

それは:

QgsCoordinateReferenceSystem("EPSG:31467")

これにより、IMHOはコードをより読みやすくします。


1
コードはQGIS 2.X用であり、QGIS3コード用にここにリストされている他の回答が表示されることに注意してください
Mr Purple

4

これを使って:

QgsProject.instance().setCrs(my_crs)

1
QGIS3で動作しますmy_crs=QgsCoordinateReferenceSystem(4326)::)
axel_ande
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.