if count == 0: majority = 0 minority = 0 majority_p = 0 minority_p = 0 else: minority, majority = freq_min_max(freq) minority = int(minority) majority = int(majority) minority_p = float(freq[minority]) / count majority_p = float(freq[majority]) / count # write to layer outFeat.setGeometry(feat.geometry()) attrs = feat.attributes() + [majority, majority_p, minority, minority_p] outFeat.setAttributes(attrs) layer_writer.addFeature(outFeat) # write to table row = [feat[id_field], majority] for v in values: if v in freq: row.append(float(freq[v]) / count) else: row.append(0) table_writer.addRecord(row) progress.setPercentage(100) del table_writer del layer_writer
##Fields=Field Input ##Frequency=output table from processing.tools.vector import TableWriter from collections import defaultdict from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException layer = processing.getObject(Input) inputFields = layer.pendingFields() fieldIdxs = [] fields = Fields.split(',') for f in fields: idx = inputFields.indexFromName(f) if idx == -1: raise GeoAlgorithmExecutionException('Field not found:' + f) fieldIdxs.append(idx) writer = TableWriter(Frequency, None, fields + ['FREQ']) counts = {} feats = processing.features(layer) nFeats = len(feats) counts = defaultdict(int) for i, feat in enumerate(feats): progress.setPercentage(int(100 * i / nFeats)) attrs = feat.attributes() clazz = tuple([attrs[i] for i in fieldIdxs]) counts[clazz] += 1 for c in counts: writer.addRecord(list(c) + [counts[c]])
vprovider = vlayer.dataProvider() fieldindex = vlayer.fieldNameIndex(fieldname) fields = vprovider.fields() fields.append(QgsField('NUM_FIELD', QVariant.Int)) layer_writer = VectorWriter(Equivalent_numerical_field_layer, None, fields, vprovider.geometryType(), vlayer.crs()) table_writer = TableWriter(Equivalent_numerical_field_table, None, [fieldname, 'num']) outFeat = QgsFeature() inGeom = QgsGeometry() nElement = 0 classes = {} features = vector.features(vlayer) nFeat = len(features) for feature in features: progress.setPercentage(int(100 * nElement / nFeat)) nElement += 1 inGeom = feature.geometry() outFeat.setGeometry(inGeom) atMap = feature.attributes() clazz = atMap[fieldindex] if clazz not in classes: classes[clazz] = len(classes.keys()) table_writer.addRecord([clazz, classes[clazz]]) atMap.append(classes[clazz]) outFeat.setAttributes(atMap) layer_writer.addFeature(outFeat) del layer_writer del table_writer
geometry = feature.GetGeometryRef() x = geometry.GetX() y = geometry.GetY() if Transform_vector_to_raster_CRS: pnt = coordTransform.TransformPoint(x, y, 0) x = pnt[0] y = pnt[1] (rX, rY) = mapToPixel(x, y, geoTransform) if rX >= rasterXSize or rY >= rasterYSize: feature = layer.GetNextFeature() continue value = data[rY, rX] col.append(value) feature = layer.GetNextFeature() rasterBand = None columns.append(col) raster = None vector.Destroy() writer = TableWriter(Output_table, 'utf-8', []) row = [] for i in xrange(len(columns[0])): for col in columns: row.append(col[i]) writer.addRecord(row) row[:] = []
fieldindex = vlayer.fieldNameIndex(fieldname) fields = vprovider.fields() fields.append(QgsField('NUM_FIELD', QVariant.Int)) layer_writer = VectorWriter(Equivalent_numerical_field_layer, None, fields, vprovider.geometryType(), vlayer.crs()) table_writer = TableWriter(Equivalent_numerical_field_table, None, [fieldname, 'num']) outFeat = QgsFeature() inGeom = QgsGeometry() nElement = 0 classes = {} features = vector.features(vlayer) nFeat = len(features) for feature in features: progress.setPercentage(int(100 * nElement / nFeat)) nElement += 1 inGeom = feature.geometry() outFeat.setGeometry(inGeom) atMap = feature.attributes() clazz = atMap[fieldindex] if clazz not in classes: classes[clazz] = len(classes.keys()) table_writer.addRecord([clazz, classes[clazz]]) atMap.append(classes[clazz]) outFeat.setAttributes(atMap) layer_writer.addFeature(outFeat) del layer_writer del table_writer
freq = stats['freq'] if count == 0: majority = 0 minority = 0 majority_p = 0 minority_p = 0 else: minority, majority = freq_min_max(freq) minority = int(minority) majority = int(majority) minority_p = float(freq[minority]) / count majority_p = float(freq[majority]) / count # write to layer outFeat.setGeometry(feat.geometry()) attrs = feat.attributes() + [majority, majority_p, minority, minority_p] outFeat.setAttributes(attrs) layer_writer.addFeature(outFeat) # write to table row = [feat[id_field], majority] for v in values: if v in freq: row.append(float(freq[v]) / count) else: row.append(0) table_writer.addRecord(row) progress.setPercentage(100)