Questions tagged «pyqgis»

QGIS的Python绑定。

2
在QGIS中将线转换为多边形会生成条形多边形
在尝试使用以下方法在PyQGIS中将折线图层多边形化时 processing.runandload("qgis:linestopolygons",explode_path,polygon_path) python控制台中的命令,它不会创建与线边缘相对应的多边形。相反,它沿弯曲的边缘创建了条形多边形。为什么不沿线边缘创建多边形? 在多边形化时,黑线应该是创建的多边形的边缘。而是沿着弯曲的边缘(蓝色多边形)仅创建了几个条。

2
使用QGIS Modeler将处理结果保存到文件中吗?
我想从模型中将处理结果保存到文件中。在我的模型中,我有一些Extract by location算法(带有两个矢量输入)可以产生合理的结果,但只能作为临时层,我必须Save as...手动进行,这对于大量的分析来说既麻烦又费时。 最好,我想传递一个路径到我的模型,在这里我的结果保存为shapefile(第一步)。 这就是模型。请注意,输出向量(文件)无法连接到任何处理结果: 从屏幕快照a)中可以看出,即使在Save selected features算法b)中,我们也可以传递最终结果的名称,而不是文件。 一个) b) 我有一个模糊的想法,如何使用python脚本实现此目标,但是可以结合使用现有工具吗?

1
在pyqgis中注册自定义qgsfunction
我在独立应用程序中使用pyqgis。现在,我想创建一个自定义表达式,以根据的规则用作filterExpression ruleBasedRendererV2。(我之前尝试过使用现有功能的渲染器,并且一切正常!) 自定义qgisfunction(按位AND功能-由于尚无此功能)如下所示: from qgis.utils import qgsfunction @qgsfunction(args="auto", group='Python') def bitwise_and(value1, value2, feature, parent): return value1 & value2 我也尝试通过以下方式进行注册: from qgis.core import QgsExpression QgsExpression.registerFunction(bitwise_and) 通过以下方式测试表达式: expressionString = 'bitwise_and(2, 2) = 2' exp = QgsExpression(expressionString) if exp.hasParserError(): print(exp.parserErrorString()) (2=2始终给予True)在注册功能后有效,否则失败。但是,我仍然不能在规则内使用表达式... 现在,包含该功能的文件位于我的项目文件夹的顶部,该文件夹自动包含在PATH中,对吗?(根据Nathan Woodrow的说法,文件可以放在PATH中的任何位置-请参阅https://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/)。 更新:到目前为止,函数的注册可以通过上面的代码进行-现在问题出在函数本身上。 更新#2: 很奇怪!do_nothing获得两个参数的简单函数在我的代码中运行良好: @qgsfunction(args="auto", group='Python') def do_nothing(value1, value2, feature, parent): …

3
使用QGIS以编程方式查找与另一个矢量多边形图层重叠> 90%的多边形?
我试图弄清楚如何使用python提取一个向量中与另一个向量重叠> 90%的多边形。然后,我想要一个仅显示这些多边形的矢量/地图。示例图片显示了我的图层。我希望所有> 90%红色的灰色多边形。 我需要通过python(或类似的自动化方法)来完成所有操作。我有约1000张地图以相同的方式处理。
9 qgis  python  pyqgis 

2
使用内存层作为Runalg的输入和/或输出?
可以将存储层用作runalg的输入和/或输出吗? 使用runandload可以使它工作: processing.runandload("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\dissolved.shp") 参数2和3是输入层,它们已经在内存中,参数3是输出层,它被写入内存并在以下工具(Dissolve)中使用。这可以正常工作,但是当我尝试对runalg使用相同的逻辑时,似乎未创建我在内存中的合并层,因为Dissolve工具从不运行。例如,以下内容将不起作用: processing.runalg("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\datenschrott\dissolved.shp") 我可以假设runalg要么不接受内存中的图层,要么不输出任何图层?

1
自动化QGIS项目编辑器打印?
我有一个大型项目,包含大约10个QGIS项目文件。每个项目都包含一个打印作曲家,该作曲家设置了可生成多达10张地图的地图集。 使用作曲者地图集自动打开每个项目并创建PDF的最简单方法是什么? (像这样的东西是理想的-不确定是否可能) C:\ OSGeo4W \ bin \ qgis.bat-项目MyProject1.qgs-代码SaveAtlasAsPdf.py C:\ OSGeo4W \ bin \ qgis.bat-项目MyProject2.qgs-代码SaveAtlasAsPdf.py

1
从QGIS Python插件添加PostGIS层
我尝试开发一个插件,以从插件中向qgis添加postgis层,作为学习python的一部分。 如果我从qgis中的python控制台运行它,则用于添加postgis图层的代码可以从食谱中获取,并且可以正常工作(如果在对话框result == 1中按了OK按钮,则应该将我的图层添加到qgis中)。 但是,如果我从插件运行它,则会引发消息NameError:未定义名称'QgsDataSourceURI'。为什么从插件运行该错误? 我如何从插件/函数内部添加图层与从Python控制台添加图层有区别吗? def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result == 1: # Do something useful here - delete the line containing …


3
在PyQGIS中循环执行空间查询
我所试图做的事:循环通过一个点shapefile,然后选择属于每个点为一个多边形。 以下代码受我在一本书中发现的空间查询示例的启发: mitte_path = r"D:\PythonTesting\SelectByLocation\mitte.shp" punkte_path = r"D:\PythonTesting\SelectByLocation\punkte.shp" polygon = QgsVectorLayer(mitte_path, 'Mitte', 'ogr') points = QgsVectorLayer(punkte_path, 'Berlin Punkte', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(polygon) QgsMapLayerRegistry.instance().addMapLayer(points) polyFeatures = polygon.getFeatures() pointsCount = 0 for poly_feat in polyFeatures: polyGeom = poly_feat.geometry() pointFeatures = points.getFeatures(QgsFeatureRequest().setFilterRect(polyGeom.boundingBox())) for point_feat in pointFeatures: points.select(point_feat.id()) pointsCount += 1 print 'Total:',pointsCount 这有效,并且确实选择了数据集,但是问题在于它是通过bounding box选择的,因此显然返回的点我不感兴趣: 如何不使用qgis:selectbylocation仅返回多边形内的点? …

2
使用virtualenv Python启动QGIS吗?
有什么方法可以告诉QGIS使用不同于默认的系统范围的Python安装?例如,使用一些virtualenv Python /myvirtualenv/bin/python代替/usr/bin/python? 背景:我正在开发一个自定义插件,该插件使用的某些模块仅安装在特定的virtualenv中,而不安装在系统范围内。 允许virtualenv访问系统范围的软件包,因此使用该virtualenv时仍应可访问qgis核心库。 我现在看到的唯一解决方案是在系统范围的Python中安装所需的模块。但是,如果可能的话,我只想将它们保留在virtualenv中。

1
QGIS项目中可以有动态图层名称吗?
我有一个基于层的QGIS项目,该层基于使用当前日期的PostGIS SQL查询。由于数据库中的数据发生更改,因此这些查询每天都会返回不同的数据。 是否可以在图层树面板中动态更改图层的名称,使其代表当前日期?(即层名称,例如Traffic on 24.01.2015,每天都会更改)。字幕数据应取自图层中任何要素的属性-它们都具有相同的field值traffic_date。

4
如何有效访问QgsSpatialIndex返回的功能?
该PyQGIS食谱介绍如何设置空间索引,但只说明了它的用法的一半: 创建空间索引—以下代码创建一个空索引 index = QgsSpatialIndex() 向索引添加功能-索引接受QgsFeature对象,并将其添加到内部数据结构中。您可以手动创建对象,也可以使用上一个调用提供程序的nextFeature()的对象。 index.insertFeature(feat) 一旦空间索引中填充了一些值,就可以进行一些查询 # returns array of feature IDs of five nearest features nearest = index.nearestNeighbor(QgsPoint(25.4, 12.7), 5) 获取属于返回的特征ID的实际特征的最有效步骤是什么?

3
使用python和QGIS将文件夹循环以按多边形批处理剪辑栅格吗?
我正在使用python和QGIS 2.0。我正在尝试通过一个面要素来裁剪文件夹中的栅格。这是我第一次使用(例如)“ PyQGIS”,以前我习惯使用arcpy。无论如何,我没有让我的简单脚本起作用,任何建议将不胜感激! import qgis.core, qgis,utils QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True) QgsApplication.initQgis() CLIP= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp" INPUT_FOLDER="C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00" OUTPUT= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/foscagno_pyqgis/" for RASTER in INPUT_FOLDER.tif do echo "Processing $RASTER" gdalwarp -q -cutline CLIP -crop_to_cutline -of GTiff RASTER OUTPUT+ "clip_"+ RASTER done QgsApplication.exitQgis() 以下是我从现在开始所做的改进,虽然没有使脚本起作用,但是我想我可能会越来越近... import qgis.core, qgis.utils, os, fnmatch from osgeo import gdal CLIP= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp" INPUT_FOLDER= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00/DNs2Reflectance_LE71930282000259EDC00" OUTPUT= …
9 gdal  pyqgis  gdalwarp 

3
如何在独立脚本中使用Map Composer?
我正在尝试遵循pyqgis食谱中的地图渲染部分,但是我想将其作为独立的应用程序进行测试。我可以使用简单的渲染来完成第一部分,但使用地图编辑器作为独立脚本来完成第二个示例时,我会有些卡住。 这是我可以做的一个独立示例: from qgis.core import * from qgis.gui import * from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtXml import * QgsApplication.setPrefixPath("/usr/", True) QgsApplication.initQgis() fh = open("eg.csv","w") fh.write(""" x,y,name 153.0278, -27.4679, Brisbane 144.2500, -23.4500, Longreach 145.7753, -16.9256, Cairns """) fh.close() uri = "eg.csv?delimiter=%s&xField=%s&yField=%s" % (",", "x", "y") layer = …
9 qgis  python  pyqgis 

1
通过Python插件在QGIS中编辑属性的速度
我正在尝试使用QGIS Python插件编辑图层中每个要素的属性值。我发现在编辑模式之外执行此操作比在编辑时(甚至包括提交编辑)要慢得多。请参见下面的代码(在循环的同一点可互换的行)。我的样本数据集的速度差异为2秒(编辑模式)与72秒(非编辑模式)。 在编辑模式下修改属性: layer.changeAttributeValue(feature.id(), 17, QtCore.QVariant(value)) 在编辑模式之外修改属性: layer.dataProvider().changeAttributeValues({ feature.id() : { 17 : QtCore.QVariant(value) } }) 这是预期的行为吗?我不需要用户能够撤消更改,所以我认为我不需要使用编辑模式。 编辑1:请参阅下面的完整代码,包括两个版本(但已注释掉): def run(self): try: # create spatial index of buffered layer index = QgsSpatialIndex() self.layer_buffered.select() for feature in self.layer_buffered: index.insertFeature(feature) # enable editing #was_editing = self.layer_target.isEditable() #if was_editing is False: # self.layer_target.startEditing() # …
9 qgis  python  pyqgis 

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.