Programlı olarak yeni bir boş vektör katmanı nasıl oluşturulur?


21

Python ve QGIS'te yeniyim. QGIS için python komut dosyalarının birkaç eğitimine baktım. Hepsi mevcut veri kaynaklarıyla yeni vektör ve raster katmanları oluşturur. Örneğin. şekil dosyası veya geotiff veya postgis veritabanı tablosu.

Bir python betiği ile bir QGIS katmanı oluşturmak mümkün mü, burada python betiği aracılığıyla yeni özellikler oluşturabilir / ekleyebilir / değiştirebilirim. Genellikle nokta verileri ve özel simgeler içeren bir vektör katmanı olacaktır.

Bu mümkün olacak mı? Bakabileceğim bir örnek var mı?

Yanıtlar:


19

Bellek sağlayıcısına PyQGIS Yemek Tarifleri'nde açıklandığı gibi bir göz atın .

Bellek sağlayıcısı esas olarak eklenti veya 3. taraf uygulama geliştiricileri tarafından kullanılmak üzere tasarlanmıştır. Verileri diskte depolamaz, geliştiricilerin bazı geçici katmanlar için hızlı bir arka uç olarak kullanmasına izin verir.

# 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()

Cevabınız için teşekkür ederim, kesinlikle yardımcı oldu. Ancak komut dosyasını kullanırken aşağıdaki hatayı alıyorum. "NameError: 'QVariant' adı tanımlanmadı" "addAttributes" bölümünü dışarıda bıraktım ve haritaya bir nokta koymayı başardım, bu yüzden işe yarıyor, teşekkürler. Ubuntu 12.04 ve QGIS 1.8.0-Lisboa kullanıyorum Ama yukarıda belirtilen hataya ne sebep olabilir?
Theuns Heydenrych

1
O görünüyor setAttributeMapbu çözüm En son (onun 2016) QGIS için çalışma yapmaz, bu yüzden artık QgsFeature sınıfların bir yöntemdir.
Spacedman

4

Sabit Diskinize yeni bir vektör katmanı (.shp) kaydetmek istiyorsanız, QgsVectorFileWriter () kullanmanız gerekir . Birkaç parametre alır, en basit yol kullandığınız projeden parametreleri kullanmaktır. Bu siteye bir göz atın .

   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
Ancak bu, boş .shpfile dosyasını oluşturuyor. Varolan şekil dosyasını belirtilen yola kaydetmek isterseniz, bunu nasıl yapabilirim?
user99
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.