2010-06-04 00:31:48 +00:00
# -*- coding: utf-8 -*-
2012-10-06 13:10:25 +02:00
"""
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
doClipper . py
- - - - - - - - - - - - - - - - - - - - -
Date : June 2010
Copyright : ( C ) 2010 by Giuseppe Sucameli
Email : brush dot tyler at gmail dot com
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This program is free software ; you can redistribute it and / or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation ; either version 2 of the License , or *
* ( at your option ) any later version . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
"""
__author__ = ' Giuseppe Sucameli '
__date__ = ' June 2010 '
__copyright__ = ' (C) 2010, Giuseppe Sucameli '
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = ' $Format: % H$ '
fix python pep8 warnings and fix some revealed errors
pep8 --ignore=E111,E128,E201,E202,E203,E211,E221,E222,E225,E226,E227,E231,E241,E261,E265,E272,E302,E303,E501,E701 \
--exclude="ui_*.py,debian/*,python/ext-libs/*" \
.
2015-02-01 14:15:42 +01:00
from PyQt4 . QtCore import SIGNAL
from PyQt4 . QtGui import QWidget
from qgis . core import QGis
2010-06-04 00:31:48 +00:00
from ui_widgetClipper import Ui_GdalToolsWidget as Ui_Widget
from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
import GdalTools_utils as Utils
2015-10-30 23:30:16 +01:00
2010-06-04 00:31:48 +00:00
class GdalToolsDialog ( QWidget , Ui_Widget , BasePluginWidget ) :
2015-08-22 14:29:41 +02:00
def __init__ ( self , iface ) :
QWidget . __init__ ( self )
self . iface = iface
self . canvas = self . iface . mapCanvas ( )
self . setupUi ( self )
BasePluginWidget . __init__ ( self , self . iface , " gdal_translate " )
self . outSelector . setType ( self . outSelector . FILE )
self . extentSelector . setCanvas ( self . canvas )
self . outputFormat = Utils . fillRasterOutputFormat ( )
2015-10-23 01:24:08 +01:00
# set the default QDoubleSpinBoxes
self . xRes . setValue ( 12.5 )
self . yRes . setValue ( 12.5 )
2015-08-22 14:29:41 +02:00
self . setParamsStatus ( [
( self . inSelector , SIGNAL ( " filenameChanged() " ) ) ,
( self . outSelector , SIGNAL ( " filenameChanged() " ) ) ,
( self . noDataSpin , SIGNAL ( " valueChanged(int) " ) , self . noDataCheck , 1700 ) ,
( self . maskSelector , SIGNAL ( " filenameChanged() " ) , self . maskModeRadio , 1600 ) ,
2015-10-23 01:24:08 +01:00
( self . alphaBandCheck , SIGNAL ( " stateChanged(int) " ) ) ,
( self . cropToCutlineCheck , SIGNAL ( " stateChanged(int) " ) ) ,
( [ self . xRes , self . yRes ] , SIGNAL ( " valueChanged(double) " ) , self . setResolutionRadio ) ,
2015-08-22 14:29:41 +02:00
( self . extentSelector , [ SIGNAL ( " selectionStarted() " ) , SIGNAL ( " newExtentDefined() " ) ] , self . extentModeRadio ) ,
( self . modeStackedWidget , SIGNAL ( " currentIndexChanged(int) " ) )
] )
self . connect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputFileEdit )
self . connect ( self . outSelector , SIGNAL ( " selectClicked() " ) , self . fillOutputFileEdit )
self . connect ( self . maskSelector , SIGNAL ( " selectClicked() " ) , self . fillMaskFileEdit )
self . connect ( self . extentSelector , SIGNAL ( " newExtentDefined() " ) , self . extentChanged )
self . connect ( self . extentSelector , SIGNAL ( " selectionStarted() " ) , self . checkRun )
self . connect ( self . extentModeRadio , SIGNAL ( " toggled(bool) " ) , self . switchClippingMode )
2015-10-23 01:24:08 +01:00
self . connect ( self . keepResolutionRadio , SIGNAL ( " toggled(bool) " ) , self . switchResolutionMode )
2015-08-22 14:29:41 +02:00
def show_ ( self ) :
self . switchClippingMode ( )
2015-10-23 01:24:08 +01:00
self . switchResolutionMode ( )
2015-08-22 14:29:41 +02:00
BasePluginWidget . show_ ( self )
def onClosing ( self ) :
2011-04-15 17:58:00 +00:00
self . extentSelector . stop ( )
2015-08-22 14:29:41 +02:00
BasePluginWidget . onClosing ( self )
def switchClippingMode ( self ) :
if self . extentModeRadio . isChecked ( ) :
index = 0
self . extentSelector . start ( )
else :
self . extentSelector . stop ( )
index = 1
self . modeStackedWidget . setCurrentIndex ( index )
self . checkRun ( )
2015-10-23 01:24:08 +01:00
def switchResolutionMode ( self ) :
if self . keepResolutionRadio . isChecked ( ) :
2015-10-17 01:18:24 +02:00
self . resolutionWidget . hide ( )
2015-10-23 01:24:08 +01:00
else :
2015-10-17 01:18:24 +02:00
self . resolutionWidget . show ( )
2015-10-30 23:30:16 +01:00
2015-08-22 14:29:41 +02:00
def checkRun ( self ) :
if self . extentModeRadio . isChecked ( ) :
enabler = self . extentSelector . isCoordsValid ( )
else :
enabler = not self . maskSelector . filename ( ) == ' '
self . base . enableRun ( enabler )
def extentChanged ( self ) :
self . activateWindow ( )
self . raise_ ( )
self . checkRun ( )
def onLayersChanged ( self ) :
self . inSelector . setLayers ( Utils . LayerRegistry . instance ( ) . getRasterLayers ( ) )
self . maskSelector . setLayers ( filter ( lambda x : x . geometryType ( ) == QGis . Polygon , Utils . LayerRegistry . instance ( ) . getVectorLayers ( ) ) )
self . checkRun ( )
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 == ' ' :
return
Utils . FileFilter . setLastUsedRasterFilter ( lastUsedFilter )
self . inSelector . setFilename ( inputFile )
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 . saveRastersFilter ( ) , lastUsedFilter )
if outputFile == ' ' :
return
Utils . FileFilter . setLastUsedRasterFilter ( lastUsedFilter )
self . outputFormat = Utils . fillRasterOutputFormat ( lastUsedFilter , outputFile )
self . outSelector . setFilename ( outputFile )
def fillMaskFileEdit ( self ) :
lastUsedFilter = Utils . FileFilter . lastUsedVectorFilter ( )
maskFile = Utils . FileDialog . getOpenFileName ( self , self . tr ( " Select the mask file " ) , Utils . FileFilter . allVectorsFilter ( ) , lastUsedFilter )
if maskFile == ' ' :
return
Utils . FileFilter . setLastUsedVectorFilter ( lastUsedFilter )
self . maskSelector . setFilename ( maskFile )
self . checkRun ( )
def getArguments ( self ) :
if not self . extentModeRadio . isChecked ( ) :
return self . getArgsModeMask ( )
return self . getArgsModeExtent ( )
def getArgsModeExtent ( self ) :
self . base . setPluginCommand ( " gdal_translate " )
2015-10-23 01:24:08 +01:00
inputFn = self . getInputFileName ( )
2015-08-22 14:29:41 +02:00
arguments = [ ]
if self . noDataCheck . isChecked ( ) :
arguments . append ( " -a_nodata " )
arguments . append ( unicode ( self . noDataSpin . value ( ) ) )
if self . extentModeRadio . isChecked ( ) and self . extentSelector . isCoordsValid ( ) :
rect = self . extentSelector . getExtent ( )
2015-10-23 01:24:08 +01:00
if rect is not None and not inputFn == ' ' :
2015-08-22 14:29:41 +02:00
arguments . append ( " -projwin " )
arguments . append ( unicode ( rect . xMinimum ( ) ) )
arguments . append ( unicode ( rect . yMaximum ( ) ) )
arguments . append ( unicode ( rect . xMaximum ( ) ) )
arguments . append ( unicode ( rect . yMinimum ( ) ) )
2015-10-17 01:18:24 +02:00
outputFn = self . getOutputFileName ( )
if not outputFn == ' ' :
2015-08-22 14:29:41 +02:00
arguments . append ( " -of " )
arguments . append ( self . outputFormat )
2015-10-23 01:24:08 +01:00
arguments . append ( inputFn )
2015-10-17 01:18:24 +02:00
arguments . append ( outputFn )
2015-08-22 14:29:41 +02:00
return arguments
def getArgsModeMask ( self ) :
self . base . setPluginCommand ( " gdalwarp " )
2015-10-23 01:24:08 +01:00
inputFn = self . getInputFileName ( )
2015-08-22 14:29:41 +02:00
arguments = [ ]
if self . noDataCheck . isChecked ( ) :
arguments . append ( " -dstnodata " )
arguments . append ( unicode ( self . noDataSpin . value ( ) ) )
if self . maskModeRadio . isChecked ( ) :
mask = self . maskSelector . filename ( )
2015-10-23 01:24:08 +01:00
if not mask == ' ' and not inputFn == ' ' :
2015-08-22 14:29:41 +02:00
arguments . append ( " -q " )
arguments . append ( " -cutline " )
arguments . append ( mask )
if Utils . GdalConfig . versionNum ( ) > = 1800 :
2015-10-23 01:24:08 +01:00
if self . cropToCutlineCheck . isChecked ( ) :
arguments . append ( " -crop_to_cutline " )
2015-08-22 14:29:41 +02:00
if self . alphaBandCheck . isChecked ( ) :
arguments . append ( " -dstalpha " )
2015-10-23 01:24:08 +01:00
if self . keepResolutionRadio . isChecked ( ) :
2015-10-17 01:18:24 +02:00
resolution = Utils . getRasterResolution ( inputFn )
2015-10-23 01:24:08 +01:00
if resolution is not None :
2015-10-17 01:18:24 +02:00
arguments . append ( " -tr " )
2015-10-23 01:24:08 +01:00
arguments . append ( resolution [ 0 ] )
arguments . append ( resolution [ 1 ] )
2015-10-17 01:18:24 +02:00
else :
2015-10-23 01:24:08 +01:00
arguments . append ( " -tr " )
arguments . append ( unicode ( self . xRes . value ( ) ) )
arguments . append ( unicode ( self . yRes . value ( ) ) )
2015-08-22 14:29:41 +02:00
outputFn = self . getOutputFileName ( )
if not outputFn == ' ' :
arguments . append ( " -of " )
arguments . append ( self . outputFormat )
2015-10-23 01:24:08 +01:00
arguments . append ( inputFn )
2015-08-22 14:29:41 +02:00
arguments . append ( outputFn )
return arguments
def getOutputFileName ( self ) :
return self . outSelector . filename ( )
def getInputFileName ( self ) :
return self . inSelector . filename ( )
def addLayerIntoCanvas ( self , fileInfo ) :
self . iface . addRasterLayer ( fileInfo . filePath ( ) )