Skip to content

Commit 76ed79a

Browse files
author
alexbruy
committedMar 6, 2011
add option to select shapefile geometry in merge shapes tool
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@15370 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

3 files changed

+68
-9
lines changed

3 files changed

+68
-9
lines changed
 

‎python/plugins/fTools/tools/doMergeShapes.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,14 @@ def changeMode( self ):
7474
self.label.setText( self.tr( "Input files" ) )
7575
QObject.disconnect( self.btnSelectDir, SIGNAL( "clicked()" ), self.inputDir )
7676
QObject.connect( self.btnSelectDir, SIGNAL( "clicked()" ), self.inputFile )
77+
self.lblGeometry.setEnabled( False )
78+
self.cmbGeometry.setEnabled( False )
7779
else:
7880
self.label.setText( self.tr( "Input directory" ) )
7981
QObject.disconnect( self.btnSelectDir, SIGNAL( "clicked()" ), self.inputFile )
8082
QObject.connect( self.btnSelectDir, SIGNAL( "clicked()" ), self.inputDir )
83+
self.lblGeometry.setEnabled( True )
84+
self.cmbGeometry.setEnabled( True )
8185

8286
def reject( self ):
8387
QDialog.reject( self )
@@ -95,25 +99,28 @@ def accept( self ):
9599
self.inputFiles = None
96100
return
97101

98-
self.progressFiles.setRange( 0, self.inputFiles.count() )
99-
100102
if self.outFileName is None:
101103
QMessageBox.warning( self, self.tr( "No output file" ),
102104
self.tr( "Please specify output file." ) )
103105
return
104106

105-
outFile = QFile( self.outFileName )
106-
if outFile.exists():
107-
if not QgsVectorFileWriter.deleteShapeFile( self.outFileName ):
108-
QMessageBox.warning( self, self.tr( "Delete error" ), self.tr( "Can't delete file %1" ).arg( outFileName ) )
109-
return
110-
111107
if self.chkListMode.isChecked():
112108
files = self.leInputDir.text().split( ";" )
113109
baseDir = QFileInfo( files[ 0 ] ).absolutePath()
114110
else:
115111
baseDir = self.leInputDir.text()
116112

113+
# look for shapes with specified geometry type
114+
self.inputFiles = ftools_utils.getShapesByGeometryType( baseDir, self.inputFiles, self.cmbGeometry.currentIndex() )
115+
116+
self.progressFiles.setRange( 0, self.inputFiles.count() )
117+
118+
outFile = QFile( self.outFileName )
119+
if outFile.exists():
120+
if not QgsVectorFileWriter.deleteShapeFile( self.outFileName ):
121+
QMessageBox.warning( self, self.tr( "Delete error" ), self.tr( "Can't delete file %1" ).arg( outFileName ) )
122+
return
123+
117124
QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) )
118125
self.btnOk.setEnabled( False )
119126

@@ -197,6 +204,8 @@ def run( self ):
197204
for fileName in self.shapes:
198205
layerPath = QFileInfo( self.baseDir + "/" + fileName ).absoluteFilePath()
199206
newLayer = QgsVectorLayer( layerPath, QFileInfo( layerPath ).baseName(), "ogr" )
207+
if not newLayer.isValid():
208+
continue
200209
vprovider = newLayer.dataProvider()
201210
allAttrs = vprovider.attributeIndexes()
202211
vprovider.select( allAttrs )

‎python/plugins/fTools/tools/frmMergeShapes.ui

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>377</width>
10-
<height>273</height>
10+
<height>302</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -21,6 +21,36 @@
2121
</property>
2222
</widget>
2323
</item>
24+
<item>
25+
<layout class="QHBoxLayout" name="horizontalLayout_3">
26+
<item>
27+
<widget class="QLabel" name="lblGeometry">
28+
<property name="text">
29+
<string>Shapefile type</string>
30+
</property>
31+
</widget>
32+
</item>
33+
<item>
34+
<widget class="QComboBox" name="cmbGeometry">
35+
<item>
36+
<property name="text">
37+
<string>Polygon</string>
38+
</property>
39+
</item>
40+
<item>
41+
<property name="text">
42+
<string>Line</string>
43+
</property>
44+
</item>
45+
<item>
46+
<property name="text">
47+
<string>Point</string>
48+
</property>
49+
</item>
50+
</widget>
51+
</item>
52+
</layout>
53+
</item>
2454
<item>
2555
<widget class="QLabel" name="label">
2656
<property name="text">

‎python/plugins/fTools/tools/ftools_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,3 +324,23 @@ def getUniqueValuesCount( vlayer, fieldIndex, useSelection ):
324324
values.append( feat.attributeMap()[ fieldIndex ].toString() )
325325
count += 1
326326
return count
327+
328+
def getShapesByGeometryType( baseDir, inShapes, geomType ):
329+
outShapes = QStringList()
330+
for fileName in inShapes:
331+
layerPath = QFileInfo( baseDir + "/" + fileName ).absoluteFilePath()
332+
vLayer = QgsVectorLayer( layerPath, QFileInfo( layerPath ).baseName(), "ogr" )
333+
if not vLayer.isValid():
334+
continue
335+
layerGeometry = vLayer.geometryType()
336+
if layerGeometry == QGis.Polygon and geomType == 0:
337+
outShapes << fileName
338+
elif layerGeometry == QGis.Line and geomType == 1:
339+
outShapes << fileName
340+
elif layerGeometry == QGis.Point and geomType == 2:
341+
outShapes << fileName
342+
343+
if outShapes.count() == 0:
344+
return None
345+
346+
return outShapes

0 commit comments

Comments
 (0)
Please sign in to comment.