勾选多个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))
我正在为地理信息系统软件 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))