Bagaimana cara membuat layer vektor kosong baru secara terprogram?

21

Saya baru mengenal python dan QGIS. Saya telah melihat beberapa tutorial skrip python untuk QGIS. Semuanya membuat vektor dan layer raster baru dengan beberapa sumber data yang ada. misalnya. tabel database shapefile atau geotiff atau postgis.

Apakah mungkin untuk membuat layer QGIS melalui skrip python, di mana saya dapat membuat / menambah / memodifikasi fitur-fitur baru melalui skrip python, sesuai kebutuhan. Biasanya akan berupa layer vektor dengan data titik dan simbol khusus.

Apakah ini mungkin? Apakah ada contoh yang bisa saya lihat?

Theuns Heydenrych
sumber

Jawaban:

19

Lihatlah penyedia Memori seperti yang dijelaskan dalam PyQGIS Cookbook .

Penyedia memori dimaksudkan untuk digunakan terutama oleh plugin atau pengembang aplikasi pihak ketiga. Itu tidak menyimpan data pada disk, memungkinkan pengembang untuk menggunakannya sebagai backend cepat untuk beberapa lapisan sementara.

# 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()
underdark
sumber
Terima kasih atas jawabannya, itu pasti membantu. Namun ketika menggunakan skrip saya mendapatkan kesalahan berikut. "NameError: name 'QVariant' tidak didefinisikan" Saya meninggalkan bagian "addAttributes" dan berhasil meletakkan sebuah titik di peta, jadi itu berhasil, terima kasih. Saya menggunakan Ubuntu 12.04 dan QGIS 1.8.0-Lisboa Tapi apa yang bisa menyebabkan kesalahan yang disebutkan di atas?
Theuns Heydenrych
1
Tampaknya itu setAttributeMapbukan lagi metode kelas QgsFeature, jadi solusi ini tidak berfungsi untuk QGIS terbaru (2016).
Spacedman
4

Jika Anda ingin menyimpan layer vektor baru (.shp) di Hard Disk Anda, Anda harus menggunakan QgsVectorFileWriter () . Dibutuhkan beberapa parameter, cara paling sederhana adalah dengan menggunakan parameter dari proyek yang Anda gunakan. Lihat situs ini .

   cLayer = qgis.utils.iface.mapCanvas().currentLayer()
   provider = cLayer.dataProvider()
   writer = QgsVectorFileWriter( "output_path_and_name.shp", provider.encoding(), provider.fields(),QGis.WKBPolygon, provider.crs() )
GM
sumber
1
Tapi ini menciptakan .shpfile.Jika saya ingin menyimpan shapefile yang ada ke jalur yang ditentukan bagaimana saya bisa melakukan itu?
user99