勾选多个QCheckBox如何打印累计几何面积?

How to print accumulated geometric area when checking multiple QCheckBox?

我正在为地理信息系统软件 QGIS 2.14.3 开发一个插件。我也在使用 Qt Designer 4.8.5.

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

总共有 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()

如何才能让当多个复选框被选中时,打印的区域是这些复选框的总和?

我猜我需要定义另一个函数来计算面积之和并将其打印出来,但不确定如何进行。

您可以使用 select(ids) 函数代替 setSelectedFeatures(ids) 函数。虽然 setSelectedFeatures(ids) deselectes 以前 selected 的特征和 selects 新特征,select(ids) 函数将新的 ids 添加到 select编辑ID。

    sel_layer.select( ids )

通过计算 selected 要素的总面积,您可以获得所需的值。

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