Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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()
Пример #6
0
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)
Пример #7
0
    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)