QGISでプログラムによって新しい仮想レイヤーを作成しますか?


10

Pythonスクリプトを使用して仮想レイヤーを作成することは可能ですか?たとえば、「道路」というレイヤーがあり、sql "SELECT * FROM road WHERE type = 'Expressway'"を実行したいとします。

これは可能でしょうか?私が参照できる例はありますか?

回答:


8

次のようなものを使用できます。

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

vlayer = QgsVectorLayer( "?query=SELECT * FROM road WHERE type = 'Expressway'", "vlayer", "virtual" )
QgsMapLayerRegistry.instance().addMapLayer(vlayer)

著者のGitHubから、Pythonを介して仮想レイヤーを使用する方法の例を見つけることができます。

https://github.com/mhugo/qgis_vlayers/blob/master/README.md


1
Pythonコンソールでエラーが発生しました:'QgsMapLayerRegistry' is not defined。SQLステートメントは、「仮想レイヤーの作成」ダイアログで実行すると機能します。
eclipsed_by_the_moon 2017

1
'from qgis.core import ...'行を含めましたか?どのバージョンを使用していますか?
ndawson 2017

@eclipsed_by_the_moon-はい、その通りです。必要なインポートを含むように投稿を編集しました(編集のために不快なユーザーに感謝します)。
ジョセフ

1
@Josephあなたの答えで提供されたリンクをありがとう!
mgri

@CyT-大歓迎です!うまくいったことを嬉しく思います=)
ジョセフ

7

QGIS 3の場合は、代わりにQgsProjectを使用します。

from qgis.core import QgsVectorLayer, QgsProject
vlayer = QgsVectorLayer( "?query=SELECT * FROM road WHERE type = 'Expressway'", "vlayer", "virtual" )
QgsProject.instance().addMapLayer(vlayer)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.