QGIS Pythonコンソールを使用して、単純なレイヤークエリとpng出力を反復処理する方法を教えてください。


8

QGISコーディングは本当に初めてで、クエリビルダーウィンドウのアクションを実行するためのapiクラス/関数(特に)を見つけるのに苦労しています。

私は基本的にこれをやろうとしています:

  1. n = 1から200まで繰り返す...

  2. field_id = nであるlayerAのクエリ

  3. レイヤーBにクエリを実行し、field_id = n

  4. field_id = nであるlayerCのクエリ

  5. img_n.pngとして保存

かなりシンプルだと思いますが、GUIで手作業で行うのは本当に大変なことです。

回答:


4

さて、私は自分で、ようやく必要な主要な機能であるsetSubsetString()を見つけました。誰がこのものに名前を付けたのですか?...その機能に関しては非常に直感的ではありません。

これが私が今使っているスケルトンです:

qgis.utils.iface
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for n in range(1, 201)
    for layer in allLayers:
        layer.setSubsetString('field_id = ' + str(n))
    canvas.refresh()
    canvas.saveAsImage('img_' + str(n) + '.png')

canvas.refresh()

setSubStringフィルター、プロバイダーの構文を使用して、lyaer。使用しても問題ありませんが、使用しているレイヤータイプを変更すると構文が変わる可能性があることに注意してください。
Nathan W

人々が私よりもこのコードをより一般的に使用したい場合は、はい、彼らはレイヤーがタイプベクトル(QgsMapLayer :: LayerType)であることを確認し、おそらく途中でさらに確認する必要があります。
Kory Roberts 2013

3

APIドキュメントをご覧になることをお勧めします。

あなたの質問に戻って、あなたは以下を使って目次のすべての層を通して繰り返すことができます:

canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for i in allLayers:
   print i.name()
   #Do other stuff here.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.