def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( layer.pendingFields().toList(), QGis.WKBPoint, layer.crs()) outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) for f in features: inGeom = f.geometry() attrs = f.attributes() points = utils.extractPoints(inGeom) outFeat.setAttributes(attrs) for i in points: outFeat.setGeometry(outGeom.fromPoint(i)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(), QGis.WKBPoint, layer.crs()) outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) for f in features: inGeom = f.geometry() attrs = f.attributes() points = utils.extractPoints(inGeom) outFeat.setAttributes(attrs) for i in points: outFeat.setGeometry(outGeom.fromPoint(i)) writer.addFeature(outFeat) current += 1 progress.setPercentage(int(current * total)) del writer
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue( self.POINTS)) weightField = self.getParameterValue(self.WEIGHT) uniqueField = self.getParameterValue(self.UID) weightIndex = layer.fieldNameIndex(weightField) uniqueIndex = layer.fieldNameIndex(uniqueField) fieldList = [ QgsField("MEAN_X", QVariant.Double, "", 24, 15), QgsField("MEAN_Y", QVariant.Double, "", 24, 15), QgsField("UID", QVariant.String, "", 255) ] writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( fieldList, QGis.WKBPoint, layer.crs()) current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) means = {} for feat in features: current += 1 progress.setPercentage(current * total) clazz = str(feat.attributes()[uniqueIndex]).strip() if weightIndex == -1: weight = 1.00 else: try: weight = float(feat.attributes()[weightIndex]) except: weight = 1.00 if clazz not in means: means[clazz] = (0, 0, 0) cx, cy, totalweight = means[clazz] geom = QgsGeometry(feat.geometry()) geom = utils.extractPoints(geom) for i in geom: cx += i.x() * weight cy += i.y() * weight totalweight += weight means[clazz] = (cx, cy, totalweight) for clazz, values in means.iteritems(): outFeat = QgsFeature() cx = values[0] / values[2] cy = values[1] / values[2] meanPoint = QgsPoint(cx, cy) outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint)) outFeat.setAttributes([cx, cy, clazz]) writer.addFeature(outFeat) del writer
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS)) weightField = self.getParameterValue(self.WEIGHT) uniqueField = self.getParameterValue(self.UID) weightIndex = layer.fieldNameIndex(weightField) uniqueIndex = layer.fieldNameIndex(uniqueField) fieldList = [QgsField("MEAN_X", QVariant.Double, "", 24, 15), QgsField("MEAN_Y", QVariant.Double, "", 24, 15), QgsField("UID", QVariant.String, "", 255) ] writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList, QGis.WKBPoint, layer.crs()) current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) means = {} for feat in features: current += 1 progress.setPercentage(current * total) clazz = str(feat.attributes()[uniqueIndex]).strip() if weightIndex == -1: weight = 1.00 else: try: weight = float(feat.attributes()[weightIndex]) except: weight = 1.00 if clazz not in means: means[clazz] = (0,0,0) cx,cy, totalweight = means[clazz] geom = QgsGeometry(feat.geometry()) geom = utils.extractPoints(geom) for i in geom: cx += i.x() * weight cy += i.y() * weight totalweight += weight means[clazz] = (cx, cy, totalweight) for clazz, values in means.iteritems(): outFeat = QgsFeature() cx = values[0] / values[2] cy = values[1] / values[2] meanPoint = QgsPoint(cx, cy) outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint)) outFeat.setAttributes([cx, cy, clazz]) writer.addFeature(outFeat) del writer
def processAlgorithm(self, progress): useField = (self.getParameterValue(ConvexHull.METHOD) == 1) fieldName = self.getParameterValue(ConvexHull.FIELD) layer = QGisLayers.getObjectFromUri(self.getParameterValue(ConvexHull.INPUT)) f = QgsField("value") f.setType(QVariant.String) f.setLength(255) if useField: index = layer.fieldNameIndex(fieldName) fType = layer.pendingFields()[index].type() if fType == QVariant.Int: f.setType(QVariant.Int) f.setLength(20) elif fType == QVariant.Double: f.setType(QVariant.Double) f.setLength(20) f.setPrecision(6) else: f.setType(QVariant.String) f.setLength(255) fields = [QgsField("id", QVariant.Int, "", 20), f, QgsField("area", QVariant.Double, "", 20, 6), QgsField("perim", QVariant.Double, "", 20, 6) ] writer = self.getOutputFromName(ConvexHull.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, layer.dataProvider().crs()) outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() current = 0 fid = 0 val = "" if useField: unique = layer.uniqueValues(index) total = 100.0 / float(layer.featureCount() * len (unique)) for i in unique: hull = [] first = True features = QGisLayers.features(layer) for f in features: idVar = f[fieldName] if unicode(idVar).strip() == unicode(i).strip: if first: val = idVar first = False inGeom = QgsGeometry(f.geometry()) points = utils.extractPoints(inGeom) hull.extend(points) current += 1 progress.setPercentage(int(current * total)) if len(hull) >= 3: tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull)) try: outGeom = tmpGeom.convexHull() (area, perim) = utils.simpleMeasure(outGeom) outFeat.setGeometry(outGeom) outFeat.setAttributes([fid,val,area,perim]) writer.addFeature(outFeat) except: raise GeoAlgorithmExecutionException("Exception while computing convex hull") fid += 1 else: hull = [] total = 100.0 / float(layer.featureCount()) features = QGisLayers.features(layer) for f in features: inGeom = QgsGeometry(f.geometry()) points = utils.extractPoints(inGeom) hull.extend(points) current += 1 progress.setPercentage(int(current * total)) tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull)) try: outGeom = tmpGeom.convexHull() (area, perim) = utils.simpleMeasure(outGeom) outFeat.setGeometry(outGeom) outFeat.setAttributes([0, "all", area, perim]) writer.addFeature(outFeat) except: raise GeoAlgorithmExecutionException("Exception while computing convex hull") del writer