svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / geolocation / ui / GeoLocationPanel.java @ 14135
History | View | Annotate | Download (11.8 KB)
1 | 12825 | nacho | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
|
||
4 | *
|
||
5 | * This program is free software; you can redistribute it and/or
|
||
6 | * modify it under the terms of the GNU General Public License
|
||
7 | * as published by the Free Software Foundation; either version 2
|
||
8 | * of the License, or (at your option) any later version.
|
||
9 | *
|
||
10 | * This program is distributed in the hope that it will be useful,
|
||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
13 | * GNU General Public License for more details.
|
||
14 | *
|
||
15 | * You should have received a copy of the GNU General Public License
|
||
16 | * along with this program; if not, write to the Free Software
|
||
17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
18 | */
|
||
19 | package org.gvsig.rastertools.geolocation.ui; |
||
20 | |||
21 | 13310 | bsanchez | import java.awt.Dimension; |
22 | 12825 | nacho | import java.awt.FlowLayout; |
23 | 12853 | nacho | import java.awt.GridBagConstraints; |
24 | import java.awt.GridBagLayout; |
||
25 | 12825 | nacho | import java.awt.GridLayout; |
26 | 12853 | nacho | import java.awt.geom.AffineTransform; |
27 | 12825 | nacho | |
28 | import javax.swing.ImageIcon; |
||
29 | import javax.swing.JButton; |
||
30 | import javax.swing.JPanel; |
||
31 | |||
32 | 12853 | nacho | import org.gvsig.fmap.raster.layers.FLyrRasterSE; |
33 | 12825 | nacho | import org.gvsig.gui.beans.datainput.DataInputContainer; |
34 | 12853 | nacho | import org.gvsig.raster.util.Historical; |
35 | import org.gvsig.raster.util.MathUtils; |
||
36 | import org.gvsig.rastertools.geolocation.listener.GeoLocationPanelListener; |
||
37 | 12825 | nacho | |
38 | import com.iver.andami.PluginServices; |
||
39 | 12853 | nacho | import com.iver.cit.gvsig.fmap.MapControl; |
40 | 12825 | nacho | |
41 | /**
|
||
42 | 12853 | nacho | * Panel de geolocalizaci?n. Este muestra los par?metros de la matriz de transformaci?n
|
43 | * que est? aplicandose en esos momentos al raster. Los par?metros son variados en
|
||
44 | * tiempo real a medida que modificamos la georreferenciaci?n con las herramientas.
|
||
45 | 12825 | nacho | *
|
46 | * @version 30/07/2007
|
||
47 | * @author Nacho Brodin (nachobrodin@gmail.com)
|
||
48 | *
|
||
49 | */
|
||
50 | public class GeoLocationPanel extends JPanel { |
||
51 | 13127 | nacho | private static final long serialVersionUID = -7797379892312214949L; |
52 | 12853 | nacho | private DataInputContainer ulx = null; |
53 | private DataInputContainer uly = null; |
||
54 | private DataInputContainer psx = null; |
||
55 | private DataInputContainer psy = null; |
||
56 | private DataInputContainer rotx = null; |
||
57 | private DataInputContainer roty = null; |
||
58 | 13127 | nacho | private JButton first = null; |
59 | private JButton save = null; |
||
60 | private JButton back = null; |
||
61 | private JButton next = null; |
||
62 | private JButton apply = null; |
||
63 | 14135 | nbrodin | private JButton reset = null; |
64 | 12825 | nacho | |
65 | 12853 | nacho | private JPanel coordsPanel = null; |
66 | private JPanel paramsPanel = null; |
||
67 | private JPanel buttonsPanel = null; |
||
68 | private GeoLocationPanelListener listener = null; |
||
69 | private FLyrRasterSE lyr = null; |
||
70 | /**
|
||
71 | * N?mero de decimales a mostrar
|
||
72 | */
|
||
73 | private int tailValue = 2; |
||
74 | private MapControl mapCtrl = null; |
||
75 | 13127 | nacho | private boolean geolocModify = false; |
76 | 12825 | nacho | |
77 | /**
|
||
78 | * Constructor
|
||
79 | */
|
||
80 | 13127 | nacho | public GeoLocationPanel() {
|
81 | 12825 | nacho | ImageIcon backIcon = null; |
82 | ImageIcon nextIcon = null; |
||
83 | ImageIcon saveIcon = null; |
||
84 | ImageIcon firstIcon = null; |
||
85 | 14135 | nbrodin | ImageIcon resetIcon = null; |
86 | 12825 | nacho | try {
|
87 | backIcon = new ImageIcon(getClass().getClassLoader().getResource("images/back.png")); |
||
88 | nextIcon = new ImageIcon(getClass().getClassLoader().getResource("images/next.png")); |
||
89 | saveIcon = new ImageIcon(getClass().getClassLoader().getResource("images/save.png")); |
||
90 | firstIcon = new ImageIcon(getClass().getClassLoader().getResource("images/undo.png")); |
||
91 | 14135 | nbrodin | resetIcon = new ImageIcon(getClass().getClassLoader().getResource("images/reset.png")); |
92 | 12825 | nacho | } catch(NullPointerException e) { |
93 | |||
94 | } |
||
95 | |||
96 | 12853 | nacho | listener = new GeoLocationPanelListener(this); |
97 | |||
98 | GridBagLayout gl = new GridBagLayout(); |
||
99 | 12825 | nacho | this.setLayout(gl);
|
100 | setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "geolocation"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
101 | ulx = new DataInputContainer();
|
||
102 | ulx.setLabelText(PluginServices.getText(this,"ux")); |
||
103 | uly = new DataInputContainer();
|
||
104 | uly.setLabelText(PluginServices.getText(this,"uy")); |
||
105 | psx = new DataInputContainer();
|
||
106 | psx.setLabelText(PluginServices.getText(this,"px")); |
||
107 | psy = new DataInputContainer();
|
||
108 | psy.setLabelText(PluginServices.getText(this,"py")); |
||
109 | rotx = new DataInputContainer();
|
||
110 | rotx.setLabelText(PluginServices.getText(this,"rx")); |
||
111 | roty = new DataInputContainer();
|
||
112 | roty.setLabelText(PluginServices.getText(this,"ry")); |
||
113 | 14135 | nbrodin | |
114 | 12825 | nacho | first = new JButton(firstIcon); |
115 | save = new JButton(saveIcon); |
||
116 | 14135 | nbrodin | back = new JButton(backIcon); |
117 | next = new JButton(nextIcon); |
||
118 | apply = new JButton(PluginServices.getText(this,"apply")); |
||
119 | reset = new JButton(resetIcon); |
||
120 | |||
121 | 12853 | nacho | save.setToolTipText(PluginServices.getText(this,"salvar_transf")); |
122 | back.setToolTipText(PluginServices.getText(this,"back_transf")); |
||
123 | next.setToolTipText(PluginServices.getText(this,"next_transf")); |
||
124 | apply.setToolTipText(PluginServices.getText(this,"aplicar_transf")); |
||
125 | first.setToolTipText(PluginServices.getText(this,"first_transf")); |
||
126 | 14135 | nbrodin | reset.setToolTipText(PluginServices.getText(this,"reset_transf")); |
127 | 13310 | bsanchez | |
128 | save.setPreferredSize(new Dimension(28, 24)); |
||
129 | first.setPreferredSize(new Dimension(28, 24)); |
||
130 | back.setPreferredSize(new Dimension(28, 24)); |
||
131 | next.setPreferredSize(new Dimension(28, 24)); |
||
132 | apply.setPreferredSize(new Dimension(64,24)); |
||
133 | 14135 | nbrodin | reset.setPreferredSize(new Dimension(28,24)); |
134 | 13310 | bsanchez | |
135 | 14135 | nbrodin | first.addActionListener(listener); |
136 | 12853 | nacho | save.addActionListener(listener); |
137 | back.addActionListener(listener); |
||
138 | next.addActionListener(listener); |
||
139 | apply.addActionListener(listener); |
||
140 | 14135 | nbrodin | reset.addActionListener(listener); |
141 | |||
142 | 12853 | nacho | save.setEnabled(false);
|
143 | back.setEnabled(false);
|
||
144 | next.setEnabled(false);
|
||
145 | first.setEnabled(false);
|
||
146 | 14135 | nbrodin | reset.setEnabled(true);
|
147 | 12825 | nacho | |
148 | coordsPanel = new JPanel(); |
||
149 | 12853 | nacho | GridLayout l = new GridLayout(2, 1); |
150 | l.setVgap(2);
|
||
151 | coordsPanel.setLayout(l); |
||
152 | |||
153 | 12825 | nacho | paramsPanel = new JPanel(); |
154 | 12853 | nacho | GridLayout l1 = new GridLayout(2, 2); |
155 | l1.setVgap(2);
|
||
156 | paramsPanel.setLayout(l1); |
||
157 | |||
158 | 12825 | nacho | buttonsPanel = new JPanel(); |
159 | FlowLayout ly = new FlowLayout(); |
||
160 | ly.setVgap(0);
|
||
161 | ly.setAlignment(FlowLayout.RIGHT);
|
||
162 | buttonsPanel.setLayout(ly); |
||
163 | |||
164 | init(); |
||
165 | } |
||
166 | |||
167 | private void init() { |
||
168 | coordsPanel.add(ulx); |
||
169 | coordsPanel.add(uly); |
||
170 | paramsPanel.add(psx); |
||
171 | paramsPanel.add(psy); |
||
172 | paramsPanel.add(rotx); |
||
173 | paramsPanel.add(roty); |
||
174 | 14135 | nbrodin | buttonsPanel.add(reset); |
175 | 12825 | nacho | buttonsPanel.add(back); |
176 | buttonsPanel.add(next); |
||
177 | buttonsPanel.add(first); |
||
178 | buttonsPanel.add(save); |
||
179 | 12853 | nacho | buttonsPanel.add(apply); |
180 | 14135 | nbrodin | |
181 | 12825 | nacho | |
182 | 12853 | nacho | GridBagConstraints gbc = new GridBagConstraints(); |
183 | gbc.gridx = 0;
|
||
184 | gbc.gridy = 0;
|
||
185 | gbc.fill = java.awt.GridBagConstraints.HORIZONTAL; |
||
186 | gbc.weightx = 1.0;
|
||
187 | gbc.insets = new java.awt.Insets(1, 1, 1, 1); |
||
188 | GridBagConstraints gbc1 = new GridBagConstraints(); |
||
189 | gbc1.gridx = 0;
|
||
190 | gbc1.gridy = 1;
|
||
191 | gbc1.fill = java.awt.GridBagConstraints.HORIZONTAL; |
||
192 | gbc1.weightx = 1.0;
|
||
193 | gbc1.insets = new java.awt.Insets(1, 1, 1, 1); |
||
194 | GridBagConstraints gbc2 = new GridBagConstraints(); |
||
195 | gbc2.gridx = 0;
|
||
196 | gbc2.gridy = 2;
|
||
197 | gbc2.fill = java.awt.GridBagConstraints.HORIZONTAL; |
||
198 | gbc2.weightx = 1.0;
|
||
199 | gbc2.insets = new java.awt.Insets(1, 1, 1, 1); |
||
200 | this.add(coordsPanel, gbc);
|
||
201 | this.add(paramsPanel, gbc1);
|
||
202 | this.add(buttonsPanel, gbc2);
|
||
203 | 12825 | nacho | } |
204 | |||
205 | /**
|
||
206 | 12853 | nacho | * Activa o desactiva los botones de transformaci?n anterior y siguiente dependiendo
|
207 | * del estado de la lista de transformaciones.
|
||
208 | * @return
|
||
209 | */
|
||
210 | public void activeButtons() { |
||
211 | Historical affineTransformHist = lyr.getAffineTransformHistorical(); |
||
212 | if(!affineTransformHist.existNext())
|
||
213 | next.setEnabled(false);
|
||
214 | else
|
||
215 | next.setEnabled(true);
|
||
216 | if(!affineTransformHist.existBack())
|
||
217 | back.setEnabled(false);
|
||
218 | else
|
||
219 | back.setEnabled(true);
|
||
220 | 13127 | nacho | if(affineTransformHist.getElementsCount() <= 1) |
221 | 12853 | nacho | first.setEnabled(false);
|
222 | else
|
||
223 | first.setEnabled(true);
|
||
224 | if(affineTransformHist.getElementsCount() == 0) |
||
225 | save.setEnabled(false);
|
||
226 | else
|
||
227 | save.setEnabled(true);
|
||
228 | } |
||
229 | |||
230 | /**
|
||
231 | * Obtiene el MapControl
|
||
232 | * @return MapControl
|
||
233 | */
|
||
234 | public MapControl getMapCtrl() {
|
||
235 | return mapCtrl;
|
||
236 | } |
||
237 | |||
238 | /**
|
||
239 | 13127 | nacho | * Asigna el MapControl
|
240 | * @param mapCtrl
|
||
241 | */
|
||
242 | public void setMapCtrl(MapControl mapCtrl) { |
||
243 | this.mapCtrl = mapCtrl;
|
||
244 | } |
||
245 | |||
246 | /**
|
||
247 | 12853 | nacho | * Obtiene la capa raster asociada
|
248 | * @return
|
||
249 | */
|
||
250 | public FLyrRasterSE getLayer() {
|
||
251 | return this.lyr; |
||
252 | } |
||
253 | |||
254 | /**
|
||
255 | * Asigna la capa raster del raster seleccionado en el TOC en base
|
||
256 | * al cual se asigna la georreferenciaci?n al dialogo.
|
||
257 | * @param lyr
|
||
258 | */
|
||
259 | public void setLayer(FLyrRasterSE lyr) { |
||
260 | this.lyr = lyr;
|
||
261 | loadTransform(lyr.getAffineTransform()); |
||
262 | } |
||
263 | |||
264 | /**
|
||
265 | * Carga los par?metros en el dialogo a partir de la capa
|
||
266 | * @param lyr Capa raster
|
||
267 | */
|
||
268 | public void loadTransform(AffineTransform at) { |
||
269 | setUlx(String.valueOf(MathUtils.format(at.getTranslateX(), tailValue)));
|
||
270 | setUly(String.valueOf(MathUtils.format(at.getTranslateY(), tailValue)));
|
||
271 | setPsx(String.valueOf(MathUtils.format(at.getScaleX(), tailValue)));
|
||
272 | setPsy(String.valueOf(MathUtils.format(at.getScaleY(), tailValue)));
|
||
273 | setRotx(String.valueOf(MathUtils.format(at.getShearX(), tailValue)));
|
||
274 | setRoty(String.valueOf(MathUtils.format(at.getShearY(), tailValue)));
|
||
275 | } |
||
276 | |||
277 | /**
|
||
278 | 12825 | nacho | * Asigna el tama?o de pixel en X
|
279 | * @param psx
|
||
280 | */
|
||
281 | public void setPsx(String psx) { |
||
282 | this.psx.setValue(psx);
|
||
283 | } |
||
284 | |||
285 | /**
|
||
286 | * Asigna el tama?o de pixel en Y
|
||
287 | * @param psy
|
||
288 | */
|
||
289 | public void setPsy(String psy) { |
||
290 | this.psy.setValue(psy);
|
||
291 | } |
||
292 | |||
293 | /**
|
||
294 | * Asigna la rotaci?n en X
|
||
295 | * @param rotx
|
||
296 | */
|
||
297 | public void setRotx(String rotx) { |
||
298 | this.rotx.setValue(rotx);
|
||
299 | } |
||
300 | |||
301 | /**
|
||
302 | * Asigna la rotaci?n en Y
|
||
303 | * @param roty
|
||
304 | */
|
||
305 | public void setRoty(String roty) { |
||
306 | this.roty.setValue(roty);
|
||
307 | } |
||
308 | |||
309 | /**
|
||
310 | * Asigna la coordenada superior izquierda
|
||
311 | * @param ulx
|
||
312 | */
|
||
313 | public void setUlx(String ulx) { |
||
314 | this.ulx.setValue(ulx);
|
||
315 | } |
||
316 | |||
317 | /**
|
||
318 | * Asigna la coordenada superior derecha
|
||
319 | * @param ulx
|
||
320 | */
|
||
321 | public void setUly(String uly) { |
||
322 | this.uly.setValue(uly);
|
||
323 | } |
||
324 | 12853 | nacho | |
325 | /**
|
||
326 | * Obtiene el bot?n de aplicar
|
||
327 | * @return JButton
|
||
328 | */
|
||
329 | public JButton getApplyButton() { |
||
330 | return apply;
|
||
331 | } |
||
332 | |||
333 | /**
|
||
334 | * Obtiene el bot?n de atr?s
|
||
335 | * @return JButton
|
||
336 | */
|
||
337 | public JButton getBackButton() { |
||
338 | return back;
|
||
339 | } |
||
340 | |||
341 | /**
|
||
342 | * Obtiene el bot?n de ir a la primera transformaci?n
|
||
343 | * @return JButton
|
||
344 | */
|
||
345 | public JButton getFirstButton() { |
||
346 | return first;
|
||
347 | } |
||
348 | |||
349 | /**
|
||
350 | * Obtiene el bot?n de salvar
|
||
351 | * @return JButton
|
||
352 | */
|
||
353 | public JButton getSaveButton() { |
||
354 | return save;
|
||
355 | } |
||
356 | 12825 | nacho | |
357 | 12853 | nacho | /**
|
358 | 14135 | nbrodin | * Obtiene el bot?n de reset
|
359 | * @return JButton
|
||
360 | */
|
||
361 | public JButton getResetButton() { |
||
362 | return reset;
|
||
363 | } |
||
364 | |||
365 | /**
|
||
366 | 12853 | nacho | * Obtiene el bot?n de siguiente transformaci?n
|
367 | * @return JButton
|
||
368 | */
|
||
369 | public JButton getNextButton() { |
||
370 | return next;
|
||
371 | } |
||
372 | |||
373 | /**
|
||
374 | * Obtiene el tama?o de pixel en X
|
||
375 | * @return
|
||
376 | */
|
||
377 | public DataInputContainer getPsx() {
|
||
378 | return psx;
|
||
379 | } |
||
380 | |||
381 | /**
|
||
382 | * Obtiene el tama?o de pixel en Y
|
||
383 | * @return
|
||
384 | */
|
||
385 | public DataInputContainer getPsy() {
|
||
386 | return psy;
|
||
387 | } |
||
388 | |||
389 | /**
|
||
390 | * Obtiene la rotaci?n en X
|
||
391 | * @return
|
||
392 | */
|
||
393 | public DataInputContainer getRotx() {
|
||
394 | return rotx;
|
||
395 | } |
||
396 | |||
397 | /**
|
||
398 | * Obtiene la rotaci?n en Y
|
||
399 | * @return
|
||
400 | */
|
||
401 | public DataInputContainer getRoty() {
|
||
402 | return roty;
|
||
403 | } |
||
404 | |||
405 | /**
|
||
406 | * Obtiene la X de la coordenada superior izquierda
|
||
407 | * @return
|
||
408 | */
|
||
409 | public DataInputContainer getUlx() {
|
||
410 | return ulx;
|
||
411 | } |
||
412 | |||
413 | /**
|
||
414 | * Obtiene la Y de la coordenada superior izquierda
|
||
415 | * @return
|
||
416 | */
|
||
417 | public DataInputContainer getUly() {
|
||
418 | return uly;
|
||
419 | } |
||
420 | 13127 | nacho | |
421 | /**
|
||
422 | * Asigna el flag que dice si se ha modificado la georreferenciaci?n
|
||
423 | * y a?n no se ha salvado
|
||
424 | * @return true si se ha modificado y false si no se ha hecho
|
||
425 | */
|
||
426 | public void setModify(boolean modif) { |
||
427 | geolocModify = modif; |
||
428 | } |
||
429 | |||
430 | /**
|
||
431 | * Obtiene el flag que dice si se ha modificado la georreferenciaci?n
|
||
432 | * y a?n no se ha salvado
|
||
433 | * @return true si se ha modificado y false si no se ha hecho
|
||
434 | */
|
||
435 | public boolean getModify() { |
||
436 | return geolocModify;
|
||
437 | } |
||
438 | |||
439 | /**
|
||
440 | * Obtiene el historico de transformaciones
|
||
441 | * @return Historical
|
||
442 | */
|
||
443 | public Historical getHistorical() {
|
||
444 | return lyr.getAffineTransformHistorical();
|
||
445 | } |
||
446 | 14135 | nbrodin | |
447 | 12825 | nacho | } |