def merge(feature, features_input): """ Merge geometries from features list that touch given feature. """ count = 0 features_output = [ feature ] geom = QgsGeometry(feature.geometry()) #geom = QgsGeometry.fromPolygon(feature.geometry()) while True: breakloop = True for f in features_input: if f in features_output: continue g = f.geometry() #if geom.equals(g): # continue if geom.contains(g): continue if geom.within(g): geom = QgsGeometry(g) features_output.append(f) breakloop = False break if not geom.disjoint(g) or geom.touches(g) or geom.overlaps(g): geom = QgsGeometry(geom.combine(g)) features_output.append(f) breakloop = False break if breakloop: break return (geom, features_output)