Questions tagged «pyqgis»

QGIS的Python绑定。


1
为什么在独立的PyQGIS处理脚本中导入顺序很重要?
在运行独立的PyQGIS处理脚本时遇到了一个奇怪的问题。脚本中的导入顺序会影响其正常执行。 您可以通过打开Python控制台并输入以下脚本(我使用GNU / Linux,QGIS 2.6.1,处理插件v.2.2.0-2和Python 2.7.3)来重现该问题: # Prepare the environment import sys from qgis.core import QgsApplication from PyQt4.QtGui import QApplication app = QApplication([]) QgsApplication.setPrefixPath("/usr", True) QgsApplication.initQgis() # Prepare processing framework sys.path.append('/home/YOUR_USER/.qgis2/python/plugins') from processing.core.Processing import Processing Processing.initialize() print Processing.getAlgorithm("qgis:creategrid") # Exit applications QgsApplication.exitQgis() QApplication.exit() 您应该获得: ALGORITHM: Create grid HSPACING <ParameterNumber> VSPACING …


2
通过QGIS Python API按名称设置功能属性?
我尝试使用此代码按属性名称设置要素属性 pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 但结果我在所有字段中都为NULL。如果我用 feature.setAttributes([1]) 它工作正常。 我做错了什么?为什么feature [attrName] = 1不起作用? 更新:查找此解决方案 pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 pr.changeAttributeValues({feature.id() : {pr.fieldNameMap()[attrName] : 1}})
13 pyqgis 


1
更改最小边界框算法
我正在尝试创建类似于最小边界框的算法(尽管最终可能看起来不像它)。在这种情况下,角度将作为参数传递,并且给定角度,我需要覆盖所有点/多边形的最小矩形。到目前为止,我的思路是找到点的中心(质心算法),然后从中创建两条与参数角相同的平行线,以及两条与之垂直的线。然后使用迭代将这些线向外(沿相反的方向)移动,直到包含所有点。也不必是确切的最小边界框,近似的作品(我想这取决于每个迭代步骤的大小)。 到目前为止,这是我的代码。我已经将所有多边形分解为一个。然后,我采用凸包来减少顶点。然后,我将所有顶点都放入列表中-不确定是否有帮助... a = layer.getFeatures() for feat in a: geom = feat.geometry() a = geom.convexHull() vertexId = QgsVertexId() vertices = [] b = a.constGet().nextVertex(vertexId) while b[0]: vertices.append(b[1]) b = a.constGet().nextVertex(vertexId) 注意:在某些时候,我需要传递盒子的角度。我正在使用QGIS 3,并且需要在Python中创建它。图层“图层”具有一种几何形状,即所有其他多边形的溶解多边形-也许不需要迭代即可访问它。 请让我知道我是否应该传递更多详细信息。


1
获取所有包含点的线
我使用QGIS,并且拥有一个点和道路网络。我需要自动提取包围特​​定点的道路名称。 最近的邻居分析和缓冲区无法完成这项工作,因为在许多情况下,根据测量距离,该点更接近邻居道路而不是封闭道路。是否有关于仅提取封闭道路的想法?

1
从GUI取消QGIS处理脚本的干净方法
我已经编写了一个QGIS处理脚本,可以进行最接近的设施分析。以完整的输入数据集(地址为20k,起点为100,目标点,OSM道路网为线束为13k)运行大约3个小时,因此使用了各种进度指示器,以使用户确信它是仍然有效(日志输出,进度条,剩余时间,橡皮筋指示最近处理过的设施的方式,请参见下面的屏幕截图): 现在,我想取消正在运行的脚本,据我所知,这只能[X]在处理脚本gui窗口的右上角完成。 但是这样做的话,脚本仍然按照蓝色橡皮筋,处理时间和进度条指示进行处理。 ...以及任务管理器中的系统资源: 但是,几分钟后(约14分钟),脚本将停止处理,并且系统不再消耗资源: 由于关闭窗口和停止处理之间的时间间隔对我来说似乎是不可预测的,因此我的问题是:这是取消QGIS处理脚本的推荐方法,还是有其他方法可以从gui中彻底取消此类脚本?


1
PyQGIS将栅格另存为渲染图像,然后在其上使用GDAL工具
我尝试使用QGis的“将栅格保存为渲染图像”中的代码。i是栅格图层: pipelayer = i pipeextent = pipelayer.extent() pipewidth, pipeheight = (pipelayer.width(), pipelayer.height()) piperenderer = pipelayer.renderer() pipeprovider = pipelayer.dataProvider() crs = pipelayer.crs().toWkt() pipe = QgsRasterPipe() pipe.set(pipeprovider.clone()) pipe.set(piperenderer.clone()) pipedFile = os.path.join(tempfile.gettempdir(), safeLayerName + '_pipe.tif') print pipedFile file_writer = QgsRasterFileWriter(pipedFile) file_writer.writeRaster(pipe, pipewidth, pipeheight, pipeextent, pipelayer.crs()) in_raster = pipedFile prov_raster = os.path.join(tempfile.gettempdir(), 'json_' + …

3
是否可以在QGIS处理算法中使用存储层?
我正在构建一个QGIS插件,该插件连接到局域网中的MySQL数据库,然后将其中一个表的子集添加到内存层中;该子集基于数据货币(仅对进行测量的每个位置进行最新观察)。此存储层已成功创建。 但是,然后我想运行一些地理处理算法,而在其中任何一个中使用内存层都遇到了麻烦。 self.stationuri = "point?crs=epsg:4326&field=id:integer&field={}:double&index=yes".format(self.cb_field.currentText()) self.vlayer = QgsVectorLayer(self.stationuri,"scratch","memory") if not self.vlayer.isValid(): raise Exception("Failed to create in-memory layer") self.vlayer.startEditing() for i,r in enumerate(result): # Result is row-by-row result of SQL query # Add features ... self.vlayer.commitChanges() self.vlayer.updateExtents() # Add layer to map QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) # Layer is successfully added to map with …

3
使用PyQGIS / Python与另一个图层的要素相交时是否拆分要素?
我有一个缓冲层(绿色多边形),当它越过障碍(蓝线)时,我想将其分成两个多边形。我一直在尝试使用“ splitGeometry”方法,但是我无法使其正常工作。到目前为止,我的代码是这样的: while ldbuffprovider.nextFeature(feat): while barprovider.nextFeature(feat2): if feat.geometry().intersects(feat2.geometry()): intersection = feat.geometry().intersection(feat2.geometry()) result, newGeometries, topoTestPoints=feat.geometry().splitGeometry(intersection.asPolyline(),True) 结果(错误)返回1,newGeometries返回空列表。任何帮助是极大的赞赏。

1
如何在Python中解决新的“已完成任务”的QgsMessageBar?
我真的很惊讶QGIS在过去几个月中所采取的巨大步骤。新的图标集,改进的打印作曲家以及在QGIS 2.0中可以看到的更多变化真是太棒了! 除了其他许多不错的改进之外,还有一个漂亮的蓝色任务栏,我觉得它很有吸引力。 是否有可能在python中解决此条脚本和插件的问题(例如在完成计算后显示一条小消息)?我在这里问这个问题,因为我相信许多QGIS开发人员也会访问此问答站点。 PS:该栏仅在QGIS开发人员中可见,并且仅在某些操作中可见。
12 qgis  python  pyqgis 

4
获取QGIS 2.x python代码以在QGIS 3.x中工作?对象没有属性“ legendInterface”的问题
下面的代码在QGIS 2.x中运行良好,但是在QGIS 3.x中不起作用。 myDir = 'd:/work/output_folder/' layers = iface.legendInterface().layers() pipe = QgsRasterPipe() for layer in layers: extent = layer.extent() width, height = layer.width(), layer.height() renderer = layer.renderer() provider=layer.dataProvider() crs = layer.crs().toWkt() pipe.set(provider.clone()) pipe.set(renderer.clone()) opts = ["COMPRESS=LZW"] file_writer = QgsRasterFileWriter(myDir + layer.name() + ".tif") file_writer.setCreateOptions(opts) file_writer.writeRaster(pipe, width, height, extent, layer.crs()) 这是我运行代码时遇到的错误: …

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.