我是python和QGIS的新手。我看过一些QGIS的python脚本教程。它们全都使用一些现有数据源创建新的矢量和栅格图层。例如。shapefile或geotiff或postgis数据库表。
是否可以通过python脚本创建QGIS层,我可以在需要时通过python脚本创建/添加/修改新功能。它通常是带有点数据和自定义符号的矢量层。
这有可能吗?有没有我可以看的例子?
我是python和QGIS的新手。我看过一些QGIS的python脚本教程。它们全都使用一些现有数据源创建新的矢量和栅格图层。例如。shapefile或geotiff或postgis数据库表。
是否可以通过python脚本创建QGIS层,我可以在需要时通过python脚本创建/添加/修改新功能。它通常是带有点数据和自定义符号的矢量层。
这有可能吗?有没有我可以看的例子?
Answers:
查看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()
setAttributeMap
不再是QgsFeature类的方法,因此该解决方案不适用于最新(2016年)的QGIS。
如果要在硬盘中保存新的矢量层(.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() )