def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) provider = layer.dataProvider() writer = self.getOutputFromName(self.OUTPUT).getVectorWriter( layer.pendingFields(), QGis.WKBPoint, provider.crs() ) outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() current = 0 features = QGisLayers.features(layer) total = 100.0 / float(len(features)) for inFeat in features: inGeom = inFeat.geometry() atMap = inFeat.attributes() points = utils.extractPoints(inGeom) outFeat.setAttributes(atMap) 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)) GEOS_EXCEPT = True FEATURE_EXCEPT = True index = layer.fieldNameIndex(fieldName) fType = layer.pendingFields()[index].type() f = QgsField("value") f.setType(QVariant.String) f.setLength(255) if useField: 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 idVar.toString().trimmed() == i.toString().trimmed(): 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([ QVariant(fid), QVariant(val), QVariant(area), QVariant(perim) ]) writer.addFeature(outFeat) except: GEOS_EXCEPT = False continue 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([ QVariant(0), QVariant("all"), QVariant(area), QVariant(perim) ]) writer.addFeature(outFeat) except: GEOS_EXCEPT = False del writer if not GEOS_EXCEPT: SextanteLog.addToLog( SextanteLog.LOG_WARNING, "Geometry exception while computing convex hull") if not FEATURE_EXCEPT: SextanteLog.addToLog( SextanteLog.LOG_WARNING, "Feature exception while computing convex hull")
def processAlgorithm(self, progress): layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS)) weightField = self.getParameterValue(self.WEIGHT) uniqueField = self.getParameterValue(self.UID) provider = layer.dataProvider() weightIndex = layer.fieldNameIndex(weightField) uniqueIndex = layer.fieldNameIndex(uniqueField) if uniqueIndex <> -1: uniqueValues = utils.getUniqueValues(layer, uniqueIndex) single = False else: uniqueValues = [QVariant(1)] single = True 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 total = 100.0 / float(provider.featureCount() * len(uniqueValues)) outFeat = QgsFeature() for j in uniqueValues: cx = 0.00 cy = 0.00 points = [] weights = [] features = QGisLayers.features(layer) for feat in features: current += 1 progress.setPercentage(current * total) if single: check = j.toString().trimmed() else: check = feat.attributes()[uniqueIndex].toString().trimmed() if check == j.toString().trimmed(): cx = 0.00 cy = 0.00 if weightIndex == -1: weight = 1.00 else: try: weight = float(feat.attributes()[weightIndex].toDouble()[0]) except: weight = 1.00 geom = QgsGeometry(feat.geometry()) geom = utils.extractPoints(geom) for i in geom: cx += i.x() cy += i.y() points.append(QgsPoint((cx / len(geom)), (cy / len(geom)))) weights.append(weight) sumWeight = sum(weights) cx = 0.00 cy = 0.00 item = 0 for item, i in enumerate(points): cx += i.x() * weights[item] cy += i.y() * weights[item] cx = cx / sumWeight cy = cy / sumWeight meanPoint = QgsPoint(cx, cy) outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint)) outFeat.setAttributes([QVariant(cx), QVariant(cy), QVariant(j)]) writer.addFeature(outFeat) if single: break 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
def processAlgorithm(self, progress): useField = (self.getParameterValue(ConvexHull.METHOD) == 1) field = self.getParameterValue(ConvexHull.FIELD) vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(ConvexHull.INPUT)) GEOS_EXCEPT = True FEATURE_EXCEPT = True vproviderA = vlayerA.dataProvider() #allAttrsA = vproviderA.attributeIndexes() #vproviderA.select(allAttrsA) fields = [QgsField("ID", QVariant.Int), QgsField("Area", QVariant.Double), QgsField("Perim", QVariant.Double)] writer = self.getOutputFromName(ConvexHull.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vproviderA.crs()) inFeat = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() nElement = 0 index = vproviderA.fieldNameIndex(field) features = QGisLayers.features(vlayerA) nFeat = len(features) if useField: unique = utils.getUniqueValues(vproviderA, index) nFeat = nFeat * len(unique) for i in unique: hull = [] first = True outID = 0 #vproviderA.select(allAttrsA) features = QGisLayers.features(vlayerA) for inFeat in features: atMap = inFeat.attributes() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): if first: outID = idVar first = False inGeom = QgsGeometry(inFeat.geometry()) points = utils.extractPoints(inGeom) hull.extend(points) nElement += 1 progress.setPercentage(int(nElement / nFeat * 100)) if len(hull) >= 3: tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull)) try: outGeom = tmpGeom.convexHull() outFeat.setGeometry(outGeom) (area, perim) = self.simpleMeasure(outGeom) outFeat.addAttribute(0, QVariant(outID)) outFeat.addAttribute(1, QVariant(area)) outFeat.addAttribute(2, QVariant(perim)) writer.addFeature(outFeat) except: GEOS_EXCEPT = False continue else: hull = [] #vproviderA.select(allAttrsA) features = QGisLayers.features(vlayerA) for inFeat in features: inGeom = QgsGeometry(inFeat.geometry()) points = utils.extractPoints(inGeom) hull.extend(points) nElement += 1 progress.setPercentage(int(nElement / nFeat * 100)) tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull)) try: outGeom = tmpGeom.convexHull() outFeat.setGeometry(outGeom) (area, perim) = self.simpleMeasure(outGeom) #outFeat.addAttribute(0, QVariant("1")) #outFeat.addAttribute(1, QVariant(area)) #outFeat.addAttribute(2, QVariant(perim)) writer.addFeature(outFeat) except: GEOS_EXCEPT = False del writer if not GEOS_EXCEPT: SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Geometry exception while computing convex hull") if not FEATURE_EXCEPT: SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Feature exception while computing convex hull")