2010-06-04 00:31:48 +00:00
# -*- coding: utf-8 -*-
from PyQt4 . QtCore import *
from PyQt4 . QtGui import *
from qgis . core import *
from qgis . gui import *
from ui_widgetMerge import Ui_GdalToolsWidget as Ui_Widget
from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
import GdalTools_utils as Utils
class GdalToolsDialog ( QWidget , Ui_Widget , BasePluginWidget ) :
def __init__ ( self , iface ) :
QWidget . __init__ ( self )
self . iface = iface
self . setupUi ( self )
BasePluginWidget . __init__ ( self , self . iface , " gdal_merge.py " )
2011-04-15 18:30:10 +00:00
self . inSelector . setType ( self . inSelector . FILE )
self . outSelector . setType ( self . outSelector . FILE )
2012-02-11 19:07:56 +01:00
self . recurseCheck . hide ( )
2011-04-15 18:30:10 +00:00
2010-06-04 00:31:48 +00:00
self . outputFormat = Utils . fillRasterOutputFormat ( )
2010-10-29 22:07:56 +00:00
self . extent = None
2010-06-04 00:31:48 +00:00
self . setParamsStatus (
[
2011-04-15 18:30:10 +00:00
( self . inSelector , SIGNAL ( " filenameChanged() " ) ) ,
( self . outSelector , SIGNAL ( " filenameChanged() " ) ) ,
2010-06-04 00:31:48 +00:00
( self . noDataSpin , SIGNAL ( " valueChanged(int) " ) , self . noDataCheck ) ,
2012-02-11 19:07:56 +01:00
( self . inputDirCheck , SIGNAL ( " stateChanged(int) " ) ) ,
( self . recurseCheck , SIGNAL ( " stateChanged(int) " ) , self . inputDirCheck ) ,
( self . separateCheck , SIGNAL ( " stateChanged( int ) " ) ) ,
2010-06-04 00:31:48 +00:00
( self . pctCheck , SIGNAL ( " stateChanged( int ) " ) ) ,
2012-07-24 01:39:17 -03:00
( self . intersectCheck , SIGNAL ( " stateChanged( int ) " ) )
2010-06-04 00:31:48 +00:00
]
)
2011-04-15 18:30:10 +00:00
self . connect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputFilesEdit )
self . connect ( self . outSelector , SIGNAL ( " selectClicked() " ) , self . fillOutputFileEdit )
2012-02-11 19:07:56 +01:00
self . connect ( self . intersectCheck , SIGNAL ( " toggled(bool) " ) , self . refreshExtent )
self . connect ( self . inputDirCheck , SIGNAL ( " stateChanged( int ) " ) , self . switchToolMode )
self . connect ( self . inSelector , SIGNAL ( " filenameChanged() " ) , self . refreshExtent )
def switchToolMode ( self ) :
self . recurseCheck . setVisible ( self . inputDirCheck . isChecked ( ) )
self . inSelector . clear ( )
if self . inputDirCheck . isChecked ( ) :
self . inFileLabel = self . label . text ( )
self . label . setText ( QCoreApplication . translate ( " GdalTools " , " &Input directory " ) )
QObject . disconnect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputFilesEdit )
QObject . connect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputDir )
else :
self . label . setText ( self . inFileLabel )
QObject . connect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputFilesEdit )
QObject . disconnect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputDir )
2010-06-04 00:31:48 +00:00
def fillInputFilesEdit ( self ) :
lastUsedFilter = Utils . FileFilter . lastUsedRasterFilter ( )
files = Utils . FileDialog . getOpenFileNames ( self , self . tr ( " Select the files to Merge " ) , Utils . FileFilter . allRastersFilter ( ) , lastUsedFilter )
if files . isEmpty ( ) :
return
Utils . FileFilter . setLastUsedRasterFilter ( lastUsedFilter )
2012-02-11 19:07:56 +01:00
self . inSelector . setFilename ( files )
2010-06-04 00:31:48 +00:00
2012-02-11 19:07:56 +01:00
def refreshExtent ( self ) :
files = self . getInputFileNames ( )
2010-10-29 22:07:56 +00:00
self . intersectCheck . setEnabled ( files . count ( ) > 1 )
2010-06-04 00:31:48 +00:00
2012-02-11 19:07:56 +01:00
if not self . intersectCheck . isChecked ( ) :
self . someValueChanged ( )
return
2010-06-04 00:31:48 +00:00
if files . count ( ) < 2 :
self . intersectCheck . setChecked ( False )
2010-10-29 22:07:56 +00:00
return
2012-02-11 19:07:56 +01:00
self . extent = self . getIntersectedExtent ( files )
2010-10-29 22:07:56 +00:00
if self . extent == None :
QMessageBox . warning ( self , self . tr ( " Error retrieving the extent " ) , self . tr ( ' GDAL was unable to retrieve the extent from any file. \n The " Use intersected extent " option will be unchecked. ' ) )
self . intersectCheck . setChecked ( False )
2012-02-11 19:07:56 +01:00
return
2010-10-29 22:07:56 +00:00
elif self . extent . isEmpty ( ) :
QMessageBox . warning ( self , self . tr ( " Empty extent " ) , self . tr ( ' The computed extent is empty. \n Disable the " Use intersected extent " option to have a nonempty output. ' ) )
2012-02-11 19:07:56 +01:00
self . someValueChanged ( )
2010-06-04 00:31:48 +00:00
def fillOutputFileEdit ( self ) :
lastUsedFilter = Utils . FileFilter . lastUsedRasterFilter ( )
outputFile = Utils . FileDialog . getSaveFileName ( self , self . tr ( " Select where to save the Merge output " ) , Utils . FileFilter . allRastersFilter ( ) , lastUsedFilter )
if outputFile . isEmpty ( ) :
return
Utils . FileFilter . setLastUsedRasterFilter ( lastUsedFilter )
self . outputFormat = Utils . fillRasterOutputFormat ( lastUsedFilter , outputFile )
2011-04-15 18:30:10 +00:00
self . outSelector . setFilename ( outputFile )
2010-06-04 00:31:48 +00:00
2012-02-11 19:07:56 +01:00
def fillInputDir ( self ) :
inputDir = Utils . FileDialog . getExistingDirectory ( self , self . tr ( " Select the input directory with files to Merge " ) )
if inputDir . isEmpty ( ) :
return
self . inSelector . setFilename ( inputDir )
2010-06-04 00:31:48 +00:00
def getArguments ( self ) :
arguments = QStringList ( )
if self . intersectCheck . isChecked ( ) :
2010-10-29 22:07:56 +00:00
if self . extent != None :
arguments << " -ul_lr "
arguments << str ( self . extent . xMinimum ( ) )
arguments << str ( self . extent . yMaximum ( ) )
arguments << str ( self . extent . xMaximum ( ) )
arguments << str ( self . extent . yMinimum ( ) )
2010-06-04 00:31:48 +00:00
if self . noDataCheck . isChecked ( ) :
arguments << " -n "
arguments << str ( self . noDataSpin . value ( ) )
if self . separateCheck . isChecked ( ) :
arguments << " -separate "
if self . pctCheck . isChecked ( ) :
arguments << " -pct "
if self . creationGroupBox . isChecked ( ) :
for opt in self . creationOptionsTable . options ( ) :
arguments << " -co "
arguments << opt
2011-04-15 18:30:10 +00:00
outputFn = self . getOutputFileName ( )
if not outputFn . isEmpty ( ) :
2010-06-04 00:31:48 +00:00
arguments << " -of "
arguments << self . outputFormat
arguments << " -o "
2011-04-15 18:30:10 +00:00
arguments << outputFn
2012-02-11 19:07:56 +01:00
arguments << self . getInputFileNames ( )
2010-06-04 00:31:48 +00:00
return arguments
def getOutputFileName ( self ) :
2011-04-15 18:30:10 +00:00
return self . outSelector . filename ( )
def getInputFileName ( self ) :
2012-02-11 19:07:56 +01:00
if self . inputDirCheck . isChecked ( ) :
return self . inSelector . filename ( )
return self . inSelector . filename ( ) . split ( " , " , QString . SkipEmptyParts )
def getInputFileNames ( self ) :
if self . inputDirCheck . isChecked ( ) :
return Utils . getRasterFiles ( self . inSelector . filename ( ) , self . recurseCheck . isChecked ( ) )
return self . inSelector . filename ( ) . split ( " , " , QString . SkipEmptyParts )
2010-06-04 00:31:48 +00:00
def addLayerIntoCanvas ( self , fileInfo ) :
self . iface . addRasterLayer ( fileInfo . filePath ( ) )
2012-02-11 19:07:56 +01:00
def getIntersectedExtent ( self , files ) :
res = None
2010-10-29 22:07:56 +00:00
for fileName in files :
if res == None :
2011-04-15 17:58:00 +00:00
res = Utils . getRasterExtent ( self , fileName )
2010-06-04 00:31:48 +00:00
continue
2012-02-11 19:07:56 +01:00
2011-04-15 17:58:00 +00:00
rect2 = Utils . getRasterExtent ( self , fileName )
2010-10-29 22:07:56 +00:00
if rect2 == None :
continue
2012-02-11 19:07:56 +01:00
2010-10-29 22:07:56 +00:00
res = res . intersect ( rect2 )
2012-02-11 19:07:56 +01:00
if res . isEmpty ( ) :
break
2010-06-04 00:31:48 +00:00
2010-10-29 22:07:56 +00:00
return res
2011-04-15 17:58:00 +00:00