fixes for gdaltools info and clipper - raster file dialog filters needs fixing

This commit is contained in:
Etienne Tourigny 2013-06-03 23:42:12 -03:00
parent 52b773fb14
commit edfa0fc09c
5 changed files with 212 additions and 199 deletions

View File

@ -42,6 +42,8 @@ import os
# to know the os
import platform
import sys
import string
import re
# Escapes arguments and return them joined in a string
def escapeAndJoin(strList):
@ -57,8 +59,8 @@ def escapeAndJoin(strList):
# Retrieves last used dir from persistent settings
def getLastUsedDir():
settings = QSettings()
lastProjectDir = settings.value( "/UI/lastProjectDir", u"." )
return settings.value( "/GdalTools/lastUsedDir", QVariant(lastProjectDir) )
lastProjectDir = settings.value( "/UI/lastProjectDir", ".", type=str )
return settings.value( "/GdalTools/lastUsedDir", lastProjectDir, type=str )
# Stores last used dir in persistent settings
def setLastUsedDir(filePath):
@ -68,7 +70,7 @@ def setLastUsedDir(filePath):
dirPath = fileInfo.filePath()
else:
dirPath = fileInfo.path()
settings.setValue( "/GdalTools/lastUsedDir", QVariant(dirPath) )
settings.setValue( "/GdalTools/lastUsedDir", dirPath )
# Retrieves GDAL binaries location
def getGdalBinPath():
@ -78,7 +80,7 @@ def getGdalBinPath():
# Stores GDAL binaries location
def setGdalBinPath( path ):
settings = QSettings()
settings.setValue( "/GdalTools/gdalPath", QVariant( path ) )
settings.setValue( "/GdalTools/gdalPath", path )
# Retrieves GDAL python modules location
def getGdalPymodPath():
@ -88,7 +90,7 @@ def getGdalPymodPath():
# Stores GDAL python modules location
def setGdalPymodPath( path ):
settings = QSettings()
settings.setValue( "/GdalTools/gdalPymodPath", QVariant( path ) )
settings.setValue( "/GdalTools/gdalPymodPath", path )
# Retrieves GDAL help files location
def getHelpPath():
@ -98,7 +100,7 @@ def getHelpPath():
# Stores GDAL help files location
def setHelpPath( path ):
settings = QSettings()
settings.setValue( "/GdalTools/helpPath", QVariant( path ) )
settings.setValue( "/GdalTools/helpPath", path )
# Retrieves last used encoding from persistent settings
def getLastUsedEncoding():
@ -108,11 +110,11 @@ def getLastUsedEncoding():
# Stores last used encoding in persistent settings
def setLastUsedEncoding(encoding):
settings = QSettings()
settings.setValue( "/UI/encoding", QVariant(encoding) )
settings.setValue( "/UI/encoding", encoding)
def getRasterExtensions():
formats = FileFilter.allRastersFilter().split( ";;" )
extensions = QStringList()
extensions = []
for f in formats:
if f.contains( "*.bt" ) or f.contains( "*.mpr" ): # Binary Terrain or ILWIS
continue
@ -121,9 +123,9 @@ def getRasterExtensions():
def getVectorExtensions():
formats = FileFilter.allVectorsFilter().split( ";;" )
extensions = QStringList()
extensions = []
for f in formats:
extensions << FileFilter.getFilterExtensions( f )
extensions.append(FileFilter.getFilterExtensions( f ))
return extensions
class LayerRegistry(QObject):
@ -195,7 +197,7 @@ class LayerRegistry(QObject):
return filter( self.isVector, LayerRegistry.layers )
def getRasterFiles(path, recursive=False):
rasters = QStringList()
rasters = []
if not QFileInfo(path).exists():
return rasters
@ -224,16 +226,16 @@ def fillRasterOutputFormat(aFilter = None, filename = None):
if aFilter != None:
supportedRasters = GdalConfig.getSupportedRasters()
filterName = FileFilter.getFilterName( aFilter ).remove( QRegExp('^.*\] ') )
filterName = re.sub('^.*\] ', '', FileFilter.getFilterName( aFilter ))
if supportedRasters.has_key( filterName ):
return supportedRasters[ filterName ][ "SHORTNAME" ]
shortName = GdalConfig.SupportedRasters.long2ShortName(filterName)
if shortName.isEmpty() and filename != None:
if shortName == '' and filename != None:
shortName = GdalConfig.SupportedRasters.filename2ShortName(filename)
if shortName.isEmpty():
if shortName == '':
shortName = "GTiff"
return shortName
@ -243,16 +245,16 @@ def fillVectorOutputFormat(aFilter = None, filename = None):
if aFilter != None:
supportedVectors = GdalConfig.getSupportedVectors()
filterName = FileFilter.getFilterName( aFilter ).remove( QRegExp('^.*\] ') )
filterName = re.sub('^.*\] ', '', FileFilter.getFilterName( aFilter ))
if supportedVectors.has_key( filterName ):
return supportedVectors[ filterName ][ "SHORTNAME" ]
pass #shortName = GdalConfig.SupportedVectors.long2ShortName(filterName)
if shortName.isEmpty() and filename != None:
if shortName == '' and filename != None:
pass #shortName = GdalConfig.SupportedVectors.filename2ShortName(filename)
if shortName.isEmpty():
if shortName == '':
shortName = "ESRI Shapefile"
return shortName
@ -285,38 +287,41 @@ def getVectorFields(vectorFile):
# get raster SRS if possible
def getRasterSRS( parent, fileName ):
processSRS = QProcess( parent )
processSRS.start( "gdalinfo", QStringList() << fileName, QIODevice.ReadOnly )
processSRS.start( "gdalinfo", [fileName], QIODevice.ReadOnly )
arr = QByteArray()
if processSRS.waitForFinished():
arr = processSRS.readAllStandardOutput()
processSRS.close()
if arr.isEmpty():
arr = str(arr)
if arr == '':
return ''
info = QString( arr ).split( "\n" ).filter( "AUTHORITY" )
info = string.split( arr, sep="\n" )
# TODO .filter( "AUTHORITY" )
if info.count() == 0:
return ''
srs = info[ info.count() - 1 ]
srs = srs.simplified().remove( "AUTHORITY[" )
srs = srs.remove( QRegExp( "\]{2,4},?" ) ).remove( "\"" )
srs = re.sub("\"", '', re.sub("\]{2,4},?", '', srs) )
info = srs.split( "," )
srs = info[ 0 ] + ":" + info[ 1 ]
return srs
def getRasterExtent(parent, fileName):
processSRS = QProcess( parent )
processSRS.start( "gdalinfo", QStringList() << fileName, QIODevice.ReadOnly )
processSRS.start( "gdalinfo", [fileName], QIODevice.ReadOnly )
arr = QByteArray()
if processSRS.waitForFinished():
arr = processSRS.readAllStandardOutput()
processSRS.close()
arr = str(arr)
if arr.isEmpty():
if arr == '':
return
info = QString( arr ).split( "\n" )
info = string.split( arr, sep="\n" )
ulCoord = info[ info.indexOf( QRegExp( "^Upper\sLeft.*" ) ) ].simplified()
lrCoord = info[ info.indexOf( QRegExp( "^Lower\sRight.*" ) ) ].simplified()
ulCoord = ulCoord[ulCoord.indexOf( "(" ) + 1 : ulCoord.indexOf( ")" ) - 1].split( "," )
@ -356,12 +361,11 @@ class FileDialog:
# change the selected filter value
if selectedFilter != None:
selectedFilter.clear()
selectedFilter += dialog.selectedNameFilter()
selectedFilter = dialog.selectedNameFilter()
# save the last used dir and return the selected files
files = dialog.selectedFiles()
if not files.isEmpty():
if files != '':
setLastUsedDir(files[0])
if fileMode != QFileDialog.ExistingFiles:
@ -399,6 +403,8 @@ class FileDialog:
@classmethod
def getSaveFileName(self, parent = None, caption = '', filter = '', selectedFilter = None, useEncoding = False):
print("filter:")
print(str(filter))
return self.getDialog(parent, caption, QFileDialog.AcceptSave, QFileDialog.AnyFile, filter, selectedFilter, useEncoding)
@classmethod
@ -414,7 +420,7 @@ class FileFilter:
@classmethod
def setFilter(self, typeName, aFilter):
settings = QSettings()
settings.setValue( "/GdalTools/" + typeName + "FileFilter", QVariant( aFilter ) )
settings.setValue( "/GdalTools/" + typeName + "FileFilter", aFilter )
# stores the supported raster file filter
rastersFilter = ''
@ -422,20 +428,12 @@ class FileFilter:
# Retrieves the filter for supported raster files
@classmethod
def allRastersFilter(self):
if self.rastersFilter.isEmpty():
if self.rastersFilter == '':
# TODO fix this, does not work
QgsRasterLayer.buildSupportedRasterFileFilter(self.rastersFilter)
# workaround for QGis < 1.5 (see #2376)
# separates multiple extensions that joined by a slash
if QGis.QGIS_VERSION[0:3] < "1.5":
formats = self.rastersFilter.split( ";;" )
self.rastersFilter = ''
for f in formats:
oldExts = QString(f).remove( QRegExp('^.*\(') ).remove( QRegExp('\).*$') )
newExts = QString(oldExts).replace( '/', ' *.' )
if not self.rastersFilter.isEmpty():
self.rastersFilter += ';;'
self.rastersFilter += f.replace( oldExts, newExts )
# removed as this is a core plugin QGis >= 1.9
return self.rastersFilter
@ -453,7 +451,7 @@ class FileFilter:
# Retrieves the filter for supported vector files
@classmethod
def allVectorsFilter(self):
if self.vectorsFilter.isEmpty():
if self.vectorsFilter == '':
self.vectorsFilter = QgsProviderRegistry.instance().fileVectorFilters()
return self.vectorsFilter
@ -468,20 +466,20 @@ class FileFilter:
# Retrieves the extensions list from a filter string
@classmethod
def getFilterExtensions(self, aFilter):
extList = QStringList()
extList = []
# foreach format in filter string
for f in aFilter.split( ";;" ):
# gets the list of extensions from the filter
exts = f.remove( QRegExp('^.*\(') ).remove( QRegExp('\).*$') )
exts = re.sub('\).*$', '', re.sub('^.*\(', '', f))
# if there is no extensions or the filter matches all, then return an empty list
# otherwise return the list of estensions
if not exts.isEmpty() and exts != "*" and exts != "*.*":
extList << exts.split(" ")
if exts != '' and exts != "*" and exts != "*.*":
extList.append(exts.split(" "))
return extList
@classmethod
def getFilterName(self, aFilter):
return QString(aFilter).remove( QRegExp('\ \(.*$') ).trimmed()
return string.strip(re.sub('\ \(.*$', '', aFilter))
@classmethod
def filenameMatchesFilterExt(self, fileName, ext):
@ -525,48 +523,51 @@ class GdalConfig:
driver = gdal.GetDriver(i)
if driver == None:
QgsLogger.warning("unable to get driver " + QString.number(i))
QgsLogger.warning("unable to get driver " + str(i))
continue
# now we need to see if the driver is for something currently
# supported; if not, we give it a miss for the next driver
longName = QString(driver.LongName).remove( QRegExp( '\(.*$' ) ).trimmed()
shortName = QString(driver.ShortName).remove( QRegExp( '\(.*$' ) ).trimmed()
longName = string.strip(re.sub('\(.*$', '', driver.LongName))
shortName = string.strip(re.sub('\(.*$', '', driver.ShortName))
extensions = ''
description = QString(driver.GetDescription())
glob = QStringList()
description = driver.GetDescription()
glob = []
metadata = driver.GetMetadata()
if metadata.has_key(gdal.DMD_EXTENSION):
extensions = QString(metadata[gdal.DMD_EXTENSION])
extensions = str(metadata[gdal.DMD_EXTENSION])
if not longName.isEmpty():
if not extensions.isEmpty():
if longName != '':
if extensions != '':
# XXX add check for SDTS; in that case we want (*CATD.DDF)
glob << QString("*." + extensions.replace("/", " *.")).split(" ")
#TODO fix and test
#glob << QString("*." + extensions.replace("/", " *.")).split(" ")
glob.append(string.split("*." + string.replace(extensions,"/", " *."), sep=(" ")))
# Add only the first JP2 driver found to the filter list (it's the one GDAL uses)
if description == "JPEG2000" or description.startsWith("JP2"): # JP2ECW, JP2KAK, JP2MrSID
if description == "JPEG2000" or description.startswith("JP2"): # JP2ECW, JP2KAK, JP2MrSID
if jp2Driver != None:
continue # skip if already found a JP2 driver
jp2Driver = driver # first JP2 driver found
glob << "*.j2k" # add alternate extension
glob.append("*.j2k") # add alternate extension
elif description == "GTiff":
glob << "*.tiff"
glob.append("*.tiff")
elif description == "JPEG":
glob << "*.jpeg"
glob.append("*.jpeg")
else:
# USGS DEMs use "*.dem"
if description.startsWith( "USGSDEM" ):
glob << "*.dem"
elif description.startsWith( "DTED" ):
if description.startswith( "USGSDEM" ):
glob.append("*.dem")
elif description.startswith( "DTED" ):
# DTED use "*.dt0"
glob << "*.dt0"
elif description.startsWith( "MrSID" ):
glob.append("*.dt0")
elif description.startswith( "MrSID" ):
# MrSID use "*.sid"
glob << "*.sid"
glob.append("*.sid")
else:
continue
@ -593,111 +594,119 @@ class GdalConfig:
driver = ogr.GetDriver(i)
if driver == None:
QgsLogger.warning("unable to get driver " + QString.number(i))
QgsLogger.warning("unable to get driver " + str(i))
continue
driverName = QString(driver.GetName())
driverName = driver.GetName()
longName = ''
glob = QStringList()
glob = []
if driverName.startsWith( "AVCBin" ):
if driverName.startswith( "AVCBin" ):
pass #myDirectoryDrivers += "Arc/Info Binary Coverage,AVCBin"
elif driverName.startsWith( "AVCE00" ):
elif driverName.startswith( "AVCE00" ):
longName = "Arc/Info ASCII Coverage"
glob << "*.e00"
elif driverName.startsWith( "BNA" ):
glob.append("*.e00")
elif driverName.startswith( "BNA" ):
longName = "Atlas BNA"
glob << "*.bna"
elif driverName.startsWith( "CSV" ):
glob.append("*.bna")
elif driverName.startswith( "CSV" ):
longName = "Comma Separated Value"
glob << "*.csv"
elif driverName.startsWith( "DODS" ):
glob.append("*.csv")
elif driverName.startswith( "DODS" ):
pass #myProtocolDrivers += "DODS/OPeNDAP,DODS"
elif driverName.startsWith( "PGeo" ):
elif driverName.startswith( "PGeo" ):
pass #myDatabaseDrivers += "ESRI Personal GeoDatabase,PGeo"
# on Windows add a pair to the dict for this driver
if platform.system() == "Windows":
longName = "ESRI Personal GeoDatabase"
glob << "*.mdb"
elif driverName.startsWith( "SDE" ):
glob.append("*.mdb")
elif driverName.startswith( "SDE" ):
pass #myDatabaseDrivers += "ESRI ArcSDE,SDE"
elif driverName.startsWith( "ESRI" ):
elif driverName.startswith( "ESRI" ):
longName = "ESRI Shapefiles"
glob << "*.shp"
elif driverName.startsWith( "FMEObjects Gateway" ):
glob.append("*.shp")
elif driverName.startswith( "FMEObjects Gateway" ):
longName = "FMEObjects Gateway"
glob << "*.fdd"
elif driverName.startsWith( "GeoJSON" ):
glob.append("*.fdd")
elif driverName.startswith( "GeoJSON" ):
pass #myProtocolDrivers += "GeoJSON,GeoJSON"
longName = "GeoJSON"
glob << "*.geojson"
elif driverName.startsWith( "GeoRSS" ):
glob.append("*.geojson")
elif driverName.startswith( "GeoRSS" ):
longName = "GeoRSS"
glob << "*.xml"
elif driverName.startsWith( "GML" ):
glob.append("*.xml")
elif driverName.startswith( "GML" ):
longName = "Geography Markup Language"
glob << "*.gml"
elif driverName.startsWith( "GMT" ):
glob.append("*.gml")
elif driverName.startswith( "GMT" ):
longName = "GMT"
glob << "*.gmt"
elif driverName.startsWith( "GPX" ):
glob.append("*.gmt")
elif driverName.startswith( "GPX" ):
longName = "GPX"
glob << "*.gpx"
elif driverName.startsWith( "GRASS" ):
glob.append("*.gpx")
elif driverName.startswith( "GRASS" ):
pass #myDirectoryDrivers += "Grass Vector,GRASS"
elif driverName.startsWith( "IDB" ):
elif driverName.startswith( "IDB" ):
pass #myDatabaseDrivers += "Informix DataBlade,IDB"
elif driverName.startsWith( "Interlis 1" ):
elif driverName.startswith( "Interlis 1" ):
longName = "INTERLIS 1"
glob << "*.itf" << "*.xml" << "*.ili"
elif driverName.startsWith( "Interlis 2" ):
glob.append("*.itf")
glob.append("*.xml")
glob.append("*.ili")
elif driverName.startswith( "Interlis 2" ):
longName = "INTERLIS 2"
glob << "*.itf" << "*.xml" << "*.ili"
elif driverName.startsWith( "INGRES" ):
glob.append("*.itf")
glob.append("*.xml")
glob.append("*.ili")
elif driverName.startswith( "INGRES" ):
pass #myDatabaseDrivers += "INGRES,INGRES"
elif driverName.startsWith( "KML" ):
elif driverName.startswith( "KML" ):
longName = "KML"
glob << "*.kml"
elif driverName.startsWith( "MapInfo File" ):
glob.append("*.kml")
elif driverName.startswith( "MapInfo File" ):
longName = "Mapinfo File"
glob << "*.mif" << "*.tab"
elif driverName.startsWith( "DGN" ):
glob.append("*.mif")
glob.append("*.tab")
elif driverName.startswith( "DGN" ):
longName = "Microstation DGN"
glob << "*.dgn"
elif driverName.startsWith( "MySQL" ):
glob.append("*.dgn")
elif driverName.startswith( "MySQL" ):
pass #myDatabaseDrivers += "MySQL,MySQL"
elif driverName.startsWith( "OCI" ):
elif driverName.startswith( "OCI" ):
pass #myDatabaseDrivers += "Oracle Spatial,OCI"
elif driverName.startsWith( "ODBC" ):
elif driverName.startswith( "ODBC" ):
pass #myDatabaseDrivers += "ODBC,ODBC"
elif driverName.startsWith( "OGDI" ):
elif driverName.startswith( "OGDI" ):
pass #myDatabaseDrivers += "OGDI Vectors,OGDI"
elif driverName.startsWith( "PostgreSQL" ):
elif driverName.startswith( "PostgreSQL" ):
pass #myDatabaseDrivers += "PostgreSQL,PostgreSQL"
elif driverName.startsWith( "S57" ):
elif driverName.startswith( "S57" ):
longName = "S-57 Base file"
glob << "*.000"
elif driverName.startsWith( "SDTS" ):
glob.append("*.000")
elif driverName.startswith( "SDTS" ):
longName = "Spatial Data Transfer Standard"
glob << "*catd.ddf"
elif driverName.startsWith( "SQLite" ):
glob.append("*catd.ddf")
elif driverName.startswith( "SQLite" ):
longName = "SQLite"
glob << "*.sqlite"
elif driverName.startsWith( "UK .NTF" ):
glob.append("*.sqlite")
elif driverName.startswith( "UK .NTF" ):
pass #myDirectoryDrivers += "UK. NTF,UK. NTF"
elif driverName.startsWith( "TIGER" ):
elif driverName.startswith( "TIGER" ):
pass #myDirectoryDrivers += "U.S. Census TIGER/Line,TIGER"
elif driverName.startsWith( "VRT" ):
elif driverName.startswith( "VRT" ):
longName = "VRT - Virtual Datasource "
glob << "*.vrt"
elif driverName.startsWith( "XPlane" ):
glob.append("*.vrt")
elif driverName.startswith( "XPlane" ):
longName = "X-Plane/Flighgear"
glob << "apt.dat" << "nav.dat" << "fix.dat" << "awy.dat"
glob.append("apt.dat")
glob.append("nav.dat")
glob.append("fix.dat")
glob.append("awy.dat")
longName = QString(longName).trimmed()
longName = string.strip(longName)
if longName.isEmpty():
if longName =='':
continue
self.supportedVectors[longName] = {'EXTENSIONS': glob, 'LONGNAME': longName, 'SHORTNAME': driverName}
@ -710,7 +719,7 @@ class GdalConfig:
# retrieve the raster format short name by long format name
@classmethod
def long2ShortName(self, longName):
if longName.isEmpty():
if longName == '':
return ''
if self.dict_long2shortName.has_key(longName):
@ -739,7 +748,7 @@ class GdalConfig:
# retrieve the raster format short name by using the file name extension
@classmethod
def filename2ShortName(self, fileName):
if fileName.isEmpty():
if fileName == '':
return ''
shortName = ''
@ -753,7 +762,7 @@ class GdalConfig:
shortName = self.long2ShortName(longName)
break
if not shortName.isEmpty():
if not shortName == '':
break
return shortName
@ -767,7 +776,7 @@ class Version:
self.vers = ver.vers
elif isinstance(ver, tuple) or isinstance(ver, list):
self.vers = map(str, ver)
elif isinstance(ver, str) or isinstance(ver, QString):
elif isinstance(ver, str):
self.vers = self.string2vers(ver)
@staticmethod
@ -855,22 +864,22 @@ def setMacOSXDefaultEnvironment():
if os.path.exists( qgis_standalone_gdal_path ): # qgis standalone
# GDAL executables are in the QGis bin folder
if getGdalBinPath().isEmpty():
if getGdalBinPath() == '':
setGdalBinPath( qgis_bin )
# GDAL pymods are in the QGis python folder
if getGdalPymodPath().isEmpty():
if getGdalPymodPath() == '':
setGdalPymodPath( qgis_python )
# GDAL help is in the framework folder
if getHelpPath().isEmpty():
if getHelpPath() == '':
setHelpPath( u"%s/Resources/doc" % qgis_standalone_gdal_path )
elif os.path.exists( gdal_base_path ):
# all GDAL parts are in the GDAL framework folder
if getGdalBinPath().isEmpty():
if getGdalBinPath() == '':
setGdalBinPath( u"%s/Programs" % gdal_base_path )
if getGdalPymodPath().isEmpty():
if getGdalPymodPath() == '':
setGdalPymodPath( u"%s/Python/%s.%s/site-packages" % (gdal_base_path, sys.version_info[0], sys.version_info[1]) )
if getHelpPath().isEmpty():
if getHelpPath() == '':
setHelpPath( u"%s/Resources/doc" % gdal_base_path )

View File

@ -36,7 +36,7 @@ from ui_dialogBase import Ui_GdalToolsDialog as Ui_Dialog
import GdalTools_utils as Utils
from .. import resources_rc
import os, platform
import os, platform, string
class GdalToolsBaseDialog(QDialog, Ui_Dialog):
@ -51,7 +51,7 @@ class GdalToolsBaseDialog(QDialog, Ui_Dialog):
self.connect(self.process, SIGNAL("finished(int, QProcess::ExitStatus)"), self.processFinished)
self.setupUi(self)
self.arguments = QStringList()
self.arguments = []
self.editCmdBtn.setIcon( QIcon(":/icons/edit.png") )
self.connect(self.editCmdBtn, SIGNAL("toggled(bool)"), self.editCommand)
@ -138,7 +138,7 @@ class GdalToolsBaseDialog(QDialog, Ui_Dialog):
# show the online tool documentation in the default browser
def onHelp(self):
helpPath = Utils.getHelpPath()
if helpPath.isEmpty():
if helpPath == '':
url = QUrl("http://www.gdal.org/" + self.helpFileName)
else:
url = QUrl.fromLocalFile(helpPath + '/' + self.helpFileName)
@ -204,23 +204,24 @@ class GdalToolsBaseDialog(QDialog, Ui_Dialog):
return
# show the error message if there's one, otherwise show the process output message
msg = QString.fromLocal8Bit(self.process.readAllStandardError())
if msg.isEmpty():
outMessages = QString.fromLocal8Bit(self.process.readAllStandardOutput()).split( "\n" )
msg = str(self.process.readAllStandardError())
if msg == '':
outMessages = string.split( str(self.process.readAllStandardOutput()), sep="\n" )
# make sure to not show the help
for m in outMessages:
m = m.trimmed()
if m.isEmpty():
continue
if m.contains( QRegExp( "^(?:[Uu]sage:\\s)?" + QRegExp.escape(self.command) + "\\s" ) ):
if msg.isEmpty():
msg = self.tr ( "Invalid parameters." )
break
if m.contains( QRegExp( "0(?:\\.+[1-9]0{1,2})+" ) ):
m = string.strip(m)
if m == '':
continue
# TODO fix this
#if m.contains( QRegExp( "^(?:[Uu]sage:\\s)?" + QRegExp.escape(self.command) + "\\s" ) ):
# if msg.isEmpty():
# msg = self.tr ( "Invalid parameters." )
# break
#if m.contains( QRegExp( "0(?:\\.+[1-9]0{1,2})+" ) ):
# continue
if not msg.isEmpty():
if not msg == '':
msg += "\n"
msg += m

View File

@ -88,7 +88,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
if self.extentModeRadio.isChecked():
enabler = self.extentSelector.isCoordsValid()
else:
enabler = not self.maskSelector.filename().isEmpty()
enabler = not self.maskSelector.filename() == ''
self.base.enableRun( enabler )
def extentChanged(self):
@ -104,7 +104,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
def fillInputFileEdit(self):
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
inputFile = Utils.FileDialog.getOpenFileName(self, self.tr( "Select the input file for Polygonize" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
if inputFile.isEmpty():
if inputFile == '':
return
Utils.FileFilter.setLastUsedRasterFilter(lastUsedFilter)
@ -113,7 +113,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
def fillOutputFileEdit(self):
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
outputFile = Utils.FileDialog.getSaveFileName(self, self.tr( "Select the raster file to save the results to" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter)
if outputFile.isEmpty():
if outputFile == '':
return
Utils.FileFilter.setLastUsedRasterFilter(lastUsedFilter)
@ -123,7 +123,7 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
def fillMaskFileEdit(self):
lastUsedFilter = Utils.FileFilter.lastUsedVectorFilter()
maskFile = Utils.FileDialog.getOpenFileName(self, self.tr( "Select the mask file" ), Utils.FileFilter.allVectorsFilter(), lastUsedFilter )
if maskFile.isEmpty():
if maskFile == '':
return
Utils.FileFilter.setLastUsedVectorFilter(lastUsedFilter)
@ -137,48 +137,48 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
def getArgsModeExtent(self):
self.base.setPluginCommand( "gdal_translate" )
arguments = QStringList()
arguments = []
if self.noDataCheck.isChecked():
arguments << "-a_nodata"
arguments.append("-a_nodata")
arguments << str(self.noDataSpin.value())
if self.extentModeRadio.isChecked() and self.extentSelector.isCoordsValid():
rect = self.extentSelector.getExtent()
if rect != None:
arguments << "-projwin"
arguments << str(rect.xMinimum())
arguments << str(rect.yMaximum())
arguments << str(rect.xMaximum())
arguments << str(rect.yMinimum())
if not self.getOutputFileName().isEmpty():
arguments << "-of"
arguments << self.outputFormat
arguments << self.getInputFileName()
arguments << self.getOutputFileName()
arguments.append("-projwin")
arguments.append(str(rect.xMinimum()))
arguments.append(str(rect.yMaximum()))
arguments.append(str(rect.xMaximum()))
arguments.append(str(rect.yMinimum()))
if not self.getOutputFileName() == '':
arguments.append("-of")
arguments.append(self.outputFormat)
arguments.append(self.getInputFileName())
arguments.append(self.getOutputFileName())
return arguments
def getArgsModeMask(self):
self.base.setPluginCommand( "gdalwarp" )
arguments = QStringList()
arguments = []
if self.noDataCheck.isChecked():
arguments << "-dstnodata"
arguments << str(self.noDataSpin.value())
arguments.append("-dstnodata")
arguments.append(str(self.noDataSpin.value()))
if self.maskModeRadio.isChecked():
mask = self.maskSelector.filename()
if not mask.isEmpty():
arguments << "-q"
arguments << "-cutline"
arguments << mask
if not mask == '':
arguments.append("-q")
arguments.append("-cutline")
arguments.append(mask)
if Utils.GdalConfig.version() >= "1.8.0":
arguments << "-crop_to_cutline"
arguments.append("-crop_to_cutline")
if self.alphaBandCheck.isChecked():
arguments << "-dstalpha"
arguments.append("-dstalpha")
outputFn = self.getOutputFileName()
if not outputFn.isEmpty():
arguments << "-of"
arguments << self.outputFormat
arguments << self.getInputFileName()
arguments << outputFn
if not outputFn == '':
arguments.append("-of")
arguments.append(self.outputFormat)
arguments.append(self.getInputFileName())
arguments.append(outputFn)
return arguments
def getOutputFileName(self):

View File

@ -33,6 +33,7 @@ from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
import GdalTools_utils as Utils
import platform
import string
class GdalToolsDialog( QWidget, Ui_Widget, BasePluginWidget ):
@ -98,12 +99,13 @@ class GdalToolsDialog( QWidget, Ui_Widget, BasePluginWidget ):
def finished( self ):
self.rasterInfoList.clear()
arr = QByteArray()
arr = self.base.process.readAllStandardOutput()
arr = str(self.base.process.readAllStandardOutput()).strip()
if platform.system() == "Windows":
info = QString.fromLocal8Bit( arr ).trimmed().split( "\r\n" )
#info = QString.fromLocal8Bit( arr ).trimmed().split( "\r\n" )
# TODO test
info = string.split(arr, sep="\r\n" )
else:
info = QString( arr ).trimmed().split( "\n" )
info = string.split(arr, sep="\n" )
self.rasterInfoList.addItems( info )
def fillInputFileEdit( self ):
@ -116,12 +118,12 @@ class GdalToolsDialog( QWidget, Ui_Widget, BasePluginWidget ):
self.inSelector.setFilename( inputFile )
def getArguments( self ):
arguments = QStringList()
arguments = []
if self.suppressGCPCheck.isChecked():
arguments << "-nogcp"
arguments.append("-nogcp")
if self.suppressMDCheck.isChecked():
arguments << "-nomd"
arguments << self.getInputFileName()
arguments.append("-nomd")
arguments.append(self.getInputFileName())
return arguments
# def getOutputFileName( self ):

View File

@ -64,14 +64,14 @@ class GdalToolsInOutSelector(QWidget, Ui_GdalToolsInOutSelector):
self.connect(self.combo, SIGNAL("currentIndexChanged(int)"), self.indexChanged)
def clear(self):
self.filenames = QStringList()
self.filenames = []
self.fileEdit.clear()
self.clearComboState()
self.combo.clear()
def textChanged(self):
if self.getType() & self.MULTIFILE:
self.filenames = QStringList() << self.fileEdit.text().split(",")
self.filenames = self.fileEdit.text().split(",")
if self.getType() & self.LAYER:
index = self.combo.currentIndex()
if index >= 0:
@ -135,14 +135,15 @@ class GdalToolsInOutSelector(QWidget, Ui_GdalToolsInOutSelector):
elif isinstance(fn, str) or isinstance(fn, unicode):
fn = unicode( fn )
elif hasattr(fn, '__iter__') or isinstance(fn, QStringList):
if len( fn ) > 0:
fn = QStringList() << fn
if self.getType() & self.MULTIFILE:
self.filenames = fn
fn = fn.join( "," )
else:
fn = ''
#TODO fix and test
#elif hasattr(fn, '__iter__') or isinstance(fn, QStringList):
# if len( fn ) > 0:
# fn = QStringList() << fn
# if self.getType() & self.MULTIFILE:
# self.filenames = fn
# fn = fn.join( "," )
# else:
# fn = ''
else:
fn = ''
@ -224,7 +225,7 @@ class GdalToolsInOutSelector(QWidget, Ui_GdalToolsInOutSelector):
index, text, layerID = self.prevState
if index < 0:
if text.isEmpty() and self.combo.count() > 0:
if text == '' and self.combo.count() > 0:
index = 0
elif self.combo.findData( layerID ) < 0: