Skip to content

Commit 24ba030

Browse files
author
cfarmer
committedMar 10, 2010
Large commit with several related bug fixes:
1) All fTools functions should now add all layers to dropdowns (including non-visible layers), 2) All fTools functions should now be non-modal 3) Several fTools functions have been spead up slightly 4) Where possible, internal (cpp) functions have be used to replace older Python functions 5) Defining projections now also considers .qpj files Fixes bugs #2502 and #2506, and possibly others? git-svn-id: http://svn.osgeo.org/qgis/trunk@13037 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 63c3671 commit 24ba030

16 files changed

+671
-971
lines changed
 

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ def __init__(self, iface):
3030
self.cmbLayer.addItems(layers)
3131

3232
def updateProj1(self, layerName):
33+
self.inRef.clear()
3334
tempLayer = ftools_utils.getVectorLayerByName(layerName)
3435
crs = tempLayer.dataProvider().crs().toProj4()
3536
self.inRef.insert(unicode(crs))
3637

3738
def updateProj2(self, layerName):
39+
self.outRef.clear()
3840
tempLayer = ftools_utils.getVectorLayerByName(layerName)
3941
crs = tempLayer.dataProvider().crs().toProj4()
4042
self.outRef.insert(unicode(crs))
@@ -82,11 +84,17 @@ def accept(self):
8284
outputFile = QFile( inPath + ".prj" )
8385
outputFile.open( QIODevice.WriteOnly | QIODevice.Text )
8486
outputPrj = QTextStream( outputFile )
85-
self.progressBar.setValue(70)
8687
outputPrj << outputWkt
87-
self.progressBar.setValue(75)
8888
outputPrj.flush()
8989
outputFile.close()
90+
self.progressBar.setValue(70)
91+
checkFile = QFile( inPath + ".qpj" )
92+
if checkFile.exists():
93+
checkFile.open( QIODevice.WriteOnly | QIODevice.Text )
94+
outputPrj = QTextStream( checkFile )
95+
outputPrj << outputWkt
96+
outputPrj.flush()
97+
checkFile.close()
9098
self.progressBar.setValue(95)
9199
vLayer.setCrs(srsDefine)
92100
self.progressBar.setValue(100)

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

Lines changed: 15 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,22 @@ def __init__(self, iface):
5656
# populate layer list
5757
self.progressBar.setValue(0)
5858
mapCanvas = self.iface.mapCanvas()
59-
for i in range(mapCanvas.layerCount()):
60-
layer = mapCanvas.layer(i)
61-
if layer.type() == layer.VectorLayer:
62-
self.inShape.addItem(layer.name())
63-
self.joinShape.addItem(layer.name())
59+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
60+
self.inShape.addItems(layers)
61+
self.joinShape.addItems(layers)
6462

6563
def iupdate(self, inputLayer):
66-
changedLayer = self.getVectorLayerByName(unicode(inputLayer))
67-
changedField = self.getFieldList(changedLayer)
64+
changedLayer = ftools_utils.getVectorLayerByName(unicode(inputLayer))
65+
changedField = ftools_utils.getFieldList(changedLayer)
6866
self.inField.clear()
6967
for i in changedField:
7068
self.inField.addItem(unicode(changedField[i].name()))
7169

7270
def jupdate(self):
7371
inputLayer = self.joinShape.currentText()
7472
if inputLayer != "":
75-
changedLayer = self.getVectorLayerByName(unicode(inputLayer))
76-
changedField = self.getFieldList(changedLayer)
73+
changedLayer = ftools_utils.getVectorLayerByName(unicode(inputLayer))
74+
changedField = ftools_utils.getFieldList(changedLayer)
7775
self.joinField.clear()
7876
for i in changedField:
7977
self.joinField.addItem(unicode(changedField[i].name()))
@@ -103,18 +101,12 @@ def accept(self):
103101
useTable = True
104102
joinField = self.joinField.currentText()
105103
outPath = self.outShape.text()
106-
if outPath.contains("\\"):
107-
outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
108-
else:
109-
outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
110-
if outName.endsWith(".shp"):
111-
outName = outName.left(outName.length() - 4)
112104
self.compute(inName, inField, joinName, joinField, outPath, keep, useTable, self.progressBar)
113105
self.outShape.clear()
114106
addToTOC = QMessageBox.question(self, self.tr("Join Attributes"), self.tr("Created output shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( unicode(self.shapefileName) ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
115107
if addToTOC == QMessageBox.Yes:
116-
vlayer = QgsVectorLayer(self.shapefileName, outName, "ogr")
117-
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
108+
if not ftools_utils.addShapeToCanvas( unicode( outPath ) ):
109+
QMessageBox.warning( self, self.tr("Geoprocessing"), self.tr( "Error loading output shapefile:\n%1" ).arg( unicode( outPath ) ))
118110
self.progressBar.setValue(0)
119111

120112
def outFile(self):
@@ -152,11 +144,11 @@ def updateTableFields(self):
152144
table = None
153145

154146
def compute(self, inName, inField, joinName, joinField, outName, keep, useTable, progressBar):
155-
layer1 = self.getVectorLayerByName(inName)
147+
layer1 = ftools_utils.getVectorLayerByName(inName)
156148
provider1 = layer1.dataProvider()
157149
allAttrs = provider1.attributeIndexes()
158150
provider1.select(allAttrs)
159-
fieldList1 = self.getFieldList(layer1).values()
151+
fieldList1 = ftools_utils.getFieldList(layer1).values()
160152
index1 = provider1.fieldNameIndex(inField)
161153
if useTable:
162154
f = open(unicode(joinName), 'rb')
@@ -168,11 +160,11 @@ def compute(self, inName, inField, joinName, joinField, outName, keep, useTable,
168160
table = map(lambda f: map(func, f), table)
169161

170162
else:
171-
layer2 = self.getVectorLayerByName(joinName)
163+
layer2 = ftools_utils.getVectorLayerByName(joinName)
172164
provider2 = layer2.dataProvider()
173165
allAttrs = provider2.attributeIndexes()
174166
provider2.select(allAttrs)
175-
fieldList2 = self.getFieldList(layer2)
167+
fieldList2 = ftools_utils.getFieldList(layer2)
176168
index2 = provider2.fieldNameIndex(joinField)
177169
fieldList2 = self.testForUniqueness(fieldList1, fieldList2.values())
178170
seq = range(0, len(fieldList1) + len(fieldList2))
@@ -185,7 +177,6 @@ def compute(self, inName, inField, joinName, joinField, outName, keep, useTable,
185177
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
186178
return
187179
writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fieldList1, provider1.geometryType(), sRs)
188-
189180
inFeat = QgsFeature()
190181
outFeat = QgsFeature()
191182
joinFeat = QgsFeature()
@@ -196,7 +187,7 @@ def compute(self, inName, inField, joinName, joinField, outName, keep, useTable,
196187
count = 0
197188
provider1.rewind()
198189
while provider1.nextFeature(inFeat):
199-
inGeom = inFeat.geometry()
190+
inGeom = QgsGeometry(inFeat.geometry())
200191
atMap1 = inFeat.attributeMap()
201192
outFeat.setAttributeMap(atMap1)
202193
outFeat.setGeometry(inGeom)
@@ -265,45 +256,10 @@ def testForUniqueness(self, fieldList1, fieldList2):
265256
for i in fieldList1:
266257
for j in fieldList2:
267258
if j.name() == i.name():
268-
j = self.createUniqueFieldName(j)
259+
j = ftools_utils.createUniqueFieldName(j)
269260
changed = True
270261
return fieldList2
271-
272-
def createUniqueFieldName(self, field):
273-
check = field.name().right(2)
274-
if check.startsWith("_"):
275-
(val,test) = check.right(1).toInt()
276-
if test:
277-
if val < 2:
278-
val = 2
279-
else:
280-
val = val + 1
281-
field.setName(field.name().left(len(field.name())-1) + unicode(val))
282-
else:
283-
field.setName(field.name() + "_2")
284-
else:
285-
field.setName(field.name() + "_2")
286-
return field
287-
288-
def getVectorLayerByName(self, myName):
289-
mc = self.iface.mapCanvas()
290-
nLayers = mc.layerCount()
291-
for l in range(nLayers):
292-
layer = mc.layer(l)
293-
if layer.name() == unicode(myName):
294-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
295-
if vlayer.isValid():
296-
return vlayer
297-
else:
298-
QMessageBox.information(self, self.tr("Join Attributes"), self.tr("Vector layer is not valid"))
299262

300-
def getFieldList(self, vlayer):
301-
fProvider = vlayer.dataProvider()
302-
feat = QgsFeature()
303-
allAttrs = fProvider.attributeIndexes()
304-
fProvider.select(allAttrs)
305-
myFields = fProvider.fields()
306-
return myFields
307263
def dbfreader(self, f):
308264
"""Returns an iterator over records in a Xbase DBF file.
309265

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@ def __init__(self, iface, function):
1919
# populate layer list
2020
self.progressBar.setValue(0)
2121
mapCanvas = self.iface.mapCanvas()
22-
for i in range(mapCanvas.layerCount()):
23-
layer = mapCanvas.layer(i)
24-
if layer.type() == layer.VectorLayer:
25-
self.inShape.addItem(layer.name())
22+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
23+
self.inShape.addItems(layers)
2624

2725
def updateUi(self):
2826
if self.function == 1:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def compute(self, inPoly, inPts, inField, outPath, progressBar):
104104
index = polyProvider.fieldNameIndex(unicode(inField))
105105
if index == -1:
106106
index = polyProvider.fieldCount()
107-
field = QgsField(unicode(inField), QVariant.Int, "real", 24, 15, self.tr("point count field"))
107+
field = QgsField(unicode(inField), QVariant.Double, "real", 24, 15, self.tr("point count field"))
108108
fieldList[index] = field
109109
sRs = polyProvider.crs()
110110
check = QFile(self.shapefileName)

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

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,20 @@ def __init__(self, iface):
4949
self.progressBar.setValue(0)
5050
self.setWindowTitle(self.tr("Random Points"))
5151
self.mapCanvas = self.iface.mapCanvas()
52-
for i in range(self.mapCanvas.layerCount()):
53-
layer = self.mapCanvas.layer(i)
54-
if (layer.type() == layer.VectorLayer and layer.geometryType() == QGis.Polygon) or layer.type() == layer.RasterLayer:
55-
self.inShape.addItem(layer.name())
52+
layers = ftools_utils.getLayerNames([QGis.Polygon, "Raster"])
53+
self.inShape.addItems(layers)
5654

5755
# If input layer is changed, update field list
5856
def update(self, inputLayer):
5957
self.cmbField.clear()
60-
changedLayer = self.getMapLayerByName(inputLayer)
58+
changedLayer = ftools_utils.getMapLayerByName(unicode(inputLayer))
6159
if changedLayer.type() == changedLayer.VectorLayer:
6260
self.rdoStratified.setEnabled(True)
6361
self.rdoDensity.setEnabled(True)
6462
self.rdoField.setEnabled(True)
6563
self.label_4.setEnabled(True)
66-
changedLayer = self.getVectorLayerByName(inputLayer)
67-
changedFields = self.getFieldList(changedLayer)
64+
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
65+
changedFields = ftools_utils.getFieldList(changedLayer)
6866
for i in changedFields:
6967
self.cmbField.addItem(unicode(changedFields[i].name()))
7068
else:
@@ -95,7 +93,7 @@ def accept(self):
9593
if outName.endsWith(".shp"):
9694
outName = outName.left(outName.length() - 4)
9795
self.progressBar.setValue(5)
98-
mLayer = self.getMapLayerByName(unicode(inName))
96+
mLayer = ftools_utils.getMapLayerByName(unicode(inName))
9997
if mLayer.type() == mLayer.VectorLayer:
10098
inLayer = QgsVectorLayer(unicode(mLayer.source()), unicode(mLayer.name()), unicode(mLayer.dataProvider().name()))
10199
if self.rdoUnstratified.isChecked():
@@ -174,38 +172,6 @@ def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
174172
count = count + add
175173
self.progressBar.setValue(count)
176174
return points
177-
178-
# Get vector layer by name from TOC
179-
def getVectorLayerByName(self, myName):
180-
mc = self.mapCanvas
181-
nLayers = mc.layerCount()
182-
for l in range(nLayers):
183-
layer = mc.layer(l)
184-
if layer.name() == unicode(myName):
185-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
186-
if vlayer.isValid():
187-
return vlayer
188-
else:
189-
QMessageBox.information(self, self.tr("Random Points"), self.tr("Vector layer is not valid"))
190-
191-
# Get map layer by name from TOC
192-
def getMapLayerByName(self, myName):
193-
mc = self.mapCanvas
194-
nLayers = mc.layerCount()
195-
for l in range(nLayers):
196-
layer = mc.layer(l)
197-
if layer.name() == unicode(myName):
198-
if layer.isValid():
199-
return layer
200-
# Retrieve the field map of a vector Layer
201-
def getFieldList(self, vlayer):
202-
fProvider = vlayer.dataProvider()
203-
feat = QgsFeature()
204-
allAttrs = fProvider.attributeIndexes()
205-
fProvider.select(allAttrs)
206-
myFields = fProvider.fields()
207-
return myFields
208-
209175

210176
def randomize(self, inLayer, outPath, minimum, design, value):
211177
outFeat = QgsFeature()

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

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
# -*- coding: utf-8 -*-
12
from PyQt4.QtCore import *
23
from PyQt4.QtGui import *
34

45
from qgis.core import *
5-
6+
import ftools_utils
67
from ui_frmRandom import Ui_Dialog
78
import random
89
class Dialog(QDialog, Ui_Dialog):
@@ -16,13 +17,11 @@ def __init__(self, iface):
1617
# populate layer list
1718
self.progressBar.setValue(0)
1819
mapCanvas = self.iface.mapCanvas()
19-
for i in range(mapCanvas.layerCount()):
20-
layer = mapCanvas.layer(i)
21-
if layer.type() == layer.VectorLayer:
22-
self.inShape.addItem(layer.name())
20+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
21+
self.inShape.addItems(layers)
2322

2423
def changed(self, inputLayer):
25-
changedLayer = self.getVectorLayerByName(inputLayer)
24+
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
2625
changedProvider = changedLayer.dataProvider()
2726
upperVal = changedProvider.featureCount()
2827
self.spnNumber.setMaximum(upperVal)
@@ -34,7 +33,7 @@ def accept(self):
3433
self.progressBar.setValue(10)
3534
inName = self.inShape.currentText()
3635
self.progressBar.setValue(20)
37-
layer = self.getVectorLayerByName(inName)
36+
layer = ftools_utils.getVectorLayerByName(inName)
3837
self.progressBar.setValue(30)
3938
if self.rdoNumber.isChecked():
4039
value = self.spnNumber.value()
@@ -51,14 +50,3 @@ def accept(self):
5150
self.progressBar.setValue(100)
5251
layer.setSelectedFeatures(selran)
5352
self.progressBar.setValue(0)
54-
55-
#Gets vector layer by layername in canvas
56-
#Return: QgsVectorLayer
57-
def getVectorLayerByName(self, myName):
58-
mc = self.iface.mapCanvas()
59-
nLayers = mc.layerCount()
60-
for l in range(nLayers):
61-
layer = mc.layer(l)
62-
if layer.name() == unicode(myName):
63-
if layer.isValid():
64-
return layer
Lines changed: 109 additions & 183 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
from PyQt4.QtCore import *
23
from PyQt4.QtGui import *
34
import ftools_utils
@@ -8,193 +9,118 @@
89
import types
910

1011
class Dialog(QDialog, Ui_Dialog):
11-
def __init__(self, iface):
12-
QDialog.__init__(self)
13-
self.iface = iface
14-
self.setupUi(self)
15-
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
16-
QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
17-
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
18-
QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
19-
self.setWindowTitle( self.tr("Export to new projection") )
20-
self.progressBar.setValue(0)
21-
mapCanvas = self.iface.mapCanvas()
22-
for i in range(mapCanvas.layerCount()):
23-
layer = mapCanvas.layer(i)
24-
if layer.type() == layer.VectorLayer:
25-
self.inShape.addItem(layer.name())
26-
self.cmbLayer.addItem(layer.name())
12+
def __init__(self, iface):
13+
QDialog.__init__(self)
14+
self.iface = iface
15+
self.setupUi(self)
16+
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
17+
QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
18+
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
19+
QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
20+
self.setWindowTitle( self.tr("Export to new projection") )
21+
self.progressBar.setValue(0)
22+
mapCanvas = self.iface.mapCanvas()
23+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
24+
self.inShape.addItems(layers)
25+
self.cmbLayer.addItems(layers)
2726

28-
def updateProj1(self, layerName):
29-
tempLayer = self.getVectorLayerByName(layerName)
30-
crs = tempLayer.dataProvider().crs().toProj4()
31-
self.inRef.insert(unicode(crs))
27+
def updateProj1(self, layerName):
28+
self.inRef.clear()
29+
tempLayer = ftools_utils.getVectorLayerByName(layerName)
30+
crs = tempLayer.dataProvider().crs().toProj4()
31+
self.inRef.insert(unicode(crs))
3232

33-
def updateProj2(self, layerName):
34-
tempLayer = self.getVectorLayerByName(layerName)
35-
crs = tempLayer.dataProvider().crs().toProj4()
36-
self.outRef.insert(unicode(crs))
33+
def updateProj2(self, layerName):
34+
self.outRef.clear()
35+
tempLayer = ftools_utils.getVectorLayerByName(layerName)
36+
crs = tempLayer.dataProvider().crs().toProj4()
37+
self.outRef.insert(unicode(crs))
3738

38-
def accept(self):
39-
if self.inShape.currentText() == "":
40-
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No input layer specified"))
41-
elif self.outShape.text() == "":
42-
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Please specify output shapefile"))
43-
elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
44-
QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
45-
elif self.cmbLayer.currentText() == "" and self.rdoLayer.isChecked():
46-
QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
47-
else:
48-
inName = self.inShape.currentText()
49-
self.progressBar.setValue(5)
50-
outPath = self.outShape.text()
51-
self.progressBar.setValue(10)
52-
if self.rdoProjection.isChecked(): outProj = self.txtProjection.text()
53-
else: outProj = self.cmbLayer.currentText()
54-
self.progressBar.setValue(15)
55-
if outPath.contains("\\"): outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
56-
else: outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
57-
if outName.endsWith(".shp"): outName = outName.left(outName.length() - 4)
58-
if self.reProject(inName, unicode(outPath), unicode(outProj), self.rdoProjection.isChecked(), self.progressBar):
59-
self.outShape.clear()
60-
self.progressBar.setValue(100)
61-
addToTOC = QMessageBox.question(self, self.tr("Export to new projection"), self.tr("Created projected shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
62-
if addToTOC == QMessageBox.Yes:
63-
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
64-
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
65-
self.progressBar.setValue(0)
39+
def accept(self):
40+
if self.inShape.currentText() == "":
41+
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No input layer specified"))
42+
elif self.outShape.text() == "":
43+
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Please specify output shapefile"))
44+
elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
45+
QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
46+
elif self.cmbLayer.currentText() == "" and self.rdoLayer.isChecked():
47+
QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
48+
else:
49+
inName = self.inShape.currentText()
50+
self.progressBar.setValue(5)
51+
outPath = self.outShape.text()
52+
self.progressBar.setValue(10)
53+
if self.rdoProjection.isChecked(): outProj = self.txtProjection.text()
54+
else: outProj = self.cmbLayer.currentText()
55+
self.progressBar.setValue(15)
56+
if outPath.contains("\\"): outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
57+
else: outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
58+
if outName.endsWith(".shp"): outName = outName.left(outName.length() - 4)
59+
if self.reProject(inName, unicode(outPath), unicode(outProj), self.rdoProjection.isChecked(), self.progressBar):
60+
self.outShape.clear()
61+
self.progressBar.setValue(100)
62+
addToTOC = QMessageBox.question(self, self.tr("Export to new projection"), self.tr("Created projected shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
63+
if addToTOC == QMessageBox.Yes:
64+
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
65+
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
66+
self.progressBar.setValue(0)
6667

67-
def outProjFile(self):
68-
format = QString( "<h2>%1</h2>%2 <br/> %3" )
69-
header = self.tr( "Choose output CRS:" )
70-
sentence1 = self.tr( "Please select the projection system to be used by the output layer." )
71-
sentence2 = self.tr( "Output layer will be projected from it's current CRS to the output CRS." )
72-
self.projSelect = QgsGenericProjectionSelector(self, Qt.Widget)
73-
self.projSelect.setMessage( format.arg( header ).arg( sentence1 ).arg( sentence2 ))
74-
if self.projSelect.exec_():
75-
projString = self.projSelect.selectedProj4String()
76-
if projString == "":
77-
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No Valid CRS selected"))
78-
return
79-
else:
80-
self.txtProjection.clear()
81-
self.txtProjection.insert(projString)
82-
else:
83-
return
68+
def outProjFile(self):
69+
format = QString( "<h2>%1</h2>%2 <br/> %3" )
70+
header = self.tr( "Choose output CRS:" )
71+
sentence1 = self.tr( "Please select the projection system to be used by the output layer." )
72+
sentence2 = self.tr( "Output layer will be projected from it's current CRS to the output CRS." )
73+
self.projSelect = QgsGenericProjectionSelector(self, Qt.Widget)
74+
self.projSelect.setMessage( format.arg( header ).arg( sentence1 ).arg( sentence2 ))
75+
if self.projSelect.exec_():
76+
projString = self.projSelect.selectedProj4String()
77+
if projString == "":
78+
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No Valid CRS selected"))
79+
return
80+
else:
81+
self.txtProjection.clear()
82+
self.txtProjection.insert(projString)
83+
else:
84+
return
8485

85-
def outFile(self):
86-
self.outShape.clear()
87-
( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
88-
if self.shapefileName is None or self.encoding is None:
89-
return
90-
self.outShape.setText( QString( self.shapefileName ) )
86+
def outFile(self):
87+
self.outShape.clear()
88+
( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
89+
if self.shapefileName is None or self.encoding is None:
90+
return
91+
self.outShape.setText( QString( self.shapefileName ) )
9192

92-
def reProject(self, inName, outPath, outProj, predefined, progressBar):
93-
vlayer = self.getVectorLayerByName(inName)
94-
provider = vlayer.dataProvider()
95-
feat = QgsFeature()
96-
allAttrs = provider.attributeIndexes()
97-
progressBar.setValue(2)
98-
provider.select(allAttrs)
99-
fieldList = self.getFieldList(vlayer)
100-
crsDest = QgsCoordinateReferenceSystem()
101-
if predefined:
102-
crsDest.createFromProj4(outProj)
103-
else:
104-
destLayer = self.getVectorLayerByName(outProj)
105-
crsDest = destLayer.dataProvider().crs()
106-
if not crsDest.isValid():
107-
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Output spatial reference system is not valid"))
108-
return False
109-
else:
110-
progressBar.setValue(5)
111-
crsSrc = provider.crs()
112-
if crsSrc != crsDest:
113-
xform = QgsCoordinateTransform(crsSrc, crsDest)
114-
progressBar.setValue(10)
115-
check = QFile(self.shapefileName)
116-
if check.exists():
117-
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
118-
return
119-
writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fieldList, provider.geometryType(), crsDest)
120-
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, provider.geometryType(), crsDest)
121-
if self.pointReproject(vlayer, xform, writer, progressBar): return True
122-
else: return False
123-
else:
124-
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Identical output spatial reference system chosen"))
125-
return False
126-
127-
# Gets vector layer by layername in canvas
128-
def getVectorLayerByName(self, myName):
129-
mc = self.iface.mapCanvas()
130-
nLayers = mc.layerCount()
131-
for l in range(nLayers):
132-
layer = mc.layer(l)
133-
if unicode(layer.name()) == unicode(myName):
134-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
135-
if vlayer.isValid():
136-
return vlayer
137-
138-
#Retrieve the field map of a vector Layer
139-
#Return: QgsFieldMap
140-
def getFieldList(self, vlayer):
141-
fProvider = vlayer.dataProvider()
142-
feat = QgsFeature()
143-
allAttrs = fProvider.attributeIndexes()
144-
fProvider.select(allAttrs)
145-
myFields = fProvider.fields()
146-
return myFields
147-
148-
#Converts all geometries to points, and reprojects using specified QgsCoordinateTransformation
149-
#Output: Reprojected shapefile with attributes...
150-
def pointReproject(self, vlayer, xform, writer, progressBar):
151-
provider = vlayer.dataProvider()
152-
if provider.featureCount() == 0:
153-
return
154-
155-
allAttrs = provider.attributeIndexes()
156-
provider.select(allAttrs)
157-
feat = QgsFeature()
158-
outfeat = QgsFeature()
159-
count = 90.00 / provider.featureCount()
160-
161-
while provider.nextFeature(feat):
162-
geom = feat.geometry()
163-
multi_geom = QgsGeometry()
164-
temp_geom = []
165-
if geom.type() == 0: # it's a point
166-
if geom.isMultipart():
167-
multi_geom = geom.asMultiPoint() #multi_geom is a multipoint
168-
outfeat.setGeometry(QgsGeometry.fromMultiPoint([xform.transform(item) for item in multi_geom]))
169-
else:
170-
tpoint = xform.transform(geom.asPoint())
171-
outfeat.setGeometry(QgsGeometry.fromPoint(tpoint))
172-
#outfeat.setGeometry(QgsGeometry.fromPoint(xform.transform(geom.asPoint()))
173-
elif geom.type() == 1: # it's a line
174-
temp_lines = []
175-
if geom.isMultipart():
176-
multi_geom = geom.asMultiPolyline() #multi_geog is a multiline
177-
outfeat.setGeometry(QgsGeometry.fromMultiPolyline([mappedTransform(xform, item) for item in multi_geom]))
178-
else:
179-
multi_geom = geom.asPolyline() #multi_geom is a line
180-
outfeat.setGeometry(QgsGeometry.fromPolyline([xform.transform(item) for item in multi_geom]))
181-
elif geom.type() == 2: # it's a polygon
182-
if geom.isMultipart():
183-
multi_geom = geom.asMultiPolygon() #multi_geom is a multipolygon
184-
#outfeat.setGeometry(QgsGeometry.fromMultiPolygon(multi_geom))
185-
outfeat.setGeometry(QgsGeometry.fromMultiPolygon([[mappedTransform(xform, item) for item in temp] for temp in multi_geom]))
186-
else:
187-
multi_geom = geom.asPolygon() #multi_geom is a polygon
188-
outfeat.setGeometry(QgsGeometry.fromPolygon([mappedTransform(xform, item) for item in multi_geom]))
189-
else: # don't know what it is...
190-
return False
191-
atMap = feat.attributeMap()
192-
outfeat.setAttributeMap(atMap)
193-
writer.addFeature(outfeat)
194-
progressBar.setValue(progressBar.value() + count)
195-
del writer
196-
return True
197-
198-
def mappedTransform(xform, inList):
199-
return [xform.transform(elem) for elem in inList]
93+
def reProject(self, inName, outPath, outProj, predefined, progressBar):
94+
vlayer = ftools_utils.getVectorLayerByName(inName)
95+
provider = vlayer.dataProvider()
96+
feat = QgsFeature()
97+
allAttrs = provider.attributeIndexes()
98+
progressBar.setValue(2)
99+
provider.select(allAttrs)
100+
fieldList = ftools_utils.getFieldList(vlayer)
101+
crsDest = QgsCoordinateReferenceSystem()
102+
if predefined:
103+
crsDest.createFromProj4(outProj)
104+
else:
105+
destLayer = ftools_utils.getVectorLayerByName(outProj)
106+
crsDest = destLayer.dataProvider().crs()
107+
if not crsDest.isValid():
108+
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Output spatial reference system is not valid"))
109+
return False
110+
else:
111+
progressBar.setValue(5)
112+
crsSrc = provider.crs()
113+
if crsSrc != crsDest:
114+
xform = QgsCoordinateTransform(crsSrc, crsDest)
115+
progressBar.setValue(10)
116+
check = QFile(self.shapefileName)
117+
if check.exists():
118+
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
119+
return
120+
error = QgsVectorFileWriter.writeAsShapefile(vlayer, self.shapefileName, self.encoding, crsDest, False)
121+
if error == QgsVectorFileWriter.NoError: return True
122+
else: return False
123+
else:
124+
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("Identical output spatial reference system chosen"))
125+
return False
200126

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

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ def __init__(self, iface):
4848
self.setWindowTitle( self.tr("Regular points") )
4949
self.progressBar.setValue(0)
5050
self.mapCanvas = self.iface.mapCanvas()
51-
for i in range(self.mapCanvas.layerCount()):
52-
layer = self.mapCanvas.layer(i)
53-
self.inShape.addItem(layer.name())
51+
layers = ftools_utils.getLayerNames("all")
52+
self.inShape.addItems(layers)
5453

5554
def accept(self):
5655
if not self.rdoCoordinates.isChecked() and self.inShape.currentText() == "":
@@ -74,7 +73,7 @@ def accept(self):
7473
if self.chkRandom.isChecked(): offset = True
7574
else: offset = False
7675
if self.rdoBoundary.isChecked():
77-
mLayer = self.getMapLayerByName(unicode(inName))
76+
mLayer = ftools_utils.getMapLayerByName(unicode(inName))
7877
boundBox = mLayer.extent()
7978
crs = mLayer.crs()
8079
else:
@@ -106,32 +105,8 @@ def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
106105
if pGeom.intersects(bound):
107106
points.append(pGeom)
108107
i = i + 1
109-
return points
110-
111-
# Get vector layer by name from TOC
112-
def getVectorLayerByName(self, myName):
113-
mc = self.mapCanvas
114-
nLayers = mc.layerCount()
115-
for l in range(nLayers):
116-
layer = mc.layer(l)
117-
if layer.name() == unicode(myName):
118-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
119-
if vlayer.isValid():
120-
return vlayer
121-
else:
122-
QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Vector layer is not valid"))
123-
124-
# Get map layer by name from TOC
125-
def getMapLayerByName(self, myName):
126-
mc = self.mapCanvas
127-
nLayers = mc.layerCount()
128-
for l in range(nLayers):
129-
layer = mc.layer(l)
130-
if layer.name() == unicode(myName):
131-
if layer.isValid():
132-
return layer
133-
134-
108+
return points
109+
135110
def regularize(self, bound, outPath, offset, value, gridType, inset, crs):
136111
area = bound.width() * bound.height()
137112
if offset:
Lines changed: 67 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,79 @@
1-
from PyQt4.QtCore import *
1+
# -*- coding: utf-8 -*-
2+
from PyQt4.QtCore import *
23
from PyQt4.QtGui import *
3-
4+
import ftools_utils
45
from qgis.core import *
56
from ui_frmPointsInPolygon import Ui_Dialog
67

78
class Dialog(QDialog, Ui_Dialog):
89

9-
def __init__(self, iface):
10-
QDialog.__init__(self)
11-
self.iface = iface
12-
# Set up the user interface from Designer.
13-
self.setupUi(self)
14-
15-
# populate layer list
16-
self.progressBar.setValue(0)
17-
mapCanvas = self.iface.mapCanvas()
18-
for i in range(mapCanvas.layerCount()):
19-
layer = mapCanvas.layer(i)
20-
if layer.type() == layer.VectorLayer:
21-
self.inPolygon.addItem(layer.name())
22-
self.inPoint.addItem(layer.name())
23-
self.updateUI()
24-
self.cmbModify.addItems([self.tr("creating new selection"), self.tr("adding to current selection"), self.tr("removing from current selection")])
10+
def __init__(self, iface):
11+
QDialog.__init__(self)
12+
self.iface = iface
13+
# Set up the user interface from Designer.
14+
self.setupUi(self)
2515

26-
def updateUI(self):
27-
self.label_5.setVisible(False)
28-
self.lnField.setVisible(False)
29-
self.outShape.setVisible(False)
30-
self.toolOut.setVisible(False)
31-
self.label_2.setVisible(False)
32-
self.setWindowTitle(self.tr("Select by location"))
33-
self.label_3.setText(self.tr("Select features in:"))
34-
self.label_4.setText(self.tr("that intersect features in:"))
35-
self.label_mod = QLabel(self)
36-
self.label_mod.setObjectName("label_mod")
37-
self.label_mod.setText(self.tr("Modify current selection by:"))
38-
self.cmbModify = QComboBox(self)
39-
self.cmbModify.setObjectName("cmbModify")
40-
self.gridLayout.addWidget(self.label_mod,2,0,1,1)
41-
self.gridLayout.addWidget(self.cmbModify,3,0,1,1)
42-
self.resize(381, 100)
16+
# populate layer list
17+
self.progressBar.setValue(0)
18+
mapCanvas = self.iface.mapCanvas()
19+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
20+
self.inPolygon.addItems(layers)
21+
self.inPoint.addItems(layers)
22+
self.updateUI()
23+
self.cmbModify.addItems([self.tr("creating new selection"), self.tr("adding to current selection"), self.tr("removing from current selection")])
4324

44-
def accept(self):
45-
if self.inPolygon.currentText() == "":
46-
QMessageBox.information(self, self.tr("Select by location"), self.tr( "Please specify input layer"))
47-
elif self.inPoint.currentText() == "":
48-
QMessageBox.information(self, self.tr("Select by location"), self.tr("Please specify select layer"))
49-
else:
50-
inPoly = self.inPolygon.currentText()
51-
inPts = self.inPoint.currentText()
52-
self.compute(inPoly, inPts, self.cmbModify.currentText())
53-
self.progressBar.setValue(0)
25+
def updateUI(self):
26+
self.label_5.setVisible(False)
27+
self.lnField.setVisible(False)
28+
self.outShape.setVisible(False)
29+
self.toolOut.setVisible(False)
30+
self.label_2.setVisible(False)
31+
self.setWindowTitle(self.tr("Select by location"))
32+
self.label_3.setText(self.tr("Select features in:"))
33+
self.label_4.setText(self.tr("that intersect features in:"))
34+
self.label_mod = QLabel(self)
35+
self.label_mod.setObjectName("label_mod")
36+
self.label_mod.setText(self.tr("Modify current selection by:"))
37+
self.cmbModify = QComboBox(self)
38+
self.cmbModify.setObjectName("cmbModify")
39+
self.gridLayout.addWidget(self.label_mod,2,0,1,1)
40+
self.gridLayout.addWidget(self.cmbModify,3,0,1,1)
41+
self.resize(381, 100)
5442

55-
def compute(self, inPoly, inPts, modify):
56-
inputLayer = self.getVectorLayerByName(inPoly)
57-
selectLayer = self.getVectorLayerByName(inPts)
58-
inputProvider = inputLayer.dataProvider()
59-
selectProvider = selectLayer.dataProvider()
60-
feat = QgsFeature()
61-
geom = QgsGeometry()
62-
selectedSet = []
63-
selectProvider.nextFeature(feat)
64-
geomLayer = QgsGeometry(feat.geometry())
43+
def accept(self):
44+
if self.inPolygon.currentText() == "":
45+
QMessageBox.information(self, self.tr("Select by location"), self.tr( "Please specify input layer"))
46+
elif self.inPoint.currentText() == "":
47+
QMessageBox.information(self, self.tr("Select by location"), self.tr("Please specify select layer"))
48+
else:
49+
inPoly = self.inPolygon.currentText()
50+
inPts = self.inPoint.currentText()
51+
self.compute(inPoly, inPts, self.cmbModify.currentText())
52+
self.progressBar.setValue(0)
6553

66-
self.progressBar.setMaximum( inputProvider.featureCount() + selectProvider.featureCount() )
54+
def compute(self, inPoly, inPts, modify):
55+
inputLayer = ftools_utils.getVectorLayerByName(inPoly)
56+
selectLayer = ftools_utils.getVectorLayerByName(inPts)
57+
inputProvider = inputLayer.dataProvider()
58+
selectProvider = selectLayer.dataProvider()
59+
feat = QgsFeature()
60+
geom = QgsGeometry()
61+
selectedSet = []
62+
selectProvider.nextFeature(feat)
63+
geomLayer = QgsGeometry(feat.geometry())
6764

68-
while selectProvider.nextFeature(feat):
69-
geomLayer = geomLayer.combine(QgsGeometry(feat.geometry()))
70-
self.progressBar.setValue( self.progressBarValue() + 1 )
71-
while inputProvider.nextFeature(feat):
72-
geom = QgsGeometry(feat.geometry())
73-
if geom.intersects(geomLayer):
74-
selectedSet.append(feat.id())
75-
self.progressBar.setValue( self.progressBarValue() + 1 )
76-
if modify == self.tr("adding to current selection"):
77-
selectedSet = list(set(inputLayer.selectedFeaturesIds()).union(selectedSet))
78-
elif modify == self.tr("removing from current selection"):
79-
selectedSet = list(set(inputLayer.selectedFeaturesIds()).difference(selectedSet))
80-
inputLayer.setSelectedFeatures(selectedSet)
65+
self.progressBar.setMaximum( inputProvider.featureCount() + selectProvider.featureCount() )
8166

82-
#Gets vector layer by layername in canvas
83-
#Return: QgsVectorLayer
84-
def getVectorLayerByName(self, myName):
85-
mc = self.iface.mapCanvas()
86-
nLayers = mc.layerCount()
87-
for l in range(nLayers):
88-
layer = mc.layer(l)
89-
if layer.name() == unicode(myName):
90-
if layer.isValid():
91-
return layer
67+
while selectProvider.nextFeature(feat):
68+
geomLayer = geomLayer.combine(QgsGeometry(feat.geometry()))
69+
self.progressBar.setValue( self.progressBar.value() + 1 )
70+
while inputProvider.nextFeature(feat):
71+
geom = QgsGeometry(feat.geometry())
72+
if geom.intersects(geomLayer):
73+
selectedSet.append(feat.id())
74+
self.progressBar.setValue( self.progressBar.value() + 1 )
75+
if modify == self.tr("adding to current selection"):
76+
selectedSet = list(set(inputLayer.selectedFeaturesIds()).union(selectedSet))
77+
elif modify == self.tr("removing from current selection"):
78+
selectedSet = list(set(inputLayer.selectedFeaturesIds()).difference(selectedSet))
79+
inputLayer.setSelectedFeatures(selectedSet)
Lines changed: 96 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
#-----------------------------------------------------------
23
#
34
# Random selection within subsets
@@ -31,143 +32,108 @@
3132
#--------------------------------------------------------------------
3233
from PyQt4.QtCore import *
3334
from PyQt4.QtGui import *
34-
import random
35+
import random, ftools_utils
3536
from qgis.core import *
3637
from ui_frmSubsetSelect import Ui_Dialog
3738

3839
class Dialog(QDialog, Ui_Dialog):
3940

40-
def __init__(self, iface):
41-
QDialog.__init__(self)
42-
self.iface = iface
43-
# Set up the user interface from Designer.
44-
self.setupUi(self)
45-
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
46-
self.setWindowTitle(self.tr("Random selection within subsets"))
47-
# populate layer list
48-
self.progressBar.setValue(0)
49-
mapCanvas = self.iface.mapCanvas()
50-
for i in range(mapCanvas.layerCount()):
51-
layer = mapCanvas.layer(i)
52-
if layer.type() == layer.VectorLayer:
53-
self.inShape.addItem(layer.name())
41+
def __init__(self, iface):
42+
QDialog.__init__(self)
43+
self.iface = iface
44+
# Set up the user interface from Designer.
45+
self.setupUi(self)
46+
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
47+
self.setWindowTitle(self.tr("Random selection within subsets"))
48+
# populate layer list
49+
self.progressBar.setValue(0)
50+
mapCanvas = self.iface.mapCanvas()
51+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
52+
self.inShape.addItems(layers)
5453

55-
def update(self, inputLayer):
56-
self.inField.clear()
57-
changedLayer = self.getVectorLayerByName(inputLayer)
58-
changedField = self.getFieldList(changedLayer)
59-
for i in changedField:
60-
self.inField.addItem(unicode(changedField[i].name()))
61-
maxFeatures = changedLayer.dataProvider().featureCount()
62-
self.spnNumber.setMaximum( maxFeatures )
54+
def update(self, inputLayer):
55+
self.inField.clear()
56+
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
57+
changedField = ftools_utils.getFieldList(changedLayer)
58+
for i in changedField:
59+
self.inField.addItem(unicode(changedField[i].name()))
60+
maxFeatures = changedLayer.dataProvider().featureCount()
61+
self.spnNumber.setMaximum( maxFeatures )
6362

64-
def accept(self):
65-
if self.inShape.currentText() == "":
66-
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Please specify input vector layer"))
67-
elif self.inField.currentText() == "":
68-
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Please specify an input field"))
69-
else:
70-
inVect = self.inShape.currentText()
71-
uidField = self.inField.currentText()
72-
if self.rdoNumber.isChecked():
73-
value = self.spnNumber.value()
74-
perc = False
75-
else:
76-
value = self.spnPercent.value()
77-
perc = True
78-
self.compute(inVect, uidField, value, perc, self.progressBar)
79-
self.progressBar.setValue(100)
80-
self.progressBar.setValue(0)
63+
def accept(self):
64+
if self.inShape.currentText() == "":
65+
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Please specify input vector layer"))
66+
elif self.inField.currentText() == "":
67+
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Please specify an input field"))
68+
else:
69+
inVect = self.inShape.currentText()
70+
uidField = self.inField.currentText()
71+
if self.rdoNumber.isChecked():
72+
value = self.spnNumber.value()
73+
perc = False
74+
else:
75+
value = self.spnPercent.value()
76+
perc = True
77+
self.compute(inVect, uidField, value, perc, self.progressBar)
78+
self.progressBar.setValue(100)
79+
self.progressBar.setValue(0)
8180

82-
def outFile(self):
83-
self.outShape.clear()
84-
fileDialog = QFileDialog()
85-
fileDialog.setConfirmOverwrite(False)
86-
outName = fileDialog.getSaveFileName(self, self.tr("Output Shapefile"),".", self.tr("Shapefiles (*.shp)"))
87-
fileCheck = QFile(outName)
88-
if fileCheck.exists():
89-
QMessageBox.warning(self, self.tr("Random selection within subsets"), self.tr("Cannot overwrite existing shapefile..."))
90-
else:
91-
filePath = QFileInfo(outName).absoluteFilePath()
92-
if filePath.right(4) != ".shp": filePath = filePath + ".shp"
93-
if not outName.isEmpty():
94-
self.outShape.clear()
95-
self.outShape.insert(filePath)
81+
def outFile(self):
82+
self.outShape.clear()
83+
fileDialog = QFileDialog()
84+
fileDialog.setConfirmOverwrite(False)
85+
outName = fileDialog.getSaveFileName(self, self.tr("Output Shapefile"),".", self.tr("Shapefiles (*.shp)"))
86+
fileCheck = QFile(outName)
87+
if fileCheck.exists():
88+
QMessageBox.warning(self, self.tr("Random selection within subsets"), self.tr("Cannot overwrite existing shapefile..."))
89+
else:
90+
filePath = QFileInfo(outName).absoluteFilePath()
91+
if filePath.right(4) != ".shp": filePath = filePath + ".shp"
92+
if not outName.isEmpty():
93+
self.outShape.clear()
94+
self.outShape.insert(filePath)
9695

97-
def compute(self, inVect, inField, value, perc, progressBar):
98-
vlayer = self.getVectorLayerByName(inVect)
99-
vprovider = vlayer.dataProvider()
100-
mlayer = self.getMapLayerByName(inVect)
101-
allAttrs = vprovider.attributeIndexes()
102-
vprovider.select(allAttrs)
103-
index = vprovider.fieldNameIndex(inField)
104-
#unique = []
105-
#vprovider.uniqueValues(index, unique)
106-
unique = self.getUniqueValues(vprovider, int(index))
107-
inFeat = QgsFeature()
108-
selran = []
109-
mlayer.removeSelection(True)
110-
nFeat = vprovider.featureCount() * len(unique)
111-
nElement = 0
112-
self.progressBar.setValue(0)
113-
self.progressBar.setRange(0, nFeat)
114-
if not len(unique) == mlayer.featureCount():
115-
for i in unique:
116-
vprovider.rewind()
117-
FIDs= []
118-
while vprovider.nextFeature(inFeat):
119-
atMap = inFeat.attributeMap()
120-
if atMap[index] == QVariant(i):
121-
FID = inFeat.id()
122-
FIDs.append(FID)
123-
nElement += 1
124-
self.progressBar.setValue(nElement)
125-
if perc: selVal = int(round((value / 100.0000) * len(FIDs), 0))
126-
else: selVal = value
127-
if selVal >= len(FIDs): selran = FIDs
128-
else: selran = random.sample(FIDs, selVal)
129-
selran.extend(mlayer.selectedFeaturesIds())
130-
mlayer.setSelectedFeatures(selran)
131-
else:
132-
mlayer.setSelectedFeatures(range(0, mlayer.featureCount()))
96+
def compute(self, inVect, inField, value, perc, progressBar):
97+
vlayer = ftools_utils.getVectorLayerByName(inVect)
98+
vprovider = vlayer.dataProvider()
99+
mlayer = self.getMapLayerByName(inVect)
100+
allAttrs = vprovider.attributeIndexes()
101+
vprovider.select(allAttrs)
102+
index = vprovider.fieldNameIndex(inField)
103+
#unique = []
104+
#vprovider.uniqueValues(index, unique)
105+
unique = ftools_utils.getUniqueValues(vprovider, int(index))
106+
inFeat = QgsFeature()
107+
selran = []
108+
mlayer.removeSelection(True)
109+
nFeat = vprovider.featureCount() * len(unique)
110+
nElement = 0
111+
self.progressBar.setValue(0)
112+
self.progressBar.setRange(0, nFeat)
113+
if not len(unique) == mlayer.featureCount():
114+
for i in unique:
115+
vprovider.rewind()
116+
FIDs= []
117+
while vprovider.nextFeature(inFeat):
118+
atMap = inFeat.attributeMap()
119+
if atMap[index] == QVariant(i):
120+
FID = inFeat.id()
121+
FIDs.append(FID)
122+
nElement += 1
123+
self.progressBar.setValue(nElement)
124+
if perc: selVal = int(round((value / 100.0000) * len(FIDs), 0))
125+
else: selVal = value
126+
if selVal >= len(FIDs): selran = FIDs
127+
else: selran = random.sample(FIDs, selVal)
128+
selran.extend(mlayer.selectedFeaturesIds())
129+
mlayer.setSelectedFeatures(selran)
130+
else:
131+
mlayer.setSelectedFeatures(range(0, mlayer.featureCount()))
133132

134-
def getVectorLayerByName(self, myName):
135-
mc = self.iface.mapCanvas()
136-
nLayers = mc.layerCount()
137-
for l in range(nLayers):
138-
layer = mc.layer(l)
139-
if layer.name() == unicode(myName,'latin1'):
140-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
141-
if vlayer.isValid():
142-
return vlayer
143-
else:
144-
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Vector layer is not valid"))
145-
146-
def getMapLayerByName(self, myName):
147-
mc = self.iface.mapCanvas()
148-
nLayers = mc.layerCount()
149-
for l in range(nLayers):
150-
layer = mc.layer(l)
151-
if layer.name() == unicode(myName,'latin1'):
152-
return layer
153-
154-
def getFieldList(self, vlayer):
155-
fProvider = vlayer.dataProvider()
156-
feat = QgsFeature()
157-
allAttrs = fProvider.attributeIndexes()
158-
fProvider.select(allAttrs)
159-
myFields = fProvider.fields()
160-
return myFields
161-
162-
def getUniqueValues(self, provider, index):
163-
allAttrs = provider.attributeIndexes()
164-
provider.select(allAttrs)
165-
feat = QgsFeature()
166-
values = []
167-
check = []
168-
provider.rewind()
169-
while provider.nextFeature(feat):
170-
if not feat.attributeMap()[index].toString() in check:
171-
values.append( feat.attributeMap()[index] )
172-
check.append( feat.attributeMap()[index].toString() )
173-
return values
133+
def getMapLayerByName(self, myName):
134+
mc = self.iface.mapCanvas()
135+
nLayers = mc.layerCount()
136+
for l in range(nLayers):
137+
layer = mc.layer(l)
138+
if layer.name() == unicode(myName,'latin1'):
139+
return layer
Lines changed: 109 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#-----------------------------------------------------------
1+
# -*- coding: utf-8 -*-
2+
#-----------------------------------------------------------
23
#
34
# Sum Lines In Polygons
45
#
@@ -38,130 +39,112 @@
3839

3940
class Dialog(QDialog, Ui_Dialog):
4041

41-
def __init__(self, iface):
42-
QDialog.__init__(self)
43-
self.iface = iface
44-
# Set up the user interface from Designer.
45-
self.setupUi(self)
46-
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
47-
self.setWindowTitle(self.tr("Sum line lengths"))
48-
# populate layer list
49-
self.progressBar.setValue(0)
50-
mapCanvas = self.iface.mapCanvas()
51-
for i in range(mapCanvas.layerCount()):
52-
layer = mapCanvas.layer(i)
53-
if layer.type() == layer.VectorLayer:
54-
if layer.geometryType() == QGis.Polygon:
55-
self.inPolygon.addItem(layer.name())
56-
elif layer.geometryType() == QGis.Line:
57-
self.inPoint.addItem(layer.name())
58-
59-
def accept(self):
60-
if self.inPolygon.currentText() == "":
61-
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify input polygon vector layer"))
62-
elif self.outShape.text() == "":
63-
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify output shapefile"))
64-
elif self.inPoint.currentText() == "":
65-
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify input line vector layer"))
66-
elif self.lnField.text() == "":
67-
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify output length field"))
68-
else:
69-
inPoly = self.inPolygon.currentText()
70-
inLns = self.inPoint.currentText()
71-
inField = self.lnField.text()
72-
outPath = self.outShape.text()
73-
if outPath.contains("\\"):
74-
outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
75-
else:
76-
outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
77-
if outName.endsWith(".shp"):
78-
outName = outName.left(outName.length() - 4)
79-
self.compute(inPoly, inLns, inField, outPath, self.progressBar)
80-
self.outShape.clear()
81-
addToTOC = QMessageBox.question(self, self.tr("Sum line lengths"), self.tr("Created output shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(unicode(outPath)), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
82-
if addToTOC == QMessageBox.Yes:
83-
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
84-
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
85-
self.progressBar.setValue(0)
86-
87-
def outFile(self):
88-
self.outShape.clear()
89-
( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
90-
if self.shapefileName is None or self.encoding is None:
91-
return
92-
self.outShape.setText( QString( self.shapefileName ) )
42+
def __init__(self, iface):
43+
QDialog.__init__(self)
44+
self.iface = iface
45+
# Set up the user interface from Designer.
46+
self.setupUi(self)
47+
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
48+
self.setWindowTitle(self.tr("Sum line lengths"))
49+
# populate layer list
50+
self.progressBar.setValue(0)
51+
mapCanvas = self.iface.mapCanvas()
52+
layers = ftools_utils.getLayerNames([QGis.Line])
53+
self.inPoint.addItems(layers)
54+
layers = ftools_utils.getLayerNames([QGis.Polygon])
55+
self.inPolygon.addItems(layers)
56+
57+
def accept(self):
58+
if self.inPolygon.currentText() == "":
59+
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify input polygon vector layer"))
60+
elif self.outShape.text() == "":
61+
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify output shapefile"))
62+
elif self.inPoint.currentText() == "":
63+
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify input line vector layer"))
64+
elif self.lnField.text() == "":
65+
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify output length field"))
66+
else:
67+
inPoly = self.inPolygon.currentText()
68+
inLns = self.inPoint.currentText()
69+
inField = self.lnField.text()
70+
outPath = self.outShape.text()
71+
if outPath.contains("\\"):
72+
outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
73+
else:
74+
outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
75+
if outName.endsWith(".shp"):
76+
outName = outName.left(outName.length() - 4)
77+
self.compute(inPoly, inLns, inField, outPath, self.progressBar)
78+
self.outShape.clear()
79+
addToTOC = QMessageBox.question(self, self.tr("Sum line lengths"), self.tr("Created output shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(unicode(outPath)), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
80+
if addToTOC == QMessageBox.Yes:
81+
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
82+
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
83+
self.progressBar.setValue(0)
9384

94-
def compute(self, inPoly, inLns, inField, outPath, progressBar):
95-
polyLayer = self.getVectorLayerByName(inPoly)
96-
lineLayer = self.getVectorLayerByName(inLns)
97-
polyProvider = polyLayer.dataProvider()
98-
lineProvider = lineLayer.dataProvider()
99-
if polyProvider.crs() <> lineProvider.crs():
100-
QMessageBox.warning(self, self.tr("CRS warning!"), self.tr("Warning: Input layers have non-matching CRS.\nThis may cause unexpected results."))
101-
allAttrs = polyProvider.attributeIndexes()
102-
polyProvider.select(allAttrs)
103-
allAttrs = lineProvider.attributeIndexes()
104-
lineProvider.select(allAttrs)
105-
fieldList = self.getFieldList(polyLayer)
106-
index = polyProvider.fieldNameIndex(unicode(inField))
107-
if index == -1:
108-
index = polyProvider.fieldCount()
109-
field = QgsField(unicode(inField), QVariant.Int, "real", 24, 15, self.tr("length field"))
110-
fieldList[index] = field
111-
sRs = polyProvider.crs()
112-
inFeat = QgsFeature()
113-
outFeat = QgsFeature()
114-
inGeom = QgsGeometry()
115-
outGeom = QgsGeometry()
116-
distArea = QgsDistanceArea()
117-
lineProvider.rewind()
118-
start = 15.00
119-
add = 85.00 / polyProvider.featureCount()
120-
check = QFile(self.shapefileName)
121-
if check.exists():
122-
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
123-
return
124-
writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fieldList, polyProvider.geometryType(), sRs)
125-
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, polyProvider.geometryType(), sRs)
126-
while polyProvider.nextFeature(inFeat):
127-
inGeom = inFeat.geometry()
128-
atMap = inFeat.attributeMap()
129-
lineList = []
130-
length = 0
131-
#(check, lineList) = lineLayer.featuresInRectangle(inGeom.boundingBox(), True, False)
132-
lineLayer.select(inGeom.boundingBox(), False)
133-
lineList = lineLayer.selectedFeatures()
134-
if len(lineList) > 0: check = 0
135-
else: check = 1
136-
if check == 0:
137-
for i in lineList:
138-
if inGeom.intersects(i.geometry()):
139-
outGeom = inGeom.intersection(i.geometry())
140-
length = length + distArea.measure(outGeom)
141-
outFeat.setGeometry(inGeom)
142-
outFeat.setAttributeMap(atMap)
143-
outFeat.addAttribute(index, QVariant(length))
144-
writer.addFeature(outFeat)
145-
start = start + 1
146-
progressBar.setValue(start)
147-
del writer
148-
149-
def getVectorLayerByName(self, myName):
150-
mc = self.iface.mapCanvas()
151-
nLayers = mc.layerCount()
152-
for l in range(nLayers):
153-
layer = mc.layer(l)
154-
if layer.name() == unicode(myName):
155-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
156-
if vlayer.isValid():
157-
return vlayer
158-
else:
159-
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Vector layer is not valid"))
85+
def outFile(self):
86+
self.outShape.clear()
87+
( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
88+
if self.shapefileName is None or self.encoding is None:
89+
return
90+
self.outShape.setText( QString( self.shapefileName ) )
16091

161-
def getFieldList(self, vlayer):
162-
fProvider = vlayer.dataProvider()
163-
feat = QgsFeature()
164-
allAttrs = fProvider.attributeIndexes()
165-
fProvider.select(allAttrs)
166-
myFields = fProvider.fields()
167-
return myFields
92+
def compute(self, inPoly, inLns, inField, outPath, progressBar):
93+
polyLayer = ftools_utils.getVectorLayerByName(inPoly)
94+
lineLayer = ftools_utils.getVectorLayerByName(inLns)
95+
polyProvider = polyLayer.dataProvider()
96+
lineProvider = lineLayer.dataProvider()
97+
if polyProvider.crs() <> lineProvider.crs():
98+
QMessageBox.warning(self, self.tr("CRS warning!"), self.tr("Warning: Input layers have non-matching CRS.\nThis may cause unexpected results."))
99+
allAttrs = polyProvider.attributeIndexes()
100+
polyProvider.select(allAttrs)
101+
allAttrs = lineProvider.attributeIndexes()
102+
lineProvider.select(allAttrs)
103+
fieldList = ftools_utils.getFieldList(polyLayer)
104+
index = polyProvider.fieldNameIndex(unicode(inField))
105+
if index == -1:
106+
index = polyProvider.fieldCount()
107+
field = QgsField(unicode(inField), QVariant.Double, "real", 24, 15, self.tr("length field"))
108+
fieldList[index] = field
109+
sRs = polyProvider.crs()
110+
inFeat = QgsFeature()
111+
inFeatB = QgsFeature()
112+
outFeat = QgsFeature()
113+
inGeom = QgsGeometry()
114+
outGeom = QgsGeometry()
115+
distArea = QgsDistanceArea()
116+
lineProvider.rewind()
117+
start = 15.00
118+
add = 85.00 / polyProvider.featureCount()
119+
check = QFile(self.shapefileName)
120+
if check.exists():
121+
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
122+
return
123+
writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fieldList, polyProvider.geometryType(), sRs)
124+
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, polyProvider.geometryType(), sRs)
125+
spatialIndex = ftools_utils.createIndex( lineProvider )
126+
while polyProvider.nextFeature(inFeat):
127+
inGeom = QgsGeometry(inFeat.geometry())
128+
atMap = inFeat.attributeMap()
129+
lineList = []
130+
length = 0
131+
#(check, lineList) = lineLayer.featuresInRectangle(inGeom.boundingBox(), True, False)
132+
#lineLayer.select(inGeom.boundingBox(), False)
133+
#lineList = lineLayer.selectedFeatures()
134+
lineList = spatialIndex.intersects(inGeom.boundingBox())
135+
if len(lineList) > 0: check = 0
136+
else: check = 1
137+
if check == 0:
138+
for i in lineList:
139+
lineProvider.featureAtId( int( i ), inFeatB , True, allAttrs )
140+
tmpGeom = QgsGeometry( inFeatB.geometry() )
141+
if inGeom.intersects(tmpGeom):
142+
outGeom = inGeom.intersection(tmpGeom)
143+
length = length + distArea.measure(outGeom)
144+
outFeat.setGeometry(inGeom)
145+
outFeat.setAttributeMap(atMap)
146+
outFeat.addAttribute(index, QVariant(length))
147+
writer.addFeature(outFeat)
148+
start = start + 1
149+
progressBar.setValue(start)
150+
del writer

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

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -179,22 +179,3 @@ def outFile(self):
179179
if self.shapefileName is None or self.encoding is None:
180180
return
181181
self.outShape.setText( QString( self.shapefileName ) )
182-
183-
def getVectorLayerByName(self, myName):
184-
mc = self.iface.mapCanvas()
185-
nLayers = mc.layerCount()
186-
for l in range(nLayers):
187-
layer = mc.layer(l)
188-
if unicode(layer.name()) == unicode(myName):
189-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
190-
if vlayer.isValid():
191-
return vlayer
192-
193-
def getMapLayerByName(self, myName):
194-
mc = self.iface.mapCanvas()
195-
nLayers = mc.layerCount()
196-
for l in range(nLayers):
197-
layer = mc.layer(l)
198-
if unicode(layer.name()) == unicode(myName):
199-
if layer.isValid():
200-
return layer
Lines changed: 133 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
#-----------------------------------------------------------
23
#
34
# Vector Split
@@ -32,177 +33,142 @@
3233
from PyQt4.QtGui import *
3334
from qgis.core import *
3435
#import os, sys, string, math
36+
import ftools_utils
3537
from ui_frmVectorSplit import Ui_Dialog
3638

3739
class Dialog(QDialog, Ui_Dialog):
38-
def __init__(self, iface):
39-
QDialog.__init__(self)
40-
self.iface = iface
41-
# Set up the user interface from Designer.
42-
self.setupUi(self)
43-
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
44-
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
45-
self.setWindowTitle(self.tr("Split vector layer"))
46-
# populate layer list
47-
self.progressBar.setValue(0)
48-
mapCanvas = self.iface.mapCanvas()
49-
for i in range(mapCanvas.layerCount()):
50-
layer = mapCanvas.layer(i)
51-
if layer.type() == layer.VectorLayer:
52-
self.inShape.addItem(layer.name())
40+
def __init__(self, iface):
41+
QDialog.__init__(self)
42+
self.iface = iface
43+
# Set up the user interface from Designer.
44+
self.setupUi(self)
45+
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
46+
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
47+
self.setWindowTitle(self.tr("Split vector layer"))
48+
# populate layer list
49+
self.progressBar.setValue(0)
50+
mapCanvas = self.iface.mapCanvas()
51+
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
52+
self.inShape.addItems(layers)
5353

54-
def update(self, inputLayer):
55-
self.inField.clear()
56-
changedLayer = self.getVectorLayerByName(inputLayer)
57-
changedField = self.getFieldList(changedLayer)
58-
for i in changedField:
59-
self.inField.addItem(unicode(changedField[i].name()))
54+
def update(self, inputLayer):
55+
self.inField.clear()
56+
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
57+
changedField = ftools_utils.getFieldList(changedLayer)
58+
for i in changedField:
59+
self.inField.addItem(unicode(changedField[i].name()))
6060

61-
def accept(self):
62-
if self.inShape.currentText() == "":
63-
QMessageBox.information(self, self.tr("Vector Split"), self.tr("No input shapefile specified"))
64-
elif self.outShape.text() == "":
65-
QMessageBox.information(self, self.tr("Vector Split"), self.tr("Please specify output shapefile"))
66-
else:
67-
inField = self.inField.currentText()
68-
inLayer = self.getVectorLayerByName(unicode(self.inShape.currentText()))
69-
self.progressBar.setValue(5)
70-
outPath = QString(self.folderName)
71-
self.progressBar.setValue(10)
72-
if outPath.contains("\\"):
73-
outPath.replace("\\", "/")
74-
self.progressBar.setValue(15)
75-
if not outPath.endsWith("/"): outPath = outPath + "/"
76-
self.split(inLayer, unicode(outPath), unicode(inField), self.progressBar)
77-
self.progressBar.setValue(100)
78-
self.outShape.clear()
79-
QMessageBox.information(self, self.tr("Vector Split"), self.tr("Created output shapefiles in folder:\n%1").arg( outPath))
80-
self.progressBar.setValue(0)
61+
def accept(self):
62+
if self.inShape.currentText() == "":
63+
QMessageBox.information(self, self.tr("Vector Split"), self.tr("No input shapefile specified"))
64+
elif self.outShape.text() == "":
65+
QMessageBox.information(self, self.tr("Vector Split"), self.tr("Please specify output shapefile"))
66+
else:
67+
inField = self.inField.currentText()
68+
inLayer = ftools_utils.getVectorLayerByName(unicode(self.inShape.currentText()))
69+
self.progressBar.setValue(5)
70+
outPath = QString(self.folderName)
71+
self.progressBar.setValue(10)
72+
if outPath.contains("\\"):
73+
outPath.replace("\\", "/")
74+
self.progressBar.setValue(15)
75+
if not outPath.endsWith("/"): outPath = outPath + "/"
76+
self.split(inLayer, unicode(outPath), unicode(inField), self.progressBar)
77+
self.progressBar.setValue(100)
78+
self.outShape.clear()
79+
QMessageBox.information(self, self.tr("Vector Split"), self.tr("Created output shapefiles in folder:\n%1").arg( outPath))
80+
self.progressBar.setValue(0)
8181

82-
def outFile(self):
83-
fileDialog = QFileDialog()
84-
settings = QSettings()
85-
dirName = settings.value("/UI/lastShapefileDir").toString()
86-
fileDialog.setDirectory(dirName)
87-
encodingBox = QComboBox()
88-
l = QLabel("Encoding:",fileDialog)
89-
fileDialog.layout().addWidget(l)
90-
fileDialog.layout().addWidget(encodingBox)
91-
encodingBox.addItem("BIG5")
92-
encodingBox.addItem("BIG5-HKSCS")
93-
encodingBox.addItem("EUCJP")
94-
encodingBox.addItem("EUCKR")
95-
encodingBox.addItem("GB2312")
96-
encodingBox.addItem("GBK")
97-
encodingBox.addItem("GB18030")
98-
encodingBox.addItem("JIS7")
99-
encodingBox.addItem("SHIFT-JIS")
100-
encodingBox.addItem("TSCII")
101-
encodingBox.addItem("UTF-8")
102-
encodingBox.addItem("UTF-16")
103-
encodingBox.addItem("KOI8-R")
104-
encodingBox.addItem("KOI8-U")
105-
encodingBox.addItem("ISO8859-1")
106-
encodingBox.addItem("ISO8859-2")
107-
encodingBox.addItem("ISO8859-3")
108-
encodingBox.addItem("ISO8859-4")
109-
encodingBox.addItem("ISO8859-5")
110-
encodingBox.addItem("ISO8859-6")
111-
encodingBox.addItem("ISO8859-7")
112-
encodingBox.addItem("ISO8859-8")
113-
encodingBox.addItem("ISO8859-8-I")
114-
encodingBox.addItem("ISO8859-9")
115-
encodingBox.addItem("ISO8859-10")
116-
encodingBox.addItem("ISO8859-13")
117-
encodingBox.addItem("ISO8859-14")
118-
encodingBox.addItem("ISO8859-15")
119-
encodingBox.addItem("IBM 850")
120-
encodingBox.addItem("IBM 866")
121-
encodingBox.addItem("CP874")
122-
encodingBox.addItem("CP1250")
123-
encodingBox.addItem("CP1251")
124-
encodingBox.addItem("CP1252")
125-
encodingBox.addItem("CP1253")
126-
encodingBox.addItem("CP1254")
127-
encodingBox.addItem("CP1255")
128-
encodingBox.addItem("CP1256")
129-
encodingBox.addItem("CP1257")
130-
encodingBox.addItem("CP1258")
131-
encodingBox.addItem("Apple Roman")
132-
encodingBox.addItem("TIS-620")
133-
encodingBox.setItemText(encodingBox.currentIndex(), QString(QTextCodec.codecForLocale().name()))
134-
fileDialog.setAcceptMode(QFileDialog.AcceptSave)
135-
fileDialog.setFileMode(QFileDialog.DirectoryOnly)
136-
fileDialog.setConfirmOverwrite(False)
137-
if not fileDialog.exec_() == 1:
138-
return
139-
folders = fileDialog.selectedFiles()
140-
self.folderName = unicode(folders.first())
141-
self.encoding = unicode(encodingBox.currentText())
142-
self.outShape.clear()
143-
self.outShape.insert(self.folderName)
144-
145-
def split(self, vlayer, outPath, inField, progressBar):
146-
provider = vlayer.dataProvider()
147-
#unique = []
148-
index = provider.fieldNameIndex(inField)
149-
#provider.uniqueValues(index, unique)
150-
unique = self.getUniqueValues(vlayer.dataProvider(), int(index))
151-
baseName = outPath + vlayer.name() + "_" + inField + "_"
152-
allAttrs = provider.attributeIndexes()
153-
provider.select(allAttrs)
154-
fieldList = self.getFieldList(vlayer)
155-
sRs = provider.crs()
156-
inFeat = QgsFeature()
157-
progressBar.setValue(20)
158-
start = 20.00
159-
add = 80.00 / len(unique)
160-
for i in unique:
161-
check = QFile(baseName + "_" + unicode(i) + ".shp")
162-
if check.exists():
163-
if not QgsVectorFileWriter.deleteShapeFile(baseName + "_" + unicode(i.toString().trimmed()) + ".shp"):
164-
return
165-
writer = QgsVectorFileWriter(baseName + "_" + unicode(i.toString().trimmed()) + ".shp", self.encoding, fieldList, vlayer.dataProvider().geometryType(), sRs)
166-
provider.rewind()
167-
while provider.nextFeature(inFeat):
168-
atMap = inFeat.attributeMap()
169-
#changed from QVariant(i) to below:
170-
if atMap[index] == i:
171-
writer.addFeature(inFeat)
172-
del writer
173-
start = start + add
174-
progressBar.setValue(start)
175-
176-
def getVectorLayerByName(self, myName):
177-
mc = self.iface.mapCanvas()
178-
nLayers = mc.layerCount()
179-
for l in range(nLayers):
180-
layer = mc.layer(l)
181-
if unicode(layer.name()) == unicode(myName):
182-
vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
183-
if vlayer.isValid():
184-
return vlayer
185-
186-
def getFieldList(self, vlayer):
187-
fProvider = vlayer.dataProvider()
188-
feat = QgsFeature()
189-
allAttrs = fProvider.attributeIndexes()
190-
# fetch all attributes for each feature
191-
fProvider.select(allAttrs)
192-
# retrieve all fields
193-
myFields = fProvider.fields()
194-
return myFields
195-
196-
def getUniqueValues(self, provider, index):
197-
allAttrs = provider.attributeIndexes()
198-
provider.select(allAttrs)
199-
feat = QgsFeature()
200-
values = []
201-
check = []
202-
provider.rewind()
203-
while provider.nextFeature(feat):
204-
if not feat.attributeMap()[index].toString() in check:
205-
values.append( feat.attributeMap()[index] )
206-
check.append( feat.attributeMap()[index].toString() )
207-
return values
82+
def outFile(self):
83+
fileDialog = QFileDialog()
84+
settings = QSettings()
85+
dirName = settings.value("/UI/lastShapefileDir").toString()
86+
fileDialog.setDirectory(dirName)
87+
encodingBox = QComboBox()
88+
l = QLabel("Encoding:",fileDialog)
89+
fileDialog.layout().addWidget(l)
90+
fileDialog.layout().addWidget(encodingBox)
91+
encodingBox.addItem("BIG5")
92+
encodingBox.addItem("BIG5-HKSCS")
93+
encodingBox.addItem("EUCJP")
94+
encodingBox.addItem("EUCKR")
95+
encodingBox.addItem("GB2312")
96+
encodingBox.addItem("GBK")
97+
encodingBox.addItem("GB18030")
98+
encodingBox.addItem("JIS7")
99+
encodingBox.addItem("SHIFT-JIS")
100+
encodingBox.addItem("TSCII")
101+
encodingBox.addItem("UTF-8")
102+
encodingBox.addItem("UTF-16")
103+
encodingBox.addItem("KOI8-R")
104+
encodingBox.addItem("KOI8-U")
105+
encodingBox.addItem("ISO8859-1")
106+
encodingBox.addItem("ISO8859-2")
107+
encodingBox.addItem("ISO8859-3")
108+
encodingBox.addItem("ISO8859-4")
109+
encodingBox.addItem("ISO8859-5")
110+
encodingBox.addItem("ISO8859-6")
111+
encodingBox.addItem("ISO8859-7")
112+
encodingBox.addItem("ISO8859-8")
113+
encodingBox.addItem("ISO8859-8-I")
114+
encodingBox.addItem("ISO8859-9")
115+
encodingBox.addItem("ISO8859-10")
116+
encodingBox.addItem("ISO8859-13")
117+
encodingBox.addItem("ISO8859-14")
118+
encodingBox.addItem("ISO8859-15")
119+
encodingBox.addItem("IBM 850")
120+
encodingBox.addItem("IBM 866")
121+
encodingBox.addItem("CP874")
122+
encodingBox.addItem("CP1250")
123+
encodingBox.addItem("CP1251")
124+
encodingBox.addItem("CP1252")
125+
encodingBox.addItem("CP1253")
126+
encodingBox.addItem("CP1254")
127+
encodingBox.addItem("CP1255")
128+
encodingBox.addItem("CP1256")
129+
encodingBox.addItem("CP1257")
130+
encodingBox.addItem("CP1258")
131+
encodingBox.addItem("Apple Roman")
132+
encodingBox.addItem("TIS-620")
133+
encodingBox.setItemText(encodingBox.currentIndex(), QString(QTextCodec.codecForLocale().name()))
134+
fileDialog.setAcceptMode(QFileDialog.AcceptSave)
135+
fileDialog.setFileMode(QFileDialog.DirectoryOnly)
136+
fileDialog.setConfirmOverwrite(False)
137+
if not fileDialog.exec_() == 1:
138+
return
139+
folders = fileDialog.selectedFiles()
140+
self.folderName = unicode(folders.first())
141+
self.encoding = unicode(encodingBox.currentText())
142+
self.outShape.clear()
143+
self.outShape.insert(self.folderName)
208144

145+
def split(self, vlayer, outPath, inField, progressBar):
146+
provider = vlayer.dataProvider()
147+
#unique = []
148+
index = provider.fieldNameIndex(inField)
149+
#provider.uniqueValues(index, unique)
150+
unique = ftools_utils.getUniqueValues(vlayer.dataProvider(), int(index))
151+
baseName = outPath + vlayer.name() + "_" + inField + "_"
152+
allAttrs = provider.attributeIndexes()
153+
provider.select(allAttrs)
154+
fieldList = ftools_utils.getFieldList(vlayer)
155+
sRs = provider.crs()
156+
inFeat = QgsFeature()
157+
progressBar.setValue(20)
158+
start = 20.00
159+
add = 80.00 / len(unique)
160+
for i in unique:
161+
check = QFile(baseName + "_" + unicode(i) + ".shp")
162+
if check.exists():
163+
if not QgsVectorFileWriter.deleteShapeFile(baseName + "_" + unicode(i.toString().trimmed()) + ".shp"):
164+
return
165+
writer = QgsVectorFileWriter(baseName + "_" + unicode(i.toString().trimmed()) + ".shp", self.encoding, fieldList, vlayer.dataProvider().geometryType(), sRs)
166+
provider.rewind()
167+
while provider.nextFeature(inFeat):
168+
atMap = inFeat.attributeMap()
169+
#changed from QVariant(i) to below:
170+
if atMap[index] == i:
171+
writer.addFeature(inFeat)
172+
del writer
173+
start = start + add
174+
progressBar.setValue(start)

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

Lines changed: 52 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,57 @@
1-
<ui version="4.0" >
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
23
<class>Dialog</class>
3-
<widget class="QDialog" name="Dialog" >
4-
<property name="windowModality" >
5-
<enum>Qt::WindowModal</enum>
6-
</property>
7-
<property name="geometry" >
4+
<widget class="QDialog" name="Dialog">
5+
<property name="geometry">
86
<rect>
97
<x>0</x>
108
<y>0</y>
119
<width>374</width>
1210
<height>287</height>
1311
</rect>
1412
</property>
15-
<property name="windowTitle" >
13+
<property name="windowTitle">
1614
<string>Random Selection Tool</string>
1715
</property>
18-
<property name="sizeGripEnabled" >
16+
<property name="sizeGripEnabled">
1917
<bool>true</bool>
2018
</property>
21-
<layout class="QGridLayout" name="gridLayout" >
22-
<item row="0" column="0" colspan="2" >
23-
<widget class="QLabel" name="label_3" >
24-
<property name="text" >
19+
<layout class="QGridLayout" name="gridLayout">
20+
<item row="0" column="0" colspan="2">
21+
<widget class="QLabel" name="label_3">
22+
<property name="text">
2523
<string>Input Vector Layer</string>
2624
</property>
2725
</widget>
2826
</item>
29-
<item row="1" column="0" colspan="2" >
30-
<widget class="QComboBox" name="inShape" />
27+
<item row="1" column="0" colspan="2">
28+
<widget class="QComboBox" name="inShape"/>
3129
</item>
32-
<item row="2" column="0" colspan="2" >
33-
<widget class="QLabel" name="label_2" >
34-
<property name="text" >
30+
<item row="2" column="0" colspan="2">
31+
<widget class="QLabel" name="label_2">
32+
<property name="text">
3533
<string>Randomly Select</string>
3634
</property>
3735
</widget>
3836
</item>
39-
<item row="3" column="0" colspan="2" >
40-
<layout class="QHBoxLayout" >
37+
<item row="3" column="0" colspan="2">
38+
<layout class="QHBoxLayout">
4139
<item>
42-
<widget class="QRadioButton" name="rdoNumber" >
43-
<property name="text" >
40+
<widget class="QRadioButton" name="rdoNumber">
41+
<property name="text">
4442
<string>Number of Features</string>
4543
</property>
46-
<property name="checked" >
44+
<property name="checked">
4745
<bool>true</bool>
4846
</property>
4947
</widget>
5048
</item>
5149
<item>
5250
<spacer>
53-
<property name="orientation" >
51+
<property name="orientation">
5452
<enum>Qt::Horizontal</enum>
5553
</property>
56-
<property name="sizeHint" stdset="0" >
54+
<property name="sizeHint" stdset="0">
5755
<size>
5856
<width>40</width>
5957
<height>20</height>
@@ -62,29 +60,29 @@
6260
</spacer>
6361
</item>
6462
<item>
65-
<widget class="QSpinBox" name="spnNumber" >
66-
<property name="minimum" >
63+
<widget class="QSpinBox" name="spnNumber">
64+
<property name="minimum">
6765
<number>1</number>
6866
</property>
6967
</widget>
7068
</item>
7169
</layout>
7270
</item>
73-
<item row="4" column="0" colspan="2" >
74-
<layout class="QHBoxLayout" >
71+
<item row="4" column="0" colspan="2">
72+
<layout class="QHBoxLayout">
7573
<item>
76-
<widget class="QRadioButton" name="rdoPercent" >
77-
<property name="text" >
74+
<widget class="QRadioButton" name="rdoPercent">
75+
<property name="text">
7876
<string>Percentage of Features</string>
7977
</property>
8078
</widget>
8179
</item>
8280
<item>
8381
<spacer>
84-
<property name="orientation" >
82+
<property name="orientation">
8583
<enum>Qt::Horizontal</enum>
8684
</property>
87-
<property name="sizeHint" stdset="0" >
85+
<property name="sizeHint" stdset="0">
8886
<size>
8987
<width>40</width>
9088
<height>20</height>
@@ -93,58 +91,58 @@
9391
</spacer>
9492
</item>
9593
<item>
96-
<widget class="QSpinBox" name="spnPercent" >
97-
<property name="suffix" >
94+
<widget class="QSpinBox" name="spnPercent">
95+
<property name="suffix">
9896
<string>%</string>
9997
</property>
100-
<property name="prefix" >
98+
<property name="prefix">
10199
<string/>
102100
</property>
103-
<property name="minimum" >
101+
<property name="minimum">
104102
<number>1</number>
105103
</property>
106-
<property name="maximum" >
104+
<property name="maximum">
107105
<number>100</number>
108106
</property>
109-
<property name="value" >
107+
<property name="value">
110108
<number>50</number>
111109
</property>
112110
</widget>
113111
</item>
114112
</layout>
115113
</item>
116-
<item row="5" column="0" colspan="2" >
114+
<item row="5" column="0" colspan="2">
117115
<spacer>
118-
<property name="orientation" >
116+
<property name="orientation">
119117
<enum>Qt::Vertical</enum>
120118
</property>
121-
<property name="sizeHint" stdset="0" >
119+
<property name="sizeHint" stdset="0">
122120
<size>
123121
<width>20</width>
124122
<height>40</height>
125123
</size>
126124
</property>
127125
</spacer>
128126
</item>
129-
<item row="6" column="0" >
130-
<widget class="QProgressBar" name="progressBar" >
131-
<property name="value" >
127+
<item row="6" column="0">
128+
<widget class="QProgressBar" name="progressBar">
129+
<property name="value">
132130
<number>0</number>
133131
</property>
134-
<property name="alignment" >
132+
<property name="alignment">
135133
<set>Qt::AlignCenter</set>
136134
</property>
137-
<property name="textVisible" >
135+
<property name="textVisible">
138136
<bool>true</bool>
139137
</property>
140138
</widget>
141139
</item>
142-
<item row="6" column="1" >
143-
<widget class="QDialogButtonBox" name="buttonBox_2" >
144-
<property name="orientation" >
140+
<item row="6" column="1">
141+
<widget class="QDialogButtonBox" name="buttonBox_2">
142+
<property name="orientation">
145143
<enum>Qt::Horizontal</enum>
146144
</property>
147-
<property name="standardButtons" >
145+
<property name="standardButtons">
148146
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
149147
</property>
150148
</widget>
@@ -159,11 +157,11 @@
159157
<receiver>Dialog</receiver>
160158
<slot>accept()</slot>
161159
<hints>
162-
<hint type="sourcelabel" >
160+
<hint type="sourcelabel">
163161
<x>133</x>
164162
<y>273</y>
165163
</hint>
166-
<hint type="destinationlabel" >
164+
<hint type="destinationlabel">
167165
<x>215</x>
168166
<y>290</y>
169167
</hint>
@@ -175,11 +173,11 @@
175173
<receiver>Dialog</receiver>
176174
<slot>close()</slot>
177175
<hints>
178-
<hint type="sourcelabel" >
176+
<hint type="sourcelabel">
179177
<x>59</x>
180178
<y>273</y>
181179
</hint>
182-
<hint type="destinationlabel" >
180+
<hint type="destinationlabel">
183181
<x>132</x>
184182
<y>239</y>
185183
</hint>

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

Lines changed: 57 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,79 @@
1-
<ui version="4.0" >
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
23
<class>Dialog</class>
3-
<widget class="QDialog" name="Dialog" >
4-
<property name="windowModality" >
5-
<enum>Qt::WindowModal</enum>
6-
</property>
7-
<property name="geometry" >
4+
<widget class="QDialog" name="Dialog">
5+
<property name="geometry">
86
<rect>
97
<x>0</x>
108
<y>0</y>
119
<width>355</width>
1210
<height>285</height>
1311
</rect>
1412
</property>
15-
<property name="windowTitle" >
13+
<property name="windowTitle">
1614
<string>Random Selection From Within Subsets</string>
1715
</property>
18-
<property name="sizeGripEnabled" >
16+
<property name="sizeGripEnabled">
1917
<bool>true</bool>
2018
</property>
21-
<layout class="QGridLayout" name="gridLayout" >
22-
<item row="0" column="0" colspan="2" >
23-
<layout class="QVBoxLayout" >
19+
<layout class="QGridLayout" name="gridLayout">
20+
<item row="0" column="0" colspan="2">
21+
<layout class="QVBoxLayout">
2422
<item>
25-
<widget class="QLabel" name="label_3" >
26-
<property name="text" >
23+
<widget class="QLabel" name="label_3">
24+
<property name="text">
2725
<string>Input Vector Layer</string>
2826
</property>
2927
</widget>
3028
</item>
3129
<item>
32-
<widget class="QComboBox" name="inShape" />
30+
<widget class="QComboBox" name="inShape"/>
3331
</item>
3432
</layout>
3533
</item>
36-
<item row="1" column="0" colspan="2" >
37-
<layout class="QVBoxLayout" >
34+
<item row="1" column="0" colspan="2">
35+
<layout class="QVBoxLayout">
3836
<item>
39-
<widget class="QLabel" name="label_4" >
40-
<property name="text" >
37+
<widget class="QLabel" name="label_4">
38+
<property name="text">
4139
<string>Input subset field (unique ID field)</string>
4240
</property>
4341
</widget>
4442
</item>
4543
<item>
46-
<widget class="QComboBox" name="inField" />
44+
<widget class="QComboBox" name="inField"/>
4745
</item>
4846
</layout>
4947
</item>
50-
<item row="2" column="0" colspan="2" >
51-
<layout class="QVBoxLayout" >
48+
<item row="2" column="0" colspan="2">
49+
<layout class="QVBoxLayout">
5250
<item>
53-
<layout class="QVBoxLayout" >
51+
<layout class="QVBoxLayout">
5452
<item>
55-
<widget class="QLabel" name="label_2" >
56-
<property name="text" >
53+
<widget class="QLabel" name="label_2">
54+
<property name="text">
5755
<string>Randomly Select</string>
5856
</property>
5957
</widget>
6058
</item>
6159
<item>
62-
<layout class="QHBoxLayout" >
60+
<layout class="QHBoxLayout">
6361
<item>
64-
<widget class="QRadioButton" name="rdoNumber" >
65-
<property name="text" >
62+
<widget class="QRadioButton" name="rdoNumber">
63+
<property name="text">
6664
<string>Number of Features</string>
6765
</property>
68-
<property name="checked" >
66+
<property name="checked">
6967
<bool>true</bool>
7068
</property>
7169
</widget>
7270
</item>
7371
<item>
7472
<spacer>
75-
<property name="orientation" >
73+
<property name="orientation">
7674
<enum>Qt::Horizontal</enum>
7775
</property>
78-
<property name="sizeHint" stdset="0" >
76+
<property name="sizeHint" stdset="0">
7977
<size>
8078
<width>40</width>
8179
<height>20</height>
@@ -84,8 +82,8 @@
8482
</spacer>
8583
</item>
8684
<item>
87-
<widget class="QSpinBox" name="spnNumber" >
88-
<property name="minimum" >
85+
<widget class="QSpinBox" name="spnNumber">
86+
<property name="minimum">
8987
<number>1</number>
9088
</property>
9189
</widget>
@@ -95,20 +93,20 @@
9593
</layout>
9694
</item>
9795
<item>
98-
<layout class="QHBoxLayout" >
96+
<layout class="QHBoxLayout">
9997
<item>
100-
<widget class="QRadioButton" name="rdoPercent" >
101-
<property name="text" >
98+
<widget class="QRadioButton" name="rdoPercent">
99+
<property name="text">
102100
<string>Percentage of Features</string>
103101
</property>
104102
</widget>
105103
</item>
106104
<item>
107105
<spacer>
108-
<property name="orientation" >
106+
<property name="orientation">
109107
<enum>Qt::Horizontal</enum>
110108
</property>
111-
<property name="sizeHint" stdset="0" >
109+
<property name="sizeHint" stdset="0">
112110
<size>
113111
<width>40</width>
114112
<height>20</height>
@@ -117,20 +115,20 @@
117115
</spacer>
118116
</item>
119117
<item>
120-
<widget class="QSpinBox" name="spnPercent" >
121-
<property name="suffix" >
118+
<widget class="QSpinBox" name="spnPercent">
119+
<property name="suffix">
122120
<string>%</string>
123121
</property>
124-
<property name="prefix" >
122+
<property name="prefix">
125123
<string/>
126124
</property>
127-
<property name="minimum" >
125+
<property name="minimum">
128126
<number>1</number>
129127
</property>
130-
<property name="maximum" >
128+
<property name="maximum">
131129
<number>100</number>
132130
</property>
133-
<property name="value" >
131+
<property name="value">
134132
<number>50</number>
135133
</property>
136134
</widget>
@@ -139,38 +137,38 @@
139137
</item>
140138
</layout>
141139
</item>
142-
<item row="3" column="0" colspan="2" >
140+
<item row="3" column="0" colspan="2">
143141
<spacer>
144-
<property name="orientation" >
142+
<property name="orientation">
145143
<enum>Qt::Vertical</enum>
146144
</property>
147-
<property name="sizeHint" stdset="0" >
145+
<property name="sizeHint" stdset="0">
148146
<size>
149147
<width>20</width>
150148
<height>20</height>
151149
</size>
152150
</property>
153151
</spacer>
154152
</item>
155-
<item row="4" column="0" >
156-
<widget class="QProgressBar" name="progressBar" >
157-
<property name="value" >
153+
<item row="4" column="0">
154+
<widget class="QProgressBar" name="progressBar">
155+
<property name="value">
158156
<number>24</number>
159157
</property>
160-
<property name="alignment" >
158+
<property name="alignment">
161159
<set>Qt::AlignCenter</set>
162160
</property>
163-
<property name="textVisible" >
161+
<property name="textVisible">
164162
<bool>true</bool>
165163
</property>
166164
</widget>
167165
</item>
168-
<item row="4" column="1" >
169-
<widget class="QDialogButtonBox" name="buttonBox_2" >
170-
<property name="orientation" >
166+
<item row="4" column="1">
167+
<widget class="QDialogButtonBox" name="buttonBox_2">
168+
<property name="orientation">
171169
<enum>Qt::Horizontal</enum>
172170
</property>
173-
<property name="standardButtons" >
171+
<property name="standardButtons">
174172
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
175173
</property>
176174
</widget>
@@ -185,11 +183,11 @@
185183
<receiver>Dialog</receiver>
186184
<slot>accept()</slot>
187185
<hints>
188-
<hint type="sourcelabel" >
186+
<hint type="sourcelabel">
189187
<x>133</x>
190188
<y>273</y>
191189
</hint>
192-
<hint type="destinationlabel" >
190+
<hint type="destinationlabel">
193191
<x>215</x>
194192
<y>290</y>
195193
</hint>
@@ -201,11 +199,11 @@
201199
<receiver>Dialog</receiver>
202200
<slot>close()</slot>
203201
<hints>
204-
<hint type="sourcelabel" >
202+
<hint type="sourcelabel">
205203
<x>59</x>
206204
<y>273</y>
207205
</hint>
208-
<hint type="destinationlabel" >
206+
<hint type="destinationlabel">
209207
<x>132</x>
210208
<y>239</y>
211209
</hint>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,9 @@ def getLayerNames( vTypes ):
170170
if layer.type() == QgsMapLayer.VectorLayer:
171171
if layer.geometryType() in vTypes:
172172
layerlist.append( unicode( layer.name() ) )
173+
elif layer.type() == QgsMapLayer.RasterLayer:
174+
if "Raster" in vTypes:
175+
layerlist.append( unicode( layer.name() ) )
173176
return layerlist
174177

175178
# Return list of names of all fields from input QgsVectorLayer

0 commit comments

Comments
 (0)
Please sign in to comment.