def processAlgorithm(self, progress): vlayer = QGisLayers.getObjectFromUri( self.getParameterValue(ExtractNodes.INPUT)) vprovider = vlayer.dataProvider() allAttrs = vprovider.attributeIndexes() vprovider.select(allAttrs) fields = vprovider.fields() writer = self.getOutputFromName(ExtractNodes.OUTPUT).getVectorWriter( fields, QGis.WKBPoint, vprovider.crs()) inFeat = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() nFeat = vprovider.featureCount() nElement = 0 while vprovider.nextFeature(inFeat): nElement += 1 progress.setPercentage(int(nElement / nFeat * 100)) inGeom = inFeat.geometry() atMap = inFeat.attributeMap() pointList = ftools_utils.extractPoints(inGeom) outFeat.setAttributeMap(atMap) for i in pointList: outFeat.setGeometry(outGeom.fromPoint(i)) writer.addFeature(outFeat) del writer
def percpoints(self,percent,list_distances,l): l=(l*percent)/100 hull=[] n=1 for k in sorted(list_distances.keys()): if n < l: points = ftools_utils.extractPoints( list_distances[k]) hull.extend( points ) n+=1 else: return hull return hull
def processAlgorithm(self, progress): vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(ExtractNodes.INPUT)) vprovider = vlayer.dataProvider() allAttrs = vprovider.attributeIndexes() vprovider.select( allAttrs ) fields = vprovider.fields() writer = self.getOutputFromName(ExtractNodes.OUTPUT).getVectorWriter(fields, QGis.WKBPoint, vprovider.crs() ) inFeat = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() nFeat = vprovider.featureCount() nElement = 0 while vprovider.nextFeature( inFeat ): nElement += 1 progress.setPercentage(int(nElement/nFeat * 100)) inGeom = inFeat.geometry() atMap = inFeat.attributeMap() pointList = ftools_utils.extractPoints( inGeom ) outFeat.setAttributeMap( atMap ) for i in pointList: outFeat.setGeometry( outGeom.fromPoint( i ) ) writer.addFeature( outFeat ) del writer
def processAlgorithm(self, progress): vlayer = QGisLayers.getObjectFromUri( self.getParameterValue(MeanCoords.POINTS)) weightField = self.getParameterValue(MeanCoords.WEIGHT) uniqueField = self.getParameterValue(MeanCoords.UID) provider = vlayer.dataProvider() weightIndex = provider.fieldNameIndex(weightField) uniqueIndex = provider.fieldNameIndex(uniqueField) feat = QgsFeature() allAttrs = provider.attributeIndexes() provider.select(allAttrs) sRs = provider.crs() if uniqueIndex <> -1: uniqueValues = ftools_utils.getUniqueValues( provider, int(uniqueIndex)) single = False else: uniqueValues = [QVariant(1)] single = True fieldList = { 0: QgsField("MEAN_X", QVariant.Double), 1: QgsField("MEAN_Y", QVariant.Double), 2: QgsField("UID", QVariant.String) } writer = self.getOutputFromName(MeanCoords.OUTPUT).getVectorWriter( fieldList, QGis.WKBPoint, sRs) outfeat = QgsFeature() points = [] weights = [] nFeat = provider.featureCount() * len(uniqueValues) nElement = 0 for j in uniqueValues: provider.rewind() provider.select(allAttrs) cx = 0.00 cy = 0.00 points = [] weights = [] while provider.nextFeature(feat): nElement += 1 progress.setPercentage(nElement / nFeat * 100) if single: check = j.toString().trimmed() else: check = feat.attributeMap()[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.attributeMap()[weightIndex].toDouble()[0]) except: weight = 1.00 geom = QgsGeometry(feat.geometry()) geom = ftools_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.addAttribute(0, QVariant(cx)) outfeat.addAttribute(1, QVariant(cy)) outfeat.addAttribute(2, QVariant(j)) writer.addFeature(outfeat) if single: break del writer
def processAlgorithm(self, progress): vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(MeanCoords.POINTS)) weightField = self.getParameterValue(MeanCoords.WEIGHT) uniqueField = self.getParameterValue(MeanCoords.UID) provider = vlayer.dataProvider() weightIndex = provider.fieldNameIndex(weightField) uniqueIndex = provider.fieldNameIndex(uniqueField) feat = QgsFeature() allAttrs = provider.attributeIndexes() provider.select(allAttrs) sRs = provider.crs() if uniqueIndex <> -1: uniqueValues = ftools_utils.getUniqueValues(provider, int( uniqueIndex ) ) single = False else: uniqueValues = [QVariant(1)] single = True fieldList = { 0 : QgsField("MEAN_X", QVariant.Double), 1 : QgsField("MEAN_Y", QVariant.Double), 2 : QgsField("UID", QVariant.String) } writer = self.getOutputFromName(MeanCoords.OUTPUT).getVectorWriter(fieldList, QGis.WKBPoint, sRs) outfeat = QgsFeature() points = [] weights = [] nFeat = provider.featureCount() * len(uniqueValues) nElement = 0 for j in uniqueValues: provider.rewind() provider.select(allAttrs) cx = 0.00 cy = 0.00 points = [] weights = [] while provider.nextFeature(feat): nElement += 1 progress.setPercentage(nElement/nFeat * 100) if single: check = j.toString().trimmed() else: check = feat.attributeMap()[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.attributeMap()[weightIndex].toDouble()[0]) except: weight = 1.00 geom = QgsGeometry(feat.geometry()) geom = ftools_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.addAttribute(0, QVariant(cx)) outfeat.addAttribute(1, QVariant(cy)) outfeat.addAttribute(2, QVariant(j)) writer.addFeature(outfeat) if single: break del writer
def processAlgorithm(self, progress): currentPath = os.path.dirname(os.path.abspath(__file__)) perc=self.getParameterValue(href.PERCENT) if perc > 100: perc=100 res=50 field = self.getParameterValue(href.FIELD) vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(href.INPUT)) self.epsg = vlayerA.crs().srsid() GEOS_EXCEPT = True FEATURE_EXCEPT = True vproviderA = vlayerA.dataProvider() name = vlayerA.name() allAttrsA = vproviderA.attributeIndexes() try: vproviderA.select(allAttrsA) except: pass try: fields = { 0 : QgsField("ID", QVariant.String), 1 : QgsField("Area", QVariant.Double), 2 : QgsField("Perim", QVariant.Double) } writer = self.getOutputFromName(href.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vproviderA.crs()) except: fields = [QgsField("ID", QVariant.String), QgsField("Area", QVariant.Double), QgsField("Perim", QVariant.Double) ] writer = self.getOutputFromName(href.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vproviderA.crs()) inFeat = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() index = vproviderA.fieldNameIndex(field) features = QGisLayers.features(vlayerA) nFeat = len(features) unique = ftools_utils.getUniqueValues(vproviderA, index) nFeat = nFeat * len(unique) progress_perc= 100/len(unique) n = 0 outID = 0 for i in unique: nElement=0 xPoints = [] yPoints = [] first = True try: vproviderA.select(allAttrsA) except: pass features = QGisLayers.features(vlayerA) for inFeat in features: try: atMap = inFeat.attributeMap() except: atMap = inFeat.attributes() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): nElement += 1 inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_utils.extractPoints( inGeom ) xPoints.append(points[0].x()) yPoints.append(points[0].y()) if len(xPoints) == 0: #number of selected features continue xmin = min(xPoints) - 0.5*(max(xPoints)-min(xPoints)) xmax = max(xPoints) + 0.5*(max(xPoints)-min(xPoints)) ymin = min(yPoints) - 0.5*(max(yPoints)-min(yPoints)) ymax = max(yPoints) + 0.5*(max(yPoints)-min(yPoints)) X,Y = np.mgrid[xmin:xmax:complex(res), ymin:ymax:complex(res)] positions = np.vstack([X.ravel(), Y.ravel()]) values = np.vstack([xPoints,yPoints]) # scipy.stats.kde.gaussian_kde -- # Representation of a kernel-density estimate using Gaussian kernels. kernel = stats.kde.gaussian_kde(values) Z = np.reshape(kernel(positions).T, X.T.shape) raster_name = str(name)+'_'+str(perc)+'_'+str(i.toString())+ '_'+str(datetime.date.today()) int = str(((100.0-perc)/2)) self.to_geotiff(currentPath+'/raster_output/'+raster_name, xmin,xmax,ymin,ymax,X,Y, Z) if SextanteUtils.isWindows(): os.system("gdal_contour.exe "+currentPath+"/raster_output/" +raster_name+" -a values -fl " + int + " " + currentPath+"/c"+str(n)+".shp") else: os.system("gdal_contour "+currentPath+"/raster_output/" +raster_name+" -a values -fl " + int + " " + currentPath+"/c"+str(n)+".shp") layer = QgsVectorLayer(currentPath+"/c"+str(n)+".shp", "c"+str(n), "ogr") provider = layer.dataProvider() feat = QgsFeature() allAttrs = provider.attributeIndexes() try: provider.select(allAttrs) except: pass caps = layer.dataProvider().capabilities() fldDesc = provider.fieldNameIndex("values") arrayid=[] polyGeom = [] feature_list = [] multi_feature = [] area = 0 perim = 0 measure = QgsDistanceArea() try: while provider.nextFeature( feat ): id = feat.id() attrs = feat.attributeMap() outGeom = feat.geometry().asPolyline() perim=perim + measure.measurePerimeter(QgsGeometry.fromPolygon([outGeom])) area=area + measure.measure(QgsGeometry.fromPolygon([outGeom])) polyGeom.append(outGeom) except: features = QGisLayers.features(layer) for feat in features: id = feat.id() attrs = feat.attributes() outGeom = feat.geometry().asPolyline() perim=perim + measure.measurePerimeter(QgsGeometry.fromPolygon([outGeom])) area=area + measure.measure(QgsGeometry.fromPolygon([outGeom])) polyGeom.append(outGeom) outFeat.setGeometry(QgsGeometry.fromPolygon(polyGeom)) try: outFeat.addAttribute( 0, QVariant( i.toString() ) ) outFeat.addAttribute( 1, QVariant( area ) ) outFeat.addAttribute( 2, QVariant( perim ) ) except: outFeat.setAttributes([QVariant(i.toString()),QVariant(area),QVariant(perim)]) writer.addFeature(outFeat) outID+=1 layer.dataProvider().deleteFeatures(arrayid) if SextanteUtils.isWindows(): os.system('del '+currentPath+'/c'+str(n)+'.*') else: os.system('rm '+currentPath+'/c'+str(n)+'.*') n+=1 progress.setPercentage(progress_perc*n) 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): useSelection = self.getParameterValue(ConvexHull.USE_SELECTED) 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 = { 0: QgsField("ID", QVariant.Int), 1: QgsField("Area", QVariant.Double), 2: 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) # there is selection in input layer if useSelection: nFeat = vlayerA.selectedFeatureCount() selectionA = vlayerA.selectedFeatures() if useField: unique = ftools_utils.getUniqueValues(vproviderA, index) nFeat = nFeat * len(unique) for i in unique: hull = [] first = True outID = 0 for inFeat in selectionA: atMap = inFeat.attributeMap() idVar = atMap[index] if idVar.toString().trimmed() == i.toString().trimmed( ): if first: outID = idVar first = False inGeom = QgsGeometry(inFeat.geometry()) points = ftools_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 = [] for inFeat in selectionA: inGeom = QgsGeometry(inFeat.geometry()) points = ftools_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) writer.addFeature(outFeat) except: GEOS_EXCEPT = False # there is no selection in input layer else: rect = vlayerA.extent() nFeat = vproviderA.featureCount() if useField: unique = ftools_utils.getUniqueValues(vproviderA, index) nFeat = nFeat * len(unique) for i in unique: hull = [] first = True outID = 0 vproviderA.select(allAttrsA) #, rect ) #vproviderA.rewind() while vproviderA.nextFeature(inFeat): atMap = inFeat.attributeMap() idVar = atMap[index] if idVar.toString().trimmed() == i.toString().trimmed( ): if first: outID = idVar first = False inGeom = QgsGeometry(inFeat.geometry()) points = ftools_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.rewind() vproviderA.select(allAttrsA) while vproviderA.nextFeature(inFeat): inGeom = QgsGeometry(inFeat.geometry()) points = ftools_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) 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): perc=self.getParameterValue(mcp.PERCENT) field = self.getParameterValue(mcp.FIELD) vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(mcp.INPUT)) GEOS_EXCEPT = True FEATURE_EXCEPT = True vproviderA = vlayerA.dataProvider() allAttrsA = vproviderA.attributeIndexes() try: vproviderA.select(allAttrsA) except: pass try: fields = { 0 : QgsField("ID", QVariant.String), 1 : QgsField("Area", QVariant.Double), 2 : QgsField("Perim", QVariant.Double) } writer = self.getOutputFromName(mcp.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vproviderA.crs()) except: fields = [QgsField("ID", QVariant.String), QgsField("Area", QVariant.Double), QgsField("Perim", QVariant.Double) ] writer = self.getOutputFromName(mcp.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) unique = ftools_utils.getUniqueValues(vproviderA, index) nFeat = nFeat * len(unique) progress_perc=100/len(unique) n = 0 for i in unique: nElement=0 hull = [] cx = 0.00 #x of mean coodinate cy = 0.00 #y of mean coordinate first = True nf = 0 try: vproviderA.select(allAttrsA) except: pass try: while vproviderA.nextFeature(inFeat): atMap = inFeat.attributeMap() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_utils.extractPoints( inGeom ) cx += points[0].x() cy += points[0].y() nf+=1 except: features = QGisLayers.features(vlayerA) for feat in features: atMap = feat.attributes() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): inGeom = QgsGeometry( feat.geometry() ) points = ftools_utils.extractPoints( inGeom ) cx += points[0].x() cy += points[0].y() nf+=1 cx=(cx / nf) cy=(cy / nf) meanPoint = QgsPoint(cx, cy) distArea = QgsDistanceArea() dist={} features = QGisLayers.features(vlayerA) for inFeat in features: try: atMap = inFeat.attributeMap() except: atMap = inFeat.attributes() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): if first: first = False nElement += 1 inGeom = QgsGeometry( inFeat.geometry() ) dis_meas = distArea.measureLine(meanPoint, inGeom.asPoint()) dist[dis_meas]= inGeom if perc == 100: points = ftools_utils.extractPoints( inGeom ) hull.extend( points ) if perc <> 100: if perc > 100: perc = 100 SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Please insert a valid percentage (0-100%)") hull=self.percpoints(perc,dist,nElement) if len( hull ) >= 3: nfeat = len(hull) * perc / 100 tmpGeom = QgsGeometry( outGeom.fromMultiPoint( hull ) ) try: outGeom = tmpGeom.convexHull() outFeat.setGeometry( outGeom ) measure = QgsDistanceArea() perim=measure.measurePerimeter(outGeom) area=measure.measure(outGeom) try: outFeat.addAttribute( 0, QVariant( i.toString() ) ) outFeat.addAttribute( 1, QVariant( area ) ) outFeat.addAttribute( 2, QVariant( perim ) ) except: outFeat.setAttributes([QVariant(i.toString()),QVariant(area),QVariant(perim)]) writer.addFeature( outFeat ) except: GEOS_EXCEPT = False continue n+=1 progress.setPercentage(progress_perc*n) 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): useSelection = self.getParameterValue(ConvexHull.USE_SELECTED) 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 = { 0 : QgsField("ID", QVariant.Int), 1 : QgsField("Area", QVariant.Double), 2 : 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) # there is selection in input layer if useSelection: nFeat = vlayerA.selectedFeatureCount() selectionA = vlayerA.selectedFeatures() if useField: unique = ftools_utils.getUniqueValues( vproviderA, index ) nFeat = nFeat * len( unique ) for i in unique: hull = [] first = True outID = 0 for inFeat in selectionA: atMap = inFeat.attributeMap() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): if first: outID = idVar first = False inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_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 = [] for inFeat in selectionA: inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_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 ) writer.addFeature( outFeat ) except: GEOS_EXCEPT = False # there is no selection in input layer else: rect = vlayerA.extent() nFeat = vproviderA.featureCount() if useField: unique = ftools_utils.getUniqueValues( vproviderA, index ) nFeat = nFeat * len( unique ) for i in unique: hull = [] first = True outID = 0 vproviderA.select( allAttrsA )#, rect ) #vproviderA.rewind() while vproviderA.nextFeature( inFeat ): atMap = inFeat.attributeMap() idVar = atMap[ index ] if idVar.toString().trimmed() == i.toString().trimmed(): if first: outID = idVar first = False inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_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.rewind() vproviderA.select(allAttrsA) while vproviderA.nextFeature( inFeat ): inGeom = QgsGeometry( inFeat.geometry() ) points = ftools_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 ) 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")