16
16
* *
17
17
***************************************************************************
18
18
"""
19
+
19
20
from sextante .core .QGisLayers import QGisLayers
20
21
21
22
__author__ = 'Carson Farmer, Victor Olaya'
27
28
# Utility functions
28
29
# -------------------------------------------------
29
30
#
30
- # combineVectorAttributes( QgsAttributeMap, QgsAttributeMap )
31
31
# convertFieldNameType( QgsField.name() )
32
32
# combineVectorFields( QgsVectorLayer, QgsVectorLayer )
33
33
# checkCRSCompatibility( QgsCoordinateReferenceSystem, QgsCoordinateReferenceSystem )
42
42
# getFieldNames( QgsVectorLayer )
43
43
# getVectorLayerByName( QgsVectorLayer.name() )
44
44
# getFieldList( QgsVectorLayer )
45
- # createIndex( QgsVectorDataProvider )
45
+ # createIndex( QgsFeatureList )
46
46
# addShapeToCanvas( QString *file path )
47
47
# getUniqueValues( QgsVectorDataProvider, int *field id )
48
48
# saveDialog( QWidget *parent )
49
49
# getFieldType( QgsVectorLayer, QgsField.name() )
50
- # getUniqueValuesCount( QgsVectorLayer, int fieldIndex, bool useSelection ):
50
+ # getUniqueValuesCount( QgsVectorLayer, int fieldIndex )
51
51
#
52
52
# -------------------------------------------------
53
53
56
56
from qgis .core import *
57
57
from qgis .gui import *
58
58
59
- # From two input attribute maps, create single attribute map
60
- def combineVectorAttributes ( atMapA , atMapB ):
61
- attribA = atMapA .values ()
62
- lengthA = len (attribA )
63
- attribB = atMapB .values ()
64
- lengthB = len (attribB )
65
- attribA .extend ( attribB )
66
- return dict ( zip ( range ( 0 , lengthB + lengthA ), attribA ) )
59
+ import locale
67
60
68
61
# For use with memory provider/layer, converts full field type to simple string
69
62
def convertFieldNameType ( inName ):
@@ -76,12 +69,10 @@ def convertFieldNameType( inName ):
76
69
77
70
# From two input field maps, create single field map
78
71
def combineVectorFields ( layerA , layerB ):
79
- fieldsA = layerA .dataProvider ().fields (). values ()
80
- fieldsB = layerB .dataProvider ().fields (). values ()
72
+ fieldsA = layerA .dataProvider ().fields ()
73
+ fieldsB = layerB .dataProvider ().fields ()
81
74
fieldsB = testForUniqueness ( fieldsA , fieldsB )
82
- seq = range ( 0 , len ( fieldsA ) + len ( fieldsB ) )
83
75
fieldsA .extend ( fieldsB )
84
- fieldsA = dict ( zip ( seq , fieldsA ) )
85
76
return fieldsA
86
77
87
78
# Check if two input CRSs are identical
@@ -188,7 +179,7 @@ def createUniqueFieldName( field ):
188
179
# Return list of field names with more than 10 characters length
189
180
def checkFieldNameLength ( fieldList ):
190
181
longNames = QStringList ()
191
- for num , field in fieldList . iteritems () :
182
+ for field in fieldList :
192
183
if field .name ().size () > 10 :
193
184
longNames << unicode ( field .name () )
194
185
return longNames
@@ -208,16 +199,16 @@ def getLayerNames( vTypes ):
208
199
elif layer .type () == QgsMapLayer .RasterLayer :
209
200
if "Raster" in vTypes :
210
201
layerlist .append ( unicode ( layer .name () ) )
211
- return layerlist
202
+ return sorted ( layerlist , cmp = locale . strcoll )
212
203
213
204
# Return list of names of all fields from input QgsVectorLayer
214
205
def getFieldNames ( vlayer ):
215
206
fieldmap = getFieldList ( vlayer )
216
207
fieldlist = []
217
- for name , field in fieldmap . iteritems () :
208
+ for field in fieldmap :
218
209
if not field .name () in fieldlist :
219
210
fieldlist .append ( unicode ( field .name () ) )
220
- return fieldlist
211
+ return sorted ( fieldlist , cmp = locale . strcoll )
221
212
222
213
# Return QgsVectorLayer from a layer name ( as string )
223
214
def getVectorLayerByName ( myName ):
@@ -229,6 +220,16 @@ def getVectorLayerByName( myName ):
229
220
else :
230
221
return None
231
222
223
+ # Return QgsRasterLayer from a layer name ( as string )
224
+ def getRasterLayerByName ( myName ):
225
+ layermap = QgsMapLayerRegistry .instance ().mapLayers ()
226
+ for name , layer in layermap .iteritems ():
227
+ if layer .type () == QgsMapLayer .RasterLayer and layer .name () == myName :
228
+ if layer .isValid ():
229
+ return layer
230
+ else :
231
+ return None
232
+
232
233
# Return QgsMapLayer from a layer name ( as string )
233
234
def getMapLayerByName ( myName ):
234
235
layermap = QgsMapLayerRegistry .instance ().mapLayers ()
@@ -241,19 +242,13 @@ def getMapLayerByName( myName ):
241
242
242
243
# Return the field list of a vector layer
243
244
def getFieldList ( vlayer ):
244
- vprovider = vlayer .dataProvider ()
245
- feat = QgsFeature ()
246
- allAttrs = vprovider .attributeIndexes ()
247
- vprovider .select ( allAttrs )
248
- myFields = vprovider .fields ()
249
- return myFields
245
+ return vlayer .dataProvider ().fields ()
250
246
251
247
# Convinience function to create a spatial index for input QgsVectorDataProvider
252
248
def createIndex ( features ):
253
- feat = QgsFeature ()
254
249
index = QgsSpatialIndex ()
255
- for feature in features :
256
- index .insertFeature ( feature )
250
+ for feat in features :
251
+ index .insertFeature ( feat )
257
252
return index
258
253
259
254
# Convinience function to add a vector layer to canvas based on input shapefile path ( as string )
@@ -273,11 +268,10 @@ def addShapeToCanvas( shapefile_path ):
273
268
274
269
# Return all unique values in field based on field index
275
270
def getUniqueValues ( provider , index ):
276
- values = provider .uniqueValues ( index )
277
- return values
271
+ return provider .uniqueValues ( index )
278
272
279
273
# Generate a save file dialog with a dropdown box for choosing encoding style
280
- def saveDialog ( parent , filtering = "Shapefiles (*.shp)" ):
274
+ def saveDialog ( parent , filtering = "Shapefiles (*.shp *.SHP )" ):
281
275
settings = QSettings ()
282
276
dirName = settings .value ( "/UI/lastShapefileDir" ).toString ()
283
277
encode = settings .value ( "/UI/encoding" ).toString ()
@@ -293,7 +287,7 @@ def saveDialog( parent, filtering="Shapefiles (*.shp)"):
293
287
return ( unicode ( files .first () ), unicode ( fileDialog .encoding () ) )
294
288
295
289
# Generate a save file dialog with a dropdown box for choosing encoding style
296
- def openDialog ( parent , filtering = "Shapefiles (*.shp)" ):
290
+ def openDialog ( parent , filtering = "Shapefiles (*.shp *.SHP)" ):
297
291
settings = QSettings ()
298
292
dirName = settings .value ( "/UI/lastShapefileDir" ).toString ()
299
293
encode = settings .value ( "/UI/encoding" ).toString ()
@@ -318,21 +312,17 @@ def dirDialog( parent ):
318
312
if not fileDialog .exec_ () == QDialog .Accepted :
319
313
return None , None
320
314
folders = fileDialog .selectedFiles ()
321
- settings .setValue ("/UI/lastShapefileDir" , QVariant ( QFileInfo ( unicode ( folders .first () ) ) ) )
315
+ settings .setValue ("/UI/lastShapefileDir" , QVariant ( QFileInfo ( unicode ( folders .first () ) ). absolutePath () ) )
322
316
return ( unicode ( folders .first () ), unicode ( fileDialog .encoding () ) )
323
317
324
318
# Return field type from it's name
325
319
def getFieldType (vlayer , fieldName ):
326
- fields = vlayer .dataProvider ().fields ()
327
- for name , field in fields .iteritems ():
320
+ for field in vlayer .dataProvider ().fields ():
328
321
if field .name () == fieldName :
329
322
return field .typeName ()
330
323
331
324
# return the number of unique values in field
332
- def getUniqueValuesCount ( layer , fieldIndex ):
333
- vprovider = layer .dataProvider ()
334
- allAttrs = vprovider .attributeIndexes ()
335
- vprovider .select ( allAttrs )
325
+ def getUniqueValuesCount ( layer , fieldIndex ):
336
326
count = 0
337
327
values = []
338
328
features = QGisLayers .features (layer )
@@ -342,21 +332,33 @@ def getUniqueValuesCount( layer, fieldIndex):
342
332
count += 1
343
333
return count
344
334
335
+ def getGeomType (gT ):
336
+ if gT == 3 or gT == 6 :
337
+ gTypeListPoly = [ QGis .WKBPolygon , QGis .WKBMultiPolygon ]
338
+ return gTypeListPoly
339
+ elif gT == 2 or gT == 5 :
340
+ gTypeListLine = [ QGis .WKBLineString , QGis .WKBMultiLineString ]
341
+ return gTypeListLine
342
+ elif gT == 1 or gT == 4 :
343
+ gTypeListPoint = [ QGis .WKBPoint , QGis .WKBMultiPoint ]
344
+ return gTypeListPoint
345
+
345
346
def getShapesByGeometryType ( baseDir , inShapes , geomType ):
346
- outShapes = QStringList ()
347
- for fileName in inShapes :
348
- layerPath = QFileInfo ( baseDir + "/" + fileName ).absoluteFilePath ()
349
- vLayer = QgsVectorLayer ( layerPath , QFileInfo ( layerPath ).baseName (), "ogr" )
350
- if not vLayer .isValid ():
351
- continue
352
- layerGeometry = vLayer .geometryType ()
353
- if layerGeometry == QGis .Polygon and geomType == 0 :
354
- outShapes << fileName
355
- elif layerGeometry == QGis .Line and geomType == 1 :
356
- outShapes << fileName
357
- elif layerGeometry == QGis .Point and geomType == 2 :
358
- outShapes << fileName
359
-
360
- if outShapes .count () == 0 :
361
- return None
362
- return outShapes
347
+ outShapes = QStringList ()
348
+ for fileName in inShapes :
349
+ layerPath = QFileInfo ( baseDir + "/" + fileName ).absoluteFilePath ()
350
+ vLayer = QgsVectorLayer ( layerPath , QFileInfo ( layerPath ).baseName (), "ogr" )
351
+ if not vLayer .isValid ():
352
+ continue
353
+ layerGeometry = vLayer .geometryType ()
354
+ if layerGeometry == QGis .Polygon and geomType == 0 :
355
+ outShapes << fileName
356
+ elif layerGeometry == QGis .Line and geomType == 1 :
357
+ outShapes << fileName
358
+ elif layerGeometry == QGis .Point and geomType == 2 :
359
+ outShapes << fileName
360
+
361
+ if outShapes .count () == 0 :
362
+ return None
363
+
364
+ return outShapes
0 commit comments