Exemplo n.º 1
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('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]
Exemplo n.º 2
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 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]
Exemplo n.º 4
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()
Exemplo n.º 5
0
 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)
Exemplo n.º 6
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 = 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()