@@ -16,76 +16,53 @@ def __init__(self, iface):
16
16
self .canvas = self .iface .mapCanvas ()
17
17
18
18
self .setupUi (self )
19
- BasePluginWidget .__init__ (self , self .iface , "gdal_merge.py " , None , self .iface .mainWindow ())
19
+ BasePluginWidget .__init__ (self , self .iface , "gdal_translate " , None , self .iface .mainWindow ())
20
20
21
21
self .extentSelector .setCanvas (self .canvas )
22
22
self .outputFormat = Utils .fillRasterOutputFormat ()
23
23
24
- self .inputFiles = QStringList ()
25
- self .warningDialog = QErrorMessage (self )
26
-
27
24
self .setParamsStatus (
28
25
[
26
+ (self .inputLayerCombo , [SIGNAL ("currentIndexChanged(int)" ), SIGNAL ("editTextChanged(const QString &)" )] ),
29
27
(self .outputFileEdit , SIGNAL ("textChanged(const QString &)" )),
30
28
(self .noDataSpin , SIGNAL ("valueChanged(int)" ), self .noDataCheck ),
31
- (self .pctCheck , SIGNAL ("stateChanged(int)" )),
32
29
( self .extentSelector , [SIGNAL ("selectionStarted()" ), SIGNAL ("newExtentDefined()" )] )
33
30
]
34
31
)
35
32
33
+ self .connect (self .selectInputFileButton , SIGNAL ("clicked()" ), self .fillInputFileEdit )
36
34
self .connect (self .selectOutputFileButton , SIGNAL ("clicked()" ), self .fillOutputFileEdit )
37
35
self .connect (self .extentSelector , SIGNAL ("newExtentDefined()" ), self .checkRun )
38
36
self .connect (self .extentSelector , SIGNAL ("selectionStarted()" ), self .checkRun )
39
37
40
38
def show_ (self ):
41
- self .connect (self .canvas , SIGNAL ("layersChanged()" ), self .fillInputFiles )
42
39
self .extentSelector .start ()
43
40
BasePluginWidget .show_ (self )
44
41
45
- self .fillInputFiles ()
46
- self .checkRun ()
47
-
48
42
def onClosing (self ):
49
- self .disconnect (self .canvas , SIGNAL ("layersChanged()" ), self .fillInputFiles )
50
43
self .extentSelector .stop ()
51
44
BasePluginWidget .onClosing (self )
52
45
53
- def fillInputFiles (self ):
54
- self .inputFiles = QStringList ()
55
-
56
- # Reversed list to have the topmost layer as the last one in the list
57
- # because "In areas of overlap, the last image will be copied over
58
- # earlier ones" (see http://www.gdal.org/gdal_merge.html).
59
- for i in range (self .canvas .layerCount ()- 1 , - 1 , - 1 ):
60
- layer = self .canvas .layer (i )
61
- # only raster layers, but not WMS ones
62
- if layer .type () != layer .RasterLayer :
63
- continue
64
- if layer .usesProvider () and layer .providerKey () != 'gdal' :
65
- continue
66
-
67
- # do not use the output file as input
68
- if layer .source () == self .outputFileEdit .text ():
69
- continue
70
- self .inputFiles << layer .source ()
71
-
72
- if self .inputFiles .isEmpty ():
73
- self .extentSelector .stop ()
46
+ def checkRun (self ):
47
+ self .base .enableRun ( self .extentSelector .getExtent () != None )
74
48
75
- if self .isVisible () and self .warningDialog .isHidden ():
76
- msg = QString ( self .tr ("No active raster layers. You must add almost one raster layer to continue." ) )
77
- self .warningDialog .showMessage (msg )
49
+ def onLayersChanged (self ):
50
+ self .fillInputLayerCombo ()
78
51
79
- # refresh command when there are no active layers
80
- self .someValueChanged ()
81
- else :
82
- self .warningDialog .hide ()
83
- self .extentSelector .start ()
52
+ def fillInputLayerCombo (self ):
53
+ self .inputLayerCombo .clear ()
54
+ ( self .layers , names ) = Utils .LayerRegistry .instance ().getRasterLayers ()
55
+ self .inputLayerCombo .addItems ( names )
84
56
85
- self .checkRun ()
57
+ def fillInputFileEdit ( self ):
58
+ lastUsedFilter = Utils .FileFilter .lastUsedRasterFilter ()
59
+ inputFile = Utils .FileDialog .getOpenFileName ( self , self .tr ( "Select the input file for Translate" ), Utils .FileFilter .allRastersFilter (), lastUsedFilter )
60
+ if inputFile .isEmpty ():
61
+ return
62
+ Utils .FileFilter .setLastUsedRasterFilter ( lastUsedFilter )
86
63
87
- def checkRun ( self ):
88
- self .base . enableRun ( not self . inputFiles . isEmpty () and self . extentSelector . getExtent () != None )
64
+ self . inputLayerCombo . setCurrentIndex ( - 1 )
65
+ self .inputLayerCombo . setEditText ( inputFile )
89
66
90
67
def fillOutputFileEdit (self ):
91
68
lastUsedFilter = Utils .FileFilter .lastUsedRasterFilter ()
@@ -95,48 +72,36 @@ def fillOutputFileEdit(self):
95
72
Utils .FileFilter .setLastUsedRasterFilter (lastUsedFilter )
96
73
97
74
self .outputFormat = Utils .fillRasterOutputFormat (lastUsedFilter , outputFile )
98
-
99
- # do not use the output file as input
100
- if self .inputFiles .contains (outputFile ):
101
- self .inputFiles .removeAt ( self .inputFiles .indexOf (outputFile ) )
102
75
self .outputFileEdit .setText (outputFile )
103
76
104
77
def getArguments (self ):
105
78
arguments = QStringList ()
106
79
if self .noDataCheck .isChecked ():
107
- arguments << "-n "
80
+ arguments << "-a_nodata "
108
81
arguments << str (self .noDataSpin .value ())
109
- if self .pctCheck .isChecked ():
110
- arguments << "-pct"
111
82
if self .extentSelector .isCoordsValid ():
112
83
rect = self .extentSelector .getExtent ()
113
84
if rect != None :
114
- arguments << "-ul_lr "
85
+ arguments << "-projwin "
115
86
arguments << str (rect .xMinimum ())
116
87
arguments << str (rect .yMaximum ())
117
88
arguments << str (rect .xMaximum ())
118
89
arguments << str (rect .yMinimum ())
119
- if not self .outputFileEdit . text ().isEmpty ():
90
+ if not self .getOutputFileName ().isEmpty ():
120
91
arguments << "-of"
121
92
arguments << self .outputFormat
122
- if not self .outputFileEdit .text ().isEmpty ():
123
- arguments << "-o"
124
- arguments << self .outputFileEdit .text ()
125
-
126
- if self .pctCheck .isChecked () and len (self .inputFiles ) > 1 :
127
- # The topmost layer in the TOC is the last one in the list (see above),
128
- # but I want to grab the pseudocolor table from the first image (the
129
- # topmost layer in the TOC).
130
- # Workaround: duplicate the last layer inserting it also as the first
131
- # one to grab the pseudocolor table from it.
132
- arguments << self .inputFiles [ len (self .inputFiles )- 1 ]
133
-
134
- arguments << self .inputFiles
93
+ arguments << self .getInputFileName ()
94
+ arguments << self .getOutputFileName ()
135
95
return arguments
136
96
137
97
def getOutputFileName (self ):
138
98
return self .outputFileEdit .text ()
139
99
100
+ def getInputFileName (self ):
101
+ if self .inputLayerCombo .currentIndex () >= 0 :
102
+ return self .layers [self .inputLayerCombo .currentIndex ()].source ()
103
+ return self .inputLayerCombo .currentText ()
104
+
140
105
def addLayerIntoCanvas (self , fileInfo ):
141
106
self .iface .addRasterLayer (fileInfo .filePath ())
142
107
0 commit comments