检查多个QCheckBox时如何打印累积几何面积?

2024-06-01 14:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为GIS软件开发一个插件QGIS 2.14.3。我还使用Qt Designer 4.8.5。

我有几个复选框,当单独选中时,执行它们的相关函数。这将选择GIS地图上的多边形要素并打印其面积总和:

Image

总共有5个等级,所以有5个复选框,每个复选框的功能实际上是相同的,但这里有前2个:

selectedLayerIndex = self.dockwidget.combo_box.currentText()
sel_layer = QgsMapLayerRegistry.instance().mapLayersByName(str(selectedLayerIndex))[0]   
self.iface.setActiveLayer(sel_layer) 

def rank_0():
    expr = QgsExpression( "\"Rank\"IS NULL" )
    it = sel_layer.getFeatures( QgsFeatureRequest( expr ) )
    ids = [i.id() for i in it]
    if self.dockwidget.rank0_checkbox.isChecked():
        sel_layer.setSelectedFeatures( ids )
        for f in sel_layer.selectedFeatures():
            sel_area = 0
            sel_area += f.geometry().area()
            self.dockwidget.lineEdit.setText("{:,.2f}".format(sel_area))
    else:
        sel_layer.removeSelection()

def rank_1():
    expr = QgsExpression( "\"Rank\"= 1" )
    it = sel_layer.getFeatures( QgsFeatureRequest( expr ) )
    ids = [i.id() for i in it]
    if self.dockwidget.rank1_checkbox.isChecked():
        sel_layer.setSelectedFeatures( ids )
        for f in sel_layer.selectedFeatures():
            sel_area = 0
            sel_area += f.geometry().area()
            self.dockwidget.lineEdit.setText("{:,.2f}".format(sel_area))
    else:
        sel_layer.removeSelection()

我怎样才能使它在选中多个复选框时,打印区域是这些复选框的总和?你知道吗

我想我需要定义另一个函数来计算面积之和并打印出来,但不确定如何继续。你知道吗


Tags: 函数inselflayeridsforitarea
1条回答
网友
1楼 · 发布于 2024-06-01 14:17:18

您可以使用select(ids)函数代替setSelectedFeatures(ids)函数。当setSelectedFeatures(ids)取消选择以前选定的功能并选择新功能时,select(ids)函数将新的ids添加到选定的ids中。你知道吗

    sel_layer.select( ids )

通过计算选定要素的总面积,可以得到所需的值。你知道吗

    sel_area = 0
    for f in sel_layer.selectedFeatures():
        sel_area += f.geometry().area()
    self.dockwidget.lineEdit.setText("{:,.2f}".format(sel_area))

相关问题 更多 >