def create_table(self): from AcATaMa.gui.acatama_dockwidget import AcATaMaDockWidget as AcATaMa header = ["Pix Val", "Color", "Select"] # get color table from raster thematic_table = {"color_table": get_color_table( AcATaMa.dockwidget.QCBox_ThematicRaster.currentLayer(), band=int(AcATaMa.dockwidget.QCBox_band_ThematicRaster.currentText()), nodata=int(AcATaMa.dockwidget.nodata_ThematicRaster.value()))} if not thematic_table["color_table"]: # clear table self.tableOfClasses.setRowCount(0) self.tableOfClasses.setColumnCount(0) return thematic_table["row_count"] = len(list(thematic_table["color_table"].values())[0]) # init table self.tableOfClasses.setRowCount(thematic_table["row_count"]) self.tableOfClasses.setColumnCount(3) # hidden row labels self.tableOfClasses.verticalHeader().setVisible(False) # add Header self.tableOfClasses.setHorizontalHeaderLabels(header) # insert items for n, h in enumerate(header): if h == "Pix Val": for m, item in enumerate(thematic_table["color_table"]["Pixel Value"]): item_table = QTableWidgetItem(str(item)) item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_table.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.tableOfClasses.setItem(m, n, item_table) if h == "Color": for m in range(thematic_table["row_count"]): item_table = QTableWidgetItem() item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_table.setBackground(QColor(thematic_table["color_table"]["Red"][m], thematic_table["color_table"]["Green"][m], thematic_table["color_table"]["Blue"][m], thematic_table["color_table"]["Alpha"][m])) self.tableOfClasses.setItem(m, n, item_table) if h == "Select": for m in range(thematic_table["row_count"]): item_table = QPushButton("Select this") item_table.clicked.connect(self.select_clicked) self.tableOfClasses.setCellWidget(m, n, item_table) # adjust size of Table self.tableOfClasses.resizeColumnsToContents() self.tableOfClasses.resizeRowsToContents() # adjust the dialog based on table content dialog_width = self.tableOfClasses.horizontalHeader().length() + 50 self.resize(dialog_width, self.height())
def fill_stratified_sampling_table(dockwidget): try: # check the current selected file dockwidget.QCBox_CategRaster_StraRS.currentLayer().dataProvider() # check sampling method selected if not dockwidget.QCBox_StraRS_Method.currentText(): raise Exception except: # clear table dockwidget.QTableW_StraRS.setRowCount(0) dockwidget.QTableW_StraRS.setColumnCount(0) return if dockwidget.QCBox_StraRS_Method.currentText().startswith("Fixed values"): srs_method = "fixed values" dockwidget.widget_TotalExpectedSE.setHidden(True) if dockwidget.QCBox_StraRS_Method.currentText().startswith( "Area based proportion"): srs_method = "area based proportion" dockwidget.widget_TotalExpectedSE.setVisible(True) if dockwidget.QCBox_CategRaster_StraRS.currentText() in dockwidget.srs_tables.keys() and \ srs_method in dockwidget.srs_tables[dockwidget.QCBox_CategRaster_StraRS.currentText()].keys(): # restore values saved for number of samples configured for selected categorical file srs_table = dockwidget.srs_tables[ dockwidget.QCBox_CategRaster_StraRS.currentText()][srs_method] else: from AcATaMa.core.raster import get_color_table # init a new stratified random sampling table srs_table = { "color_table": get_color_table( dockwidget.QCBox_CategRaster_StraRS.currentLayer(), band=int( dockwidget.QCBox_band_CategRaster_StraRS.currentText()), nodata=int(dockwidget.nodata_CategRaster_StraRS.value())) } if not srs_table["color_table"]: # clear table dockwidget.QTableW_StraRS.setRowCount(0) dockwidget.QTableW_StraRS.setColumnCount(0) # unselect dockwidget.QCBox_StraRS_Method.setCurrentIndex(-1) return srs_table["row_count"] = len( list(srs_table["color_table"].values())[0]) if srs_method == "fixed values": srs_table["header"] = ["Pix Val", "Color", "Num Samples"] srs_table["column_count"] = len(srs_table["header"]) srs_table["num_samples"] = [str(0)] * srs_table["row_count"] srs_table["On"] = [True] * srs_table["row_count"] if srs_method == "area based proportion": srs_table["header"] = [ "Pix Val", "Color", "Num Samples", "Std Error", "On" ] srs_table["column_count"] = len(srs_table["header"]) srs_table["std_error"] = [str(0.01)] * srs_table["row_count"] srs_table["pixel_count"] = list( get_pixel_count_by_pixel_values( dockwidget.QCBox_CategRaster_StraRS.currentLayer(), int(dockwidget.QCBox_band_CategRaster_StraRS.currentText() ), srs_table["color_table"]["Pixel Value"]).values()) total_std_error = dockwidget.TotalExpectedSE.value() srs_table["On"] = [True] * srs_table["row_count"] srs_table[ "num_samples"] = get_num_samples_by_area_based_proportion( srs_table, total_std_error) # save srs table if dockwidget.QCBox_CategRaster_StraRS.currentText( ) not in dockwidget.srs_tables.keys(): dockwidget.srs_tables[ dockwidget.QCBox_CategRaster_StraRS.currentText()] = {} dockwidget.srs_tables[dockwidget.QCBox_CategRaster_StraRS.currentText( )][srs_method] = srs_table # update content update_srs_table_content(dockwidget, srs_table)