新しい空のベクターレイヤーをプログラムで作成する方法


21

私はpythonとQGISが初めてです。QGISのPythonスクリプトのチュートリアルをいくつか見てきました。それらはすべて、既存のデータソースで新しいベクターレイヤーとラスターレイヤーを作成します。例えば。shapefileまたはgeotiffまたはpostgisデータベーステーブル。

必要に応じて、Pythonスクリプトを使用してQGISレイヤーを作成することはできますか。Pythonスクリプトを使用して、新しい機能を作成/追加/変更できます。通常、ポイントデータとカスタムシンボルを含むベクターレイヤーになります。

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

回答:


19

PyQGIS Cookbookで説明されているメモリプロバイダーご覧ください

メモリプロバイダーは、主にプラグインまたはサードパーティのアプリ開発者が使用することを目的としています。ディスクにデータを保存しないため、開発者は一時的なレイヤーの高速バックエンドとして使用できます。

# To avoid 'QVariant' is not defined error
from PyQt4.QtCore import *

# create layer
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()

# Enter editing mode
vl.startEditing()

# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
                QgsField("age",  QVariant.Int),
                QgsField("size", QVariant.Double) ] )

# add a feature
fet = QgsFeature()
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(10,10)) )
fet.setAttributeMap( { 0 : QVariant("Johny"),
                   1 : QVariant(20),
                   2 : QVariant(0.3) } )
pr.addFeatures( [ fet ] )

# Commit changes
vl.commitChanges()

返信ありがとうございます。確かに役に立ちました。ただし、スクリプトを使用すると、次のエラーが発生します。「NameError:name 'QVariant' is not defined」「addAttributes」の部分を省略し、地図上にドットを配置することができたので、機能します。ありがとうございます。Ubuntu 12.04とQGIS 1.8.0-Lisboaを使用していますが、上記のエラーの原因は何ですか?
Theuns Heydenrych

1
それはそうありませんsetAttributeMap。このソリューションは、最新(その2016)QGISのための作業をしないように、もはやQgsFeatureクラスのメソッドです。
Spacedman 16

4

ハードディスクに新しいベクターレイヤー(.shp)を保存する場合は、QgsVectorFileWriter()を使用する必要があります。いくつかのパラメーターが必要です。最も簡単な方法は、使用しているプロジェクトのパラメーターを使用することです。このサイトをご覧ください。

   cLayer = qgis.utils.iface.mapCanvas().currentLayer()
   provider = cLayer.dataProvider()
   writer = QgsVectorFileWriter( "output_path_and_name.shp", provider.encoding(), provider.fields(),QGis.WKBPolygon, provider.crs() )

1
しかし、これは空の.shpファイルを作成しています。既存のシェープファイルを指定されたパスに保存する場合はどうすればよいですか?
user99
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.