예제 #1
0
    def testDistanceToAreaUnit(self):
        """Test distanceToAreaUnit conversion"""
        expected = {
            QgsUnitTypes.DistanceMeters:
            QgsUnitTypes.AreaSquareMeters,
            QgsUnitTypes.DistanceKilometers:
            QgsUnitTypes.AreaSquareKilometers,
            QgsUnitTypes.DistanceFeet:
            QgsUnitTypes.AreaSquareFeet,
            QgsUnitTypes.DistanceYards:
            QgsUnitTypes.AreaSquareYards,
            QgsUnitTypes.DistanceMiles:
            QgsUnitTypes.AreaSquareMiles,
            QgsUnitTypes.DistanceDegrees:
            QgsUnitTypes.AreaSquareDegrees,
            QgsUnitTypes.DistanceCentimeters:
            QgsUnitTypes.AreaSquareCentimeters,
            QgsUnitTypes.DistanceMillimeters:
            QgsUnitTypes.AreaSquareMillimeters,
            QgsUnitTypes.DistanceUnknownUnit:
            QgsUnitTypes.AreaUnknownUnit,
            QgsUnitTypes.DistanceNauticalMiles:
            QgsUnitTypes.AreaSquareNauticalMiles
        }

        for t in list(expected.keys()):
            self.assertEqual(QgsUnitTypes.distanceToAreaUnit(t), expected[t])
예제 #2
0
    def __init__(self):
        QDialog.__init__(self)
        self.setupUi(self)
        # dialog buttons box
        self.DialogButtons.rejected.connect(self.closing)
        self.DialogButtons.button(
            QDialogButtonBox.Save).setText("Export to CSV")
        self.DialogButtons.button(QDialogButtonBox.Save).clicked.connect(
            self.export_to_csv)

        from AcATaMa.gui.acatama_dockwidget import AcATaMaDockWidget as AcATaMa
        sampling_layer = AcATaMa.dockwidget.QCBox_SamplingFile_AA.currentLayer(
        )
        thematic_layer = AcATaMa.dockwidget.QCBox_ThematicRaster.currentLayer()

        # get AccuracyAssessment or init new instance
        if sampling_layer:
            # sampling file valid
            if sampling_layer in Classification.instances:
                # classification exists for this file
                classification = Classification.instances[sampling_layer]
                if classification.accuracy_assessment:
                    self.accuracy_assessment = classification.accuracy_assessment
                    # restore config to dialog
                    self.z_score.setValue(self.accuracy_assessment.z_score)
                    self.CSV_separator.setText(
                        self.accuracy_assessment.csv_separator)
                    self.CSV_decimal_sep.setText(
                        self.accuracy_assessment.csv_decimal)
                else:
                    self.accuracy_assessment = AccuracyAssessment(
                        classification)
                    classification.accuracy_assessment = self.accuracy_assessment

        # fill the area units
        self.area_unit.clear()
        layer_dist_unit = thematic_layer.crs().mapUnits()
        for area_unit in AREA_UNITS:
            self.area_unit.addItem("{} ({})".format(
                QgsUnitTypes.toString(area_unit),
                QgsUnitTypes.toAbbreviatedString(area_unit)))
        # set the area unit saved or based on the sampling file by default
        if self.accuracy_assessment.area_unit is not None:
            self.area_unit.setCurrentIndex(self.accuracy_assessment.area_unit)
        else:
            self.accuracy_assessment.area_unit = QgsUnitTypes.distanceToAreaUnit(
                layer_dist_unit)
            self.area_unit.setCurrentIndex(self.accuracy_assessment.area_unit)

        self.area_unit.currentIndexChanged.connect(
            lambda: self.reload(msg_bar=False))
        self.z_score.valueChanged.connect(lambda: self.reload(msg_bar=False))
        self.CSV_separator.textChanged.connect(lambda value: setattr(
            self.accuracy_assessment, "csv_separator", value))
        self.CSV_decimal_sep.textChanged.connect(lambda value: setattr(
            self.accuracy_assessment, "csv_decimal", value))
        self.reloadButton.clicked.connect(lambda: self.reload(msg_bar=True))
예제 #3
0
    def testDistanceToAreaUnit(self):
        """Test distanceToAreaUnit conversion"""
        expected = {QGis.Meters: QgsUnitTypes.SquareMeters,
                    QGis.Feet: QgsUnitTypes.SquareFeet,
                    QGis.Degrees: QgsUnitTypes.SquareDegrees,
                    QGis.UnknownUnit: QgsUnitTypes.UnknownAreaUnit,
                    QGis.NauticalMiles: QgsUnitTypes.SquareNauticalMiles
                    }

        for t in expected.keys():
            self.assertEqual(QgsUnitTypes.distanceToAreaUnit(t), expected[t])
예제 #4
0
    def testDistanceToAreaUnit(self):
        """Test distanceToAreaUnit conversion"""
        expected = {
            QGis.Meters: QgsUnitTypes.SquareMeters,
            QGis.Feet: QgsUnitTypes.SquareFeet,
            QGis.Degrees: QgsUnitTypes.SquareDegrees,
            QGis.UnknownUnit: QgsUnitTypes.UnknownAreaUnit,
            QGis.NauticalMiles: QgsUnitTypes.SquareNauticalMiles,
        }

        for t in expected.keys():
            self.assertEqual(QgsUnitTypes.distanceToAreaUnit(t), expected[t])
예제 #5
0
    def testDistanceToAreaUnit(self):
        """Test distanceToAreaUnit conversion"""
        expected = {QgsUnitTypes.DistanceMeters: QgsUnitTypes.AreaSquareMeters,
                    QgsUnitTypes.DistanceKilometers: QgsUnitTypes.AreaSquareKilometers,
                    QgsUnitTypes.DistanceFeet: QgsUnitTypes.AreaSquareFeet,
                    QgsUnitTypes.DistanceYards: QgsUnitTypes.AreaSquareYards,
                    QgsUnitTypes.DistanceMiles: QgsUnitTypes.AreaSquareMiles,
                    QgsUnitTypes.DistanceDegrees: QgsUnitTypes.AreaSquareDegrees,
                    QgsUnitTypes.DistanceUnknownUnit: QgsUnitTypes.AreaUnknownUnit,
                    QgsUnitTypes.DistanceNauticalMiles: QgsUnitTypes.AreaSquareNauticalMiles
                    }

        for t in list(expected.keys()):
            self.assertEqual(QgsUnitTypes.distanceToAreaUnit(t), expected[t])
    def cell_size(self):
        """Returns the size of the raster cell in hectares"""
        # Get the cell dimensions and units of the LULC raster
        cell_dim_x = self.raster.rasterUnitsPerPixelX()
        cell_dim_y = self.raster.rasterUnitsPerPixelY()
        raster_units = self.raster.crs().mapUnits()

        # Figure out the conversion factor from map units to hectares
        raster_units_square = QgsUnitTypes.distanceToAreaUnit(raster_units)
        hectare_unit_code = QgsUnitTypes.stringToAreaUnit("Hectares")[0]
        conversion_factor = QgsUnitTypes.fromUnitToUnitFactor(raster_units_square, hectare_unit_code)

        # Return raster cell size in hectares
        # Look out for floating point issues!
        return(cell_dim_x * cell_dim_y * conversion_factor)
예제 #7
0
    def __init__(self, classification):
        from AcATaMa.gui.acatama_dockwidget import AcATaMaDockWidget as AcATaMa

        self.classification = classification
        self.ThematicR = Raster(file_selected_combo_box=AcATaMa.dockwidget.QCBox_ThematicRaster,
                                band=int(AcATaMa.dockwidget.QCBox_band_ThematicRaster.currentText())
                                    if AcATaMa.dockwidget.QCBox_band_ThematicRaster.currentText() else None,
                                nodata=int(AcATaMa.dockwidget.nodata_ThematicRaster.value()))
        self.thematic_pixels_count = {}
        # dialog settings
        self.area_unit = None
        self.z_score = 1.96
        self.csv_separator = ";"
        self.csv_decimal = "."
        # define the base area unit based on the thematic raster distance unit
        thematic_layer = AcATaMa.dockwidget.QCBox_ThematicRaster.currentLayer()
        layer_dist_unit = thematic_layer.crs().mapUnits()
        self.base_area_unit = QgsUnitTypes.distanceToAreaUnit(layer_dist_unit)