Checks for long field names and warns when this will be a problem. Patch from Alex.

git-svn-id: http://svn.osgeo.org/qgis/trunk@13348 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
cfarmer 2010-04-22 17:47:02 +00:00
parent 0dcb259e94
commit 2949ffdc51

View File

@ -198,6 +198,11 @@ class GeoprocessingDialog( QDialog, Ui_Dialog ):
self.cancel_close.setText( self.tr("Close") ) self.cancel_close.setText( self.tr("Close") )
QObject.disconnect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread ) QObject.disconnect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread )
out_text = "" out_text = ""
if results[3] is not None:
QMessageBox.warning( self, self.tr( "Geoprocessing" ),
self.tr( "No output created. File creation error:\n%1" )
.arg( results[3] ) )
return
if not results[2] or not results[1] or not results [0]: if not results[2] or not results[1] or not results [0]:
out_text = self.tr( "\nWarnings:" ) out_text = self.tr( "\nWarnings:" )
end_text = self.tr( "\nSome output geometries may be missing or invalid.\n\nWould you like to add the new layer anyway?" ) end_text = self.tr( "\nSome output geometries may be missing or invalid.\n\nWould you like to add the new layer anyway?" )
@ -240,6 +245,7 @@ class geoprocessingThread( QThread ):
def run( self ): def run( self ):
self.running = True self.running = True
self.vlayerA = ftools_utils.getVectorLayerByName( self.myLayerA ) self.vlayerA = ftools_utils.getVectorLayerByName( self.myLayerA )
error = None
if self.myFunction == 1 or self.myFunction == 2 or self.myFunction == 4: if self.myFunction == 1 or self.myFunction == 2 or self.myFunction == 4:
( self.myParam, useField ) = self.checkParameter( self.vlayerA, self.myParam ) ( self.myParam, useField ) = self.checkParameter( self.vlayerA, self.myParam )
if not self.myParam is None: if not self.myParam is None:
@ -254,14 +260,14 @@ class geoprocessingThread( QThread ):
if self.myFunction == 3: if self.myFunction == 3:
geos, feature, match = self.difference() geos, feature, match = self.difference()
elif self.myFunction == 5: elif self.myFunction == 5:
geos, feature, match = self.intersect() geos, feature, match, error = self.intersect()
elif self.myFunction == 6: elif self.myFunction == 6:
geos, feature, match = self.union() geos, feature, match, error = self.union()
elif self.myFunction == 7: elif self.myFunction == 7:
geos, feature, match = self.symetrical_difference() geos, feature, match, error = self.symetrical_difference()
elif self.myFunction == 8: elif self.myFunction == 8:
geos, feature, match = self.clip() geos, feature, match = self.clip()
self.emit( SIGNAL( "runFinished(PyQt_PyObject)" ), (geos, feature, match) ) self.emit( SIGNAL( "runFinished(PyQt_PyObject)" ), (geos, feature, match, error) )
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 ) self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
def stop(self): def stop(self):
@ -836,8 +842,14 @@ class geoprocessingThread( QThread ):
vproviderB.select( allAttrsB ) vproviderB.select( allAttrsB )
crs_match = vproviderA.crs() == vproviderB.crs() crs_match = vproviderA.crs() == vproviderB.crs()
fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB ) fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB )
longNames = ftools_utils.checkFieldNameLenght( fields )
if not longNames.isEmpty():
message = QString( 'Following field names are longer then 10 characters:\n%1' ).arg( longNames.join( '\n' ) )
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, message
writer = QgsVectorFileWriter( self.myName, self.myEncoding, writer = QgsVectorFileWriter( self.myName, self.myEncoding,
fields, vproviderA.geometryType(), vproviderA.crs() ) fields, vproviderA.geometryType(), vproviderA.crs() )
if writer.hasError():
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, writer.errorMessage()
inFeatA = QgsFeature() inFeatA = QgsFeature()
inFeatB = QgsFeature() inFeatB = QgsFeature()
outFeat = QgsFeature() outFeat = QgsFeature()
@ -979,7 +991,7 @@ class geoprocessingThread( QThread ):
break break
del writer del writer
print crs_match print crs_match
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, None
def union( self ): def union( self ):
GEOS_EXCEPT = True GEOS_EXCEPT = True
@ -993,8 +1005,14 @@ class geoprocessingThread( QThread ):
if vproviderA.crs() == vproviderB.crs(): crs_match = True if vproviderA.crs() == vproviderB.crs(): crs_match = True
else: crs_match = False else: crs_match = False
fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB ) fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB )
longNames = ftools_utils.checkFieldNameLenght( fields )
if not longNames.isEmpty():
message = QString( 'Following field names are longer then 10 characters:\n%1' ).arg( longNames.join( '\n' ) )
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, message
writer = QgsVectorFileWriter( self.myName, self.myEncoding, writer = QgsVectorFileWriter( self.myName, self.myEncoding,
fields, vproviderA.geometryType(), vproviderA.crs() ) fields, vproviderA.geometryType(), vproviderA.crs() )
if writer.hasError():
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, writer.errorMessage()
inFeatA = QgsFeature() inFeatA = QgsFeature()
inFeatB = QgsFeature() inFeatB = QgsFeature()
outFeat = QgsFeature() outFeat = QgsFeature()
@ -1102,7 +1120,7 @@ class geoprocessingThread( QThread ):
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement ) self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
nElement += 1 nElement += 1
del writer del writer
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, None
def symetrical_difference( self ): def symetrical_difference( self ):
GEOS_EXCEPT = True GEOS_EXCEPT = True
@ -1116,8 +1134,14 @@ class geoprocessingThread( QThread ):
if vproviderA.crs() == vproviderB.crs(): crs_match = True if vproviderA.crs() == vproviderB.crs(): crs_match = True
else: crs_match = False else: crs_match = False
fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB ) fields = ftools_utils.combineVectorFields( self.vlayerA, self.vlayerB )
longNames = ftools_utils.checkFieldNameLenght( fields )
if not longNames.isEmpty():
message = QString( 'Following field names are longer then 10 characters:\n%1' ).arg( longNames.join( '\n' ) )
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, message
writer = QgsVectorFileWriter( self.myName, self.myEncoding, writer = QgsVectorFileWriter( self.myName, self.myEncoding,
fields, vproviderA.geometryType(), vproviderA.crs() ) fields, vproviderA.geometryType(), vproviderA.crs() )
if writer.hasError():
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, writer.errorMessage()
inFeatA = QgsFeature() inFeatA = QgsFeature()
inFeatB = QgsFeature() inFeatB = QgsFeature()
outFeat = QgsFeature() outFeat = QgsFeature()
@ -1184,7 +1208,7 @@ class geoprocessingThread( QThread ):
FEATURE_EXCEPT = False FEATURE_EXCEPT = False
continue continue
del writer del writer
return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match return GEOS_EXCEPT, FEATURE_EXCEPT, crs_match, None
def clip( self ): def clip( self ):
GEOS_EXCEPT = True GEOS_EXCEPT = True