def load_from_active_layer(self, only_selected=False): self.file_data = None self.table_chooser.file_header = None active_layer = utils.get_active_layer() if not active_layer: utils.MessagebarAndLog.critical(bar_msg=ru(QCoreApplication.translate('GeneralCsvImportGui', 'Import error, no layer selected.'))) return None if not only_selected: active_layer.selectAll() features = list(active_layer.getSelectedFeatures()) file_data = [[ru(field.name()) for field in active_layer.fields()]] [file_data.append([ru(attr) if all([ru(attr).strip() != 'NULL' if attr is not None else '', attr is not None]) else '' for attr in feature]) for feature in features] geometries = [feature.geometry().asWkt() if feature.geometry().asWkt() else None for feature in features] if any(geometries): geom_name = 'geometry' while geom_name in file_data[0]: geom_name += '_' file_data[0].append(geom_name) [file_data[idx+1].append(wkt) for idx, wkt in enumerate(geometries)] self.file_data = file_data self.table_chooser.file_header = file_data[0]
def load_from_active_layer(self, only_selected=False): self.file_data = None self.table_chooser.file_header = None active_layer = utils.get_active_layer() if not active_layer: utils.MessagebarAndLog.critical(bar_msg=ru( QCoreApplication.translate( u'GeneralCsvImportGui', u'Import error, no layer selected.'))) return None if not only_selected: active_layer.selectAll() features = active_layer.selectedFeaturesIterator() file_data = [[ru(field.name()) for field in active_layer.fields()]] for feature in features: file_data.append([ ru(attr) if all([ ru(attr).strip() != u'NULL' if attr is not None else u'', attr is not None ]) else u'' for attr in feature ]) self.file_data = file_data self.table_chooser.file_header = file_data[0]
def print_selected_features(self): """ Returns a list of obsid as unicode thelayer is an optional argument, if not given then activelayer is used """ activelayer = utils.get_active_layer() if activelayer is not self.activelayer: self.reload_combobox() utils.MessagebarAndLog.warning( bar_msg=ru(QCoreApplication.translate('ValuesFromSelectedFeaturesGui', 'Column list reloaded. Select column and press Ok.'))) return None self.selected_column = self.columns.currentText() selected_values = utils.getselectedobjectnames(thelayer=self.activelayer, column_name=self.selected_column) if not selected_values: utils.MessagebarAndLog.info(bar_msg=ru(QCoreApplication.translate('ValuesFromSelectedFeaturesGui', 'No features selected!'))) else: if self.unique_sorted_list_checkbox.isChecked(): selected_values = sorted(set(selected_values)) nr = len(selected_values) utils.MessagebarAndLog.info(bar_msg=ru( QCoreApplication.translate('ValuesFromSelectedFeaturesGui', 'List of %s selected %s written to log'))%(str(nr), self.selected_column), log_msg='{} IN ({})'.format(self.selected_column, ', '.join(["'{}'".format(value) if value is not None else 'NULL' for value in selected_values]))) self.close()
def reload_combobox(self): self.activelayer = utils.get_active_layer() if not isinstance(self.activelayer, QgsVectorLayer): utils.MessagebarAndLog.warning(bar_msg=ru( QCoreApplication.translate('ValuesFromSelectedFeaturesGui', 'Must select a vector layer!'))) return None self.columns.clear() fields = [field.name() for field in self.activelayer.fields()] self.columns.addItems(sorted(fields)) if self.selected_column is None or self.selected_column not in fields: self.selected_column = 'obsid' gui_utils.set_combobox(self.columns, self.selected_column, add_if_not_exists=False)
def print_selected_features(self): """ Returns a list of obsid as unicode thelayer is an optional argument, if not given then activelayer is used """ activelayer = utils.get_active_layer() if activelayer is not self.activelayer: self.reload_combobox() utils.MessagebarAndLog.warning(bar_msg=ru( QCoreApplication.translate( 'ValuesFromSelectedFeaturesGui', 'Column list reloaded. Select column and press Ok.'))) return None self.selected_column = self.columns.currentText() selected = activelayer.selectedFeatures() idx = activelayer.dataProvider().fieldNameIndex(self.selected_column) if idx == -1: idx = activelayer.dataProvider().fieldNameIndex( self.selected_column.upper()) # backwards compatibility selected_values = [obs[idx] for obs in selected ] # value in column obsid is stored as unicode selected_feature_ids = [f.id() for f in selected] if not selected_values: utils.MessagebarAndLog.info(bar_msg=ru( QCoreApplication.translate('ValuesFromSelectedFeaturesGui', 'No features selected!'))) else: if self.unique_sorted_list_checkbox.isChecked(): selected_values = sorted(set(selected_values)) nr = len(selected_values) filter_string = '"{}" IN ({})'.format( self.selected_column, ', '.join([ "'{}'".format(value.replace("'", "''")) if isinstance( value, str) else str(value) for value in selected_values if value is not None ])) nulls = [value for value in selected_values if value is None] if nulls: filter_string += ' or "{}" IS NULL'.format( self.selected_column) #filter_layer_checkbox bar_prefix = '' msg = '' if self.filter_layer_checkbox.isChecked(): try: activelayer.setSubsetString(filter_string) except Exception as e: bar_prefix = 'Filtering failed! ' msg = 'Filtering failed, msg: ' + str(e) activelayer.selectByIds(selected_feature_ids) utils.MessagebarAndLog.info(bar_msg=ru( QCoreApplication.translate( 'ValuesFromSelectedFeaturesGui', bar_prefix + 'List of %s selected %s written to log')) % (str(nr), self.selected_column), log_msg=filter_string + '\n' + msg) self.close()