Як створити новий порожній векторний шар програмно?


21

Я новачок у python та QGIS. Я переглянув кілька підручників сценаріїв python для QGIS. Усі вони створюють нові векторні та растрові шари з наявним джерелом даних. напр. shapefile або таблиця баз даних геотифів або постгістів.

Чи можливо створити рівень QGIS через скрипт python, де я можу створювати / додавати / змінювати нові функції через скрипт python, якщо виникає потреба. Це, як правило, векторний шар з точковими даними та спеціальними символами.

Чи буде це можливо? Чи є приклад, на який я можу подивитися?

Відповіді:


19

Погляньте на постачальника пам'яті, як описано в кулінарній книзі PyQGIS .

Постачальник пам'яті призначений для використання в основному плагінами або сторонніми розробниками додатків. Він не зберігає дані на диску, що дозволяє розробникам використовувати їх як швидкий сервер для деяких тимчасових шарів.

# 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: ім'я" QVariant "не визначено" Я залишив частину "addAttributes" і мені вдалося поставити крапку на карті, тому вона працює, дякую. Я використовую Ubuntu 12.04 та QGIS 1.8.0-Lisboa Але що може спричинити вищезгадану помилку?
Theuns Heydenrych

1
Здається, setAttributeMapце вже не метод класів QgsFeature, тому це рішення не працює для останнього (його 2016 року) QGIS.
Спайдермен

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
Але це створює порожній .shpfile.Якщо я хочу зберегти існуючий файл форми до вказаного шляху, як це зробити?
user99
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.