如何以编程方式创建新的空矢量层?


21

我是python和QGIS的新手。我看过一些QGIS的python脚本教程。它们全都使用一些现有数据源创建新的矢量和栅格图层。例如。shapefile或geotiff或postgis数据库表。

是否可以通过python脚本创建QGIS层,我可以在需要时通过python脚本创建/添加/修改新功能。它通常是带有点数据和自定义符号的矢量层。

这有可能吗?有没有我可以看的例子?

Answers:


19

查看PyQGIS Cookbook中描述的Memory provider

内存提供程序主要供插件或第三方应用程序开发人员使用。它不将数据存储在磁盘上,允许开发人员将其用作某些临时层的快速后端。

# 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。
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
但这是创建一个空的.shpfile。如果我想将现有的shapefile保存到指定路径,该怎么办?
user99
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.