@@ -114,6 +114,15 @@ def manageGui(self):
114
114
self .lineEdit .setRange (0 , 100 )
115
115
self .lineEdit .setSingleStep (5 )
116
116
self .lineEdit .setValue (0 )
117
+ elif self .myFunction == 11 : #Lines to polygons
118
+ self .setWindowTitle ( self .tr ( "Lines to polygons" ) )
119
+ self .label_2 .setText ( self .tr ( "Output shapefile" ) )
120
+ self .label_3 .setText ( self .tr ( "Input line vector layer" ) )
121
+ self .label .setVisible (False )
122
+ self .lineEdit .setVisible (False )
123
+ self .cmbField .setVisible (False )
124
+ self .field_label .setVisible (False )
125
+
117
126
else : # Polygon from layer extent
118
127
self .setWindowTitle ( self .tr ( "Polygon from layer extent" ) )
119
128
self .label_3 .setText ( self .tr ( "Input layer" ) )
@@ -133,6 +142,8 @@ def manageGui(self):
133
142
myList = ftools_utils .getLayerNames ( [ QGis .Point ] )
134
143
elif self .myFunction == 9 :
135
144
myList = ftools_utils .getLayerNames ( "all" )
145
+ elif self .myFunction == 11 :
146
+ myList = ftools_utils .getLayerNames ( [ QGis .Line ] )
136
147
else :
137
148
myList = ftools_utils .getLayerNames ( [ QGis .Point , QGis .Line , QGis .Polygon ] )
138
149
self .inShape .addItems ( myList )
@@ -148,6 +159,7 @@ def manageGui(self):
148
159
#8: Delaunay triangulation
149
160
#9: Polygon from layer extent
150
161
#10:Voronoi polygons
162
+ #11: Lines to polygons
151
163
152
164
def geometry ( self , myLayer , myParam , myField ):
153
165
if self .myFunction == 9 :
@@ -242,6 +254,8 @@ def run( self ):
242
254
success = self .layer_extent ()
243
255
elif self .myFunction == 10 : # Voronoi Polygons
244
256
success = self .voronoi_polygons ()
257
+ elif self .myFunction == 11 : # Lines to polygons
258
+ success = self .lines_to_polygons ()
245
259
self .emit ( SIGNAL ( "runFinished(PyQt_PyObject)" ), success )
246
260
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), 0 )
247
261
@@ -393,6 +407,39 @@ def polygons_to_lines( self ):
393
407
del writer
394
408
return True
395
409
410
+ def lines_to_polygons ( self ):
411
+ vprovider = self .vlayer .dataProvider ()
412
+ allAttrs = vprovider .attributeIndexes ()
413
+ vprovider .select ( allAttrs )
414
+ fields = vprovider .fields ()
415
+ writer = QgsVectorFileWriter ( self .myName , self .myEncoding ,
416
+ fields , QGis .WKBPolygon , vprovider .crs () )
417
+ inFeat = QgsFeature ()
418
+ outFeat = QgsFeature ()
419
+ inGeom = QgsGeometry ()
420
+ nFeat = vprovider .featureCount ()
421
+ nElement = 0
422
+ self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), 0 )
423
+ self .emit ( SIGNAL ( "runRange(PyQt_PyObject)" ), ( 0 , nFeat ) )
424
+ while vprovider .nextFeature (inFeat ):
425
+ outGeomList = []
426
+ multi = False
427
+ nElement += 1
428
+ self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
429
+ if inFeat .geometry ().isMultipart ():
430
+ outGeomList = inFeat .geometry ().asMultiPolyline ()
431
+ multi = True
432
+ else :
433
+ outGeomList .append ( inFeat .geometry ().asPolyline () )
434
+ polyGeom = self .remove_bad_lines ( outGeomList )
435
+ if len (polyGeom ) <> 0 :
436
+ outFeat .setGeometry ( QgsGeometry .fromPolygon ( polyGeom ) )
437
+ atMap = inFeat .attributeMap ()
438
+ outFeat .setAttributeMap ( atMap )
439
+ writer .addFeature ( outFeat )
440
+ del writer
441
+ return True
442
+
396
443
def export_geometry_info ( self ):
397
444
vprovider = self .vlayer .dataProvider ()
398
445
allAttrs = vprovider .attributeIndexes ()
@@ -798,6 +845,17 @@ def extractAsLine( self, geom ):
798
845
else :
799
846
return []
800
847
848
+ def remove_bad_lines ( self , lines ):
849
+ temp_geom = []
850
+ if len (lines )== 1 :
851
+ if len (lines [0 ]) > 2 :
852
+ temp_geom = lines
853
+ else :
854
+ temp_geom = []
855
+ else :
856
+ temp_geom = [elem for elem in lines if len (elem ) > 2 ]
857
+ return temp_geom
858
+
801
859
def singleToMultiGeom (self , wkbType ):
802
860
try :
803
861
if wkbType in (QGis .WKBPoint , QGis .WKBMultiPoint ,
0 commit comments