def changeBestToEarmarkedPUs(setupObject): canvas = qgis.utils.iface.mapCanvas() puLayer = QgsVectorLayer(setupObject.puPath, "Planning units", "ogr") puProvider = puLayer.dataProvider() idFieldOrder = puProvider.fieldNameIndex("Unit_ID") statusFieldOrder = puProvider.fieldNameIndex("Status") bestFieldOrder = puProvider.fieldNameIndex("Best") changeBool = True if bestFieldOrder == -1: QMessageBox.warning(None, "Incorrect format", "The planning unit layer has no field named Best (which is produced by running Marxan). This process will terminate.") changeBool = False if changeBool == True: selectedPUIDStatusDict = {} puLayer.startEditing() puFeatures = puLayer.getFeatures() for puFeature in puFeatures: puRow = puFeature.id() puID = puFeature.attributes()[idFieldOrder] puStatus = puFeature.attributes()[statusFieldOrder] bestStatus = puFeature.attributes()[bestFieldOrder] if bestStatus == "Selected": puLayer.changeAttributeValue(puRow, statusFieldOrder, "Earmarked") selectedPUIDStatusDict[puID] = puStatus puLayer.commitChanges() puLayer.triggerRepaint() canvas.refresh() statusType = "Earmarked" # This works out the changes needed to update the Best PUs to Earmarked changeAbundDict = calcChangeAbundDict(setupObject, selectedPUIDStatusDict, statusType) updateTargetDictWithChanges(setupObject, changeAbundDict) cluz_setup.updateTargetCSVFromTargetDict(setupObject, setupObject.targetDict) qgis.utils.iface.messageBar().pushMessage("Process completed", "Planning units that were selected in the Best portfolio now have Earmarked status.", QgsMessageBar.INFO)
def changeBestToEarmarkedPUs(setupObject): puLayer = QgsVectorLayer(setupObject.puPath, "Planning units", "ogr") puProvider = puLayer.dataProvider() idFieldOrder = puProvider.fieldNameIndex("Unit_ID") statusFieldOrder = puProvider.fieldNameIndex("Status") bestFieldOrder = puProvider.fieldNameIndex("Best") changeBool = True if bestFieldOrder == -1: cluz_messages.changeBestToEarmarkedPU_NoBestField() changeBool = False if changeBool: selectedPUIDStatusDict = changeStatus_makeSelectedPUIDStatusDict( puLayer, idFieldOrder, statusFieldOrder, bestFieldOrder) cluz_setup.updatePULayerToShowChangesByShiftingExtent() statusType = "Earmarked" # This works out the changes needed to update the Best PUs to Earmarked changeAbundDict = calcChangeAbundDict(setupObject, selectedPUIDStatusDict, statusType) updateTargetDictWithChanges(setupObject, changeAbundDict) cluz_setup.updateTargetCSVFromTargetDict(setupObject, setupObject.targetDict) cluz_messages.changeBestToEarmarkedPU_Completed() cluz_setup.removeThenAddPULayer(setupObject)
def changeStatus(self, setupObject): if self.availableButton.isChecked(): statusType = "Available" elif self.earmarkedButton.isChecked(): statusType = "Earmarked" elif self.conservedButton.isChecked(): statusType = "Conserved" elif self.excludedButton.isChecked(): statusType = "Excluded" changeLockedPUsBool = self.changeCheckBox.isChecked() selectedPUIDStatusDict = cluz_functions3.changeStatusPuLayer( setupObject, statusType, changeLockedPUsBool) changeAbundDict = cluz_functions3.calcChangeAbundDict( setupObject, selectedPUIDStatusDict, statusType) targetDict = cluz_functions3.updateTargetDictWithChanges( setupObject, changeAbundDict) setupObject.targetDict = targetDict cluz_setup.updateTargetCSVFromTargetDict(setupObject, targetDict) (targetsMetCount, targetCount) = cluz_functions3.returnTargetsMetTuple(setupObject) self.targetsMetLabel.setText("Targets met: " + str(targetsMetCount) + " of " + str(targetCount)) setupObject.selectedPUIDStatusDict = selectedPUIDStatusDict self.undoButton.setEnabled(True)
def loadTargetDictData(self, setupObject): decPrec = setupObject.decimalPlaces targetCSVFilePath = setupObject.targetPath decPrecHeaderNameList = [ "target", "spf", "conserved", "total" ] # List of columns that will be changed to decimal precision pcValueUpdate = False with open(targetCSVFilePath, 'rb') as f: targetReader = csv.reader(f) targetHeaderList = targetReader.next() lowerHeaderList = [] for aHeader in targetHeaderList: lowerHeaderList.append(aHeader.lower()) self.targetTableWidget.clear() self.targetTableWidget.setColumnCount(len(targetHeaderList)) insertRowNumber = 0 for aRow in targetReader: pcValue = aRow[lowerHeaderList.index("pc_target")] targetValue = float(aRow[lowerHeaderList.index("target")]) consValue = float(aRow[lowerHeaderList.index("conserved")]) if targetValue <= 0: limboPCValue = "-1" else: limboPCValue = consValue / targetValue limboPCValue *= 100 limboPCValue = cluz_setup.returnRoundedValue( setupObject, limboPCValue) if float(limboPCValue) != float(pcValue): pcValueUpdate = True aRow[lowerHeaderList.index("pc_target")] = limboPCValue addTargetTableRow(self, aRow, targetHeaderList, decPrecHeaderNameList, insertRowNumber, decPrec) insertRowNumber += 1 self.targetTableWidget.setHorizontalHeaderLabels(targetHeaderList) for aColValue in range(len(targetHeaderList)): self.targetTableWidget.resizeColumnToContents(aColValue) if pcValueUpdate == True: cluz_setup.updateTargetCSVFromTargetDict(setupObject, setupObject.targetDict)
def undoStatusChange(self, setupObject): canvas = qgis.utils.iface.mapCanvas() cluz_functions3.undoStatusChangeInPuLayer(setupObject) newConTotDict = cluz_functions1.returnConTotDict(setupObject) targetDict = cluz_functions1.updateConTotFieldsTargetDict( setupObject, newConTotDict) cluz_setup.updateTargetCSVFromTargetDict(setupObject, targetDict) setupObject.targetDict = targetDict (targetsMetCount, targetCount) = cluz_functions3.returnTargetsMetTuple(setupObject) self.targetsMetLabel.setText("Targets met: " + str(targetsMetCount) + " of " + str(targetCount)) setupObject.selectedPUIDStatusDict = "blank" self.undoButton.setEnabled(False) canvas.refresh()
def changeEarmarkedToAvailablePUs(setupObject): puLayer = QgsVectorLayer(setupObject.puPath, "Planning units", "ogr") puProvider = puLayer.dataProvider() idFieldOrder = puProvider.fieldNameIndex("Unit_ID") statusFieldOrder = puProvider.fieldNameIndex("Status") changeBool = cluz_messages.checkChangeEarmarkedToAvailablePU() if changeBool: earmakedPUIDStatusDict = changeStatus_makeEarmakedPUIDStatusDict( puLayer, idFieldOrder, statusFieldOrder) cluz_setup.updatePULayerToShowChangesByShiftingExtent() changeAbundDict = calcChangeAbundDict(setupObject, earmakedPUIDStatusDict, "Available") updateTargetDictWithChanges(setupObject, changeAbundDict) cluz_setup.updateTargetCSVFromTargetDict(setupObject, setupObject.targetDict) cluz_messages.changeEarmarkedToAvailablePU_Completed() cluz_setup.removeThenAddPULayer(setupObject)
def recalcTargetTable(self, setupObject): checkSetupFileLoaded(self, setupObject) openSetupDialogIfSetupFilesIncorrect(self, setupObject) checkCreateAddFiles(setupObject) if setupObject.setupStatus == "files_checked": if setupObject.abundPUKeyDict == "blank": setupObject.abundPUKeyDict = cluz_setup.makeAbundancePUKeyDict( setupObject) cluz_setup.createAndCheckCLUZFiles(setupObject) cluz_setup.checkAddPULayer(setupObject) newConTotDict = cluz_functions1.returnConTotDict(setupObject) targetDict = cluz_functions1.updateConTotFieldsTargetDict( setupObject, newConTotDict) setupObject.targetDict = targetDict cluz_setup.updateTargetCSVFromTargetDict(setupObject, targetDict) qgis.utils.iface.messageBar().pushMessage("Target table updated: ", "Process completed.", QgsMessageBar.INFO, 3)