2010-06-04 00:31:48 +00:00
# -*- coding: utf-8 -*-
2012-10-06 13:10:25 +02:00
"""
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
doGrid . 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$ '
2010-06-04 00:31:48 +00:00
from PyQt4 . QtCore import *
from PyQt4 . QtGui import *
from qgis . core import *
from qgis . gui import *
from ui_widgetGrid 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
2010-12-27 16:55:17 +00:00
self . canvas = self . iface . mapCanvas ( )
2010-06-04 00:31:48 +00:00
self . algorithm = ( ' invdist ' , ' average ' , ' nearest ' , ' datametrics ' )
self . datametrics = ( ' minimum ' , ' maximum ' , ' range ' )
self . setupUi ( self )
BasePluginWidget . __init__ ( self , self . iface , " gdal_grid " )
2011-04-15 18:30:10 +00:00
self . outSelector . setType ( self . outSelector . FILE )
2010-12-27 16:55:17 +00:00
self . extentSelector . setCanvas ( self . canvas )
#self.extentSelector.stop()
2011-04-15 18:30:10 +00:00
# set the default QSpinBoxes and QProgressBar value
self . widthSpin . setValue ( 3000 )
self . heightSpin . setValue ( 3000 )
2010-06-04 00:31:48 +00:00
self . invdistPowerSpin . setValue ( 2.0 )
self . outputFormat = Utils . fillRasterOutputFormat ( )
self . lastEncoding = Utils . getLastUsedEncoding ( )
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 . zfieldCombo , SIGNAL ( " currentIndexChanged(int) " ) , self . zfieldCheck ) ,
( self . algorithmCombo , SIGNAL ( " currentIndexChanged(int) " ) , self . algorithmCheck ) ,
2011-03-15 11:40:45 +00:00
( self . stackedWidget , None , self . algorithmCheck ) ,
2010-06-04 00:31:48 +00:00
( [ self . invdistPowerSpin , self . invdistSmothingSpin , self . invdistRadius1Spin , self . invdistRadius2Spin , self . invdistAngleSpin , self . invdistNoDataSpin ] , SIGNAL ( " valueChanged(double) " ) ) ,
( [ self . invdistMaxPointsSpin , self . invdistMinPointsSpin ] , SIGNAL ( " valueChanged(int) " ) ) ,
( [ self . averageRadius1Spin , self . averageRadius2Spin , self . averageAngleSpin , self . averageNoDataSpin ] , SIGNAL ( " valueChanged(double) " ) ) ,
( self . averageMinPointsSpin , SIGNAL ( " valueChanged(int) " ) ) ,
( [ self . nearestRadius1Spin , self . nearestRadius2Spin , self . nearestAngleSpin , self . nearestNoDataSpin ] , SIGNAL ( " valueChanged(double) " ) ) ,
( self . datametricsCombo , SIGNAL ( " currentIndexChanged(int) " ) ) ,
( [ self . datametricsRadius1Spin , self . datametricsRadius2Spin , self . datametricsAngleSpin , self . datametricsNoDataSpin ] , SIGNAL ( " valueChanged(double) " ) ) ,
2012-12-10 00:12:07 +01:00
( self . datametricsMinPointsSpin , SIGNAL ( " valueChanged(int) " ) ) ,
( self . extentSelector , [ SIGNAL ( " selectionStarted() " ) , SIGNAL ( " newExtentDefined() " ) ] , self . extentGroup ) ,
2011-03-14 08:51:11 +00:00
( [ self . widthSpin , self . heightSpin ] , SIGNAL ( " valueChanged(int) " ) , self . resizeGroupBox )
2010-06-04 00:31:48 +00:00
]
)
2011-04-15 18:30:10 +00:00
self . connect ( self . inSelector , SIGNAL ( " selectClicked() " ) , self . fillInputFileEdit )
self . connect ( self . outSelector , SIGNAL ( " selectClicked() " ) , self . fillOutputFileEdit )
self . connect ( self . inSelector , SIGNAL ( " layerChanged() " ) , self . fillFieldsCombo )
2011-03-15 11:40:45 +00:00
self . connect ( self . extentGroup , SIGNAL ( " toggled(bool) " ) , self . onExtentCheckedChanged )
2010-06-04 00:31:48 +00:00
2010-12-27 16:55:17 +00:00
def onClosing ( self ) :
self . extentSelector . stop ( )
BasePluginWidget . onClosing ( self )
2011-03-15 11:40:45 +00:00
def onExtentCheckedChanged ( self , enabled ) :
2010-12-27 16:55:17 +00:00
self . extentSelector . start ( ) if enabled else self . extentSelector . stop ( )
2011-03-14 16:01:10 +00:00
def onLayersChanged ( self ) :
2011-04-15 18:30:10 +00:00
self . inSelector . setLayers ( Utils . LayerRegistry . instance ( ) . getVectorLayers ( ) )
2010-06-04 00:31:48 +00:00
def fillFieldsCombo ( self ) :
2011-04-15 18:30:10 +00:00
if self . inSelector . layer ( ) == None :
2010-06-04 00:31:48 +00:00
return
2011-04-15 18:30:10 +00:00
self . lastEncoding = self . inSelector . layer ( ) . dataProvider ( ) . encoding ( )
2010-06-04 00:31:48 +00:00
self . loadFields ( self . getInputFileName ( ) )
2012-12-10 00:12:07 +01:00
2010-06-04 00:31:48 +00:00
def fillInputFileEdit ( self ) :
lastUsedFilter = Utils . FileFilter . lastUsedVectorFilter ( )
inputFile , encoding = Utils . FileDialog . getOpenFileName ( self , self . tr ( " Select the input file for Grid " ) , Utils . FileFilter . allVectorsFilter ( ) , lastUsedFilter , True )
2013-06-17 15:27:54 +02:00
if not inputFile :
2010-06-04 00:31:48 +00:00
return
Utils . FileFilter . setLastUsedVectorFilter ( lastUsedFilter )
2011-04-15 18:30:10 +00:00
self . inSelector . setFilename ( inputFile )
2010-06-04 00:31:48 +00:00
self . lastEncoding = encoding
self . loadFields ( inputFile )
def fillOutputFileEdit ( self ) :
lastUsedFilter = Utils . FileFilter . lastUsedRasterFilter ( )
2014-10-29 23:54:44 +01:00
outputFile = Utils . FileDialog . getSaveFileName ( self , self . tr ( " Select the raster file to save the results to " ) , Utils . FileFilter . saveRastersFilter ( ) , lastUsedFilter )
2013-06-17 15:27:54 +02:00
if not outputFile :
2010-06-04 00:31:48 +00:00
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
def getArguments ( self ) :
2013-06-17 15:27:54 +02:00
arguments = [ ]
2010-06-04 00:31:48 +00:00
if self . zfieldCheck . isChecked ( ) and self . zfieldCombo . currentIndex ( ) > = 0 :
2013-06-17 15:27:54 +02:00
arguments . append ( " -zfield " )
arguments . append ( self . zfieldCombo . currentText ( ) )
2011-04-15 18:30:10 +00:00
inputFn = self . getInputFileName ( )
2013-06-17 15:27:54 +02:00
if inputFn :
arguments . append ( " -l " )
arguments . append ( QFileInfo ( inputFn ) . baseName ( ) )
2010-12-27 16:55:17 +00:00
if self . extentGroup . isChecked ( ) :
rect = self . extentSelector . getExtent ( )
if rect != None :
2013-06-17 15:27:54 +02:00
arguments . append ( " -txe " )
arguments . append ( str ( rect . xMinimum ( ) ) )
arguments . append ( str ( rect . xMaximum ( ) ) )
arguments . append ( " -tye " )
arguments . append ( str ( rect . yMaximum ( ) ) )
arguments . append ( str ( rect . yMinimum ( ) ) )
2010-06-04 00:31:48 +00:00
if self . algorithmCheck . isChecked ( ) and self . algorithmCombo . currentIndex ( ) > = 0 :
2013-06-17 15:27:54 +02:00
arguments . append ( " -a " )
arguments . append ( self . algorithmArguments ( self . algorithmCombo . currentIndex ( ) ) )
2011-03-14 08:51:11 +00:00
if self . resizeGroupBox . isChecked ( ) :
2013-06-17 15:27:54 +02:00
arguments . append ( " -outsize " )
arguments . append ( str ( self . widthSpin . value ( ) ) )
arguments . append ( str ( self . heightSpin . value ( ) ) )
2011-04-15 18:30:10 +00:00
outputFn = self . getOutputFileName ( )
2013-06-17 15:27:54 +02:00
if outputFn :
arguments . append ( " -of " )
arguments . append ( self . outputFormat )
arguments . append ( inputFn )
arguments . append ( outputFn )
2010-06-04 00:31:48 +00:00
return arguments
def getInputFileName ( self ) :
2011-04-15 18:30:10 +00:00
return self . inSelector . filename ( )
2010-06-04 00:31:48 +00:00
def getOutputFileName ( self ) :
2011-04-15 18:30:10 +00:00
return self . outSelector . filename ( )
2010-06-04 00:31:48 +00:00
def addLayerIntoCanvas ( self , fileInfo ) :
self . iface . addRasterLayer ( fileInfo . filePath ( ) )
def algorithmArguments ( self , index ) :
algorithm = self . algorithm [ index ]
2013-06-17 15:27:54 +02:00
arguments = [ ]
2010-06-04 00:31:48 +00:00
if algorithm == " invdist " :
arguments . append ( algorithm )
arguments . append ( " power= " + str ( self . invdistPowerSpin . value ( ) ) )
arguments . append ( " smothing= " + str ( self . invdistSmothingSpin . value ( ) ) )
arguments . append ( " radius1= " + str ( self . invdistRadius1Spin . value ( ) ) )
arguments . append ( " radius2= " + str ( self . invdistRadius2Spin . value ( ) ) )
arguments . append ( " angle= " + str ( self . invdistAngleSpin . value ( ) ) )
arguments . append ( " max_points= " + str ( self . invdistMaxPointsSpin . value ( ) ) )
arguments . append ( " min_points= " + str ( self . invdistMinPointsSpin . value ( ) ) )
arguments . append ( " nodata= " + str ( self . invdistNoDataSpin . value ( ) ) )
elif algorithm == " average " :
arguments . append ( algorithm )
arguments . append ( " radius1= " + str ( self . averageRadius1Spin . value ( ) ) )
arguments . append ( " radius2= " + str ( self . averageRadius2Spin . value ( ) ) )
arguments . append ( " angle= " + str ( self . averageAngleSpin . value ( ) ) )
arguments . append ( " min_points= " + str ( self . averageMinPointsSpin . value ( ) ) )
arguments . append ( " nodata= " + str ( self . averageNoDataSpin . value ( ) ) )
elif algorithm == " nearest " :
arguments . append ( algorithm )
arguments . append ( " radius1= " + str ( self . nearestRadius1Spin . value ( ) ) )
arguments . append ( " radius2= " + str ( self . nearestRadius2Spin . value ( ) ) )
arguments . append ( " angle= " + str ( self . nearestAngleSpin . value ( ) ) )
arguments . append ( " nodata= " + str ( self . nearestNoDataSpin . value ( ) ) )
else :
arguments . append ( self . datametrics [ self . datametricsCombo . currentIndex ( ) ] )
arguments . append ( " radius1= " + str ( self . datametricsRadius1Spin . value ( ) ) )
arguments . append ( " radius2= " + str ( self . datametricsRadius2Spin . value ( ) ) )
arguments . append ( " angle= " + str ( self . datametricsAngleSpin . value ( ) ) )
arguments . append ( " min_points= " + str ( self . datametricsMinPointsSpin . value ( ) ) )
arguments . append ( " nodata= " + str ( self . datametricsNoDataSpin . value ( ) ) )
2013-06-17 16:42:03 +02:00
return ' : ' . join ( arguments )
2010-06-04 00:31:48 +00:00
2013-06-04 09:28:43 +10:00
def loadFields ( self , vectorFile = ' ' ) :
2010-06-04 00:31:48 +00:00
self . zfieldCombo . clear ( )
2013-06-17 15:27:54 +02:00
if not vectorFile :
2010-06-04 00:31:48 +00:00
return
try :
( fields , names ) = Utils . getVectorFields ( vectorFile )
2011-01-15 12:49:35 +00:00
except Utils . UnsupportedOGRFormat , e :
QErrorMessage ( self ) . showMessage ( e . args [ 0 ] )
2011-04-15 18:30:10 +00:00
self . inSelector . setLayer ( None )
2010-06-04 00:31:48 +00:00
return
ncodec = QTextCodec . codecForName ( self . lastEncoding )
for name in names :
self . zfieldCombo . addItem ( ncodec . toUnicode ( name ) )
2011-04-15 18:30:10 +00:00