def __init__(self): QDialog.__init__(self) # Set up the user interface from Designer. self.ui = Ui_FocalStats() self.ui.setupUi(self) self.ui.cbLayers.addItems(getLayersNames()) QObject.connect(self.ui.bOK, SIGNAL("clicked()"), self.calculateStats) QObject.connect(self.ui.bBrowse, SIGNAL("clicked()"), self.outFile) QObject.connect(self.ui.bOpenRaster, SIGNAL("clicked()"), self.openRaster)
def __init__(self): QDialog.__init__(self) # Set up the user interface from Designer. self.ui = Ui_FocalStats() self.ui.setupUi(self) self.ui.cbLayers.addItems(getLayersNames()) QObject.connect( self.ui.bOK, SIGNAL( "clicked()" ), self.calculateStats ) QObject.connect( self.ui.bBrowse, SIGNAL( "clicked()" ), self.outFile ) QObject.connect( self.ui.bOpenRaster, SIGNAL( "clicked()" ), self.openRaster )
class FocalStatsDialog(QDialog): def __init__(self): QDialog.__init__(self) # Set up the user interface from Designer. self.ui = Ui_FocalStats() self.ui.setupUi(self) self.ui.cbLayers.addItems(getLayersNames()) QObject.connect( self.ui.bOK, SIGNAL( "clicked()" ), self.calculateStats ) QObject.connect( self.ui.bBrowse, SIGNAL( "clicked()" ), self.outFile ) QObject.connect( self.ui.bOpenRaster, SIGNAL( "clicked()" ), self.openRaster ) def outFile(self): """Open a file save dialog and set the output file path.""" outFilePath = saveDialog(self) if not outFilePath: return self.ui.eOutput.setText(QString(outFilePath)) def openRaster(self): rasterPath = openDialog(self) if not rasterPath: return self.ui.cbLayers.setEditText(QString(rasterPath)) def createSimpleMask(self): sizeX = int(self.ui.cbX.currentText()) if self.ui.useY.isChecked(): sizeY = int(self.ui.cbY.currentText()) else: sizeY = sizeX return np.ones((sizeY, sizeX)) def calculateStats(self): if self.ui.eOutput.text() == '': QMessageBox.information(None, 'Focal statistics', 'Choose output raster file!') return elif self.ui.cbLayers.currentText() == '': QMessageBox.information(None, 'Focal statistics', 'Choose input raster file!') return t1 = time() self.ui.lInfo.setText('Reading input file...') self.repaint() rLayer = getMapLayerByName(self.ui.cbLayers.currentText()) if rLayer: path = str(rLayer.source()) else: path = str(self.ui.cbLayers.currentText()) gd = gdal.Open(path) if not gd: QMessageBox.information(None, 'Focal statistics', 'File not found!') return rasterInfo = focal.rasterInfo(gd) if self.ui.cbDataType.isChecked(): rasterInfo.gdalDataType = focal.dataTypesFromInt[self.ui.cbType.currentIndex()] raster = gd.ReadAsArray() gd = None #QInputDialog.getText(None, '','', QLineEdit.Normal, str(rasterInfo.noDataValue)) mask = self.createSimpleMask() self.ui.lInfo.setText('Calculating...') self.repaint() try: if self.ui.cbMethod.currentIndex() == 0: calcRast = focal.rasterSum(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 1: calcRast = focal.rasterAverage(raster, mask, rasterInfo) elif self.ui.cbMethod.currentIndex() == 2: calcRast = focal.rasterMedian(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 3: calcRast = focal.rasterMin(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 4: calcRast = focal.rasterMax(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 5: calcRast = focal.rasterRange(raster, mask, rasterInfo) raster = None except MemoryError: QMessageBox.critical(None, 'Focal Statistics', 'Memory Error') raster = None self.ui.lInfo.setText('Memory error...') self.repaint() return self.ui.lInfo.setText('Creating new file...') self.repaint() if self.ui.cbDataType.isChecked(): focal.SaveToFile(str(self.ui.eOutput.text()), calcRast, rasterInfo, self.ui.cbType.currentIndex()) else: focal.SaveToFile(str(self.ui.eOutput.text()), calcRast, rasterInfo) if self.ui.cbAddResult.isChecked(): self.ui.lInfo.setText('Loading file...') self.repaint() r = QgsRasterLayer(str(self.ui.eOutput.text()), 'nowy_raster') QgsMapLayerRegistry.instance().addMapLayer(r) t2 = time() t = t2-t1 self.ui.lInfo.setText('Finished') QMessageBox.information(None, 'Focal Statistics', 'Done in %.2f sec.' % t)
class FocalStatsDialog(QDialog): def __init__(self): QDialog.__init__(self) # Set up the user interface from Designer. self.ui = Ui_FocalStats() self.ui.setupUi(self) self.ui.cbLayers.addItems(getLayersNames()) QObject.connect(self.ui.bOK, SIGNAL("clicked()"), self.calculateStats) QObject.connect(self.ui.bBrowse, SIGNAL("clicked()"), self.outFile) QObject.connect(self.ui.bOpenRaster, SIGNAL("clicked()"), self.openRaster) def outFile(self): """Open a file save dialog and set the output file path.""" outFilePath = saveDialog(self) if not outFilePath: return self.ui.eOutput.setText(QString(outFilePath)) def openRaster(self): rasterPath = openDialog(self) if not rasterPath: return self.ui.cbLayers.setEditText(QString(rasterPath)) def createSimpleMask(self): sizeX = int(self.ui.cbX.currentText()) if self.ui.useY.isChecked(): sizeY = int(self.ui.cbY.currentText()) else: sizeY = sizeX return np.ones((sizeY, sizeX)) def calculateStats(self): if self.ui.eOutput.text() == '': QMessageBox.information(None, 'Focal statistics', 'Choose output raster file!') return elif self.ui.cbLayers.currentText() == '': QMessageBox.information(None, 'Focal statistics', 'Choose input raster file!') return t1 = time() self.ui.lInfo.setText('Reading input file...') self.repaint() rLayer = getMapLayerByName(self.ui.cbLayers.currentText()) if rLayer: path = str(rLayer.source()) else: path = str(self.ui.cbLayers.currentText()) gd = gdal.Open(path) if not gd: QMessageBox.information(None, 'Focal statistics', 'File not found!') return rasterInfo = focal.rasterInfo(gd) if self.ui.cbDataType.isChecked(): rasterInfo.gdalDataType = focal.dataTypesFromInt[ self.ui.cbType.currentIndex()] raster = gd.ReadAsArray() gd = None #QInputDialog.getText(None, '','', QLineEdit.Normal, str(rasterInfo.noDataValue)) mask = self.createSimpleMask() self.ui.lInfo.setText('Calculating...') self.repaint() try: if self.ui.cbMethod.currentIndex() == 0: calcRast = focal.rasterSum(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 1: calcRast = focal.rasterAverage(raster, mask, rasterInfo) elif self.ui.cbMethod.currentIndex() == 2: calcRast = focal.rasterMedian(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 3: calcRast = focal.rasterMin(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 4: calcRast = focal.rasterMax(raster, mask, rasterInfo) raster = None elif self.ui.cbMethod.currentIndex() == 5: calcRast = focal.rasterRange(raster, mask, rasterInfo) raster = None except MemoryError: QMessageBox.critical(None, 'Focal Statistics', 'Memory Error') raster = None self.ui.lInfo.setText('Memory error...') self.repaint() return self.ui.lInfo.setText('Creating new file...') self.repaint() if self.ui.cbDataType.isChecked(): focal.SaveToFile(str(self.ui.eOutput.text()), calcRast, rasterInfo, self.ui.cbType.currentIndex()) else: focal.SaveToFile(str(self.ui.eOutput.text()), calcRast, rasterInfo) if self.ui.cbAddResult.isChecked(): self.ui.lInfo.setText('Loading file...') self.repaint() r = QgsRasterLayer(str(self.ui.eOutput.text()), 'nowy_raster') QgsMapLayerRegistry.instance().addMapLayer(r) t2 = time() t = t2 - t1 self.ui.lInfo.setText('Finished') QMessageBox.information(None, 'Focal Statistics', 'Done in %.2f sec.' % t)