Revision 16554 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/geolocation/listener/GeoLocationPanelListener.java
GeoLocationPanelListener.java | ||
---|---|---|
23 | 23 |
import java.awt.geom.AffineTransform; |
24 | 24 |
import java.awt.geom.Rectangle2D; |
25 | 25 |
import java.io.BufferedReader; |
26 |
import java.io.File; |
|
27 | 26 |
import java.io.FileInputStream; |
28 | 27 |
import java.io.FileNotFoundException; |
29 | 28 |
import java.io.IOException; |
... | ... | |
35 | 34 |
import org.gvsig.fmap.raster.layers.FLyrRasterSE; |
36 | 35 |
import org.gvsig.gui.beans.datainput.DataInputContainerListener; |
37 | 36 |
import org.gvsig.raster.datastruct.Extent; |
37 |
import org.gvsig.raster.util.ExtendedFileFilter; |
|
38 | 38 |
import org.gvsig.raster.util.Historical; |
39 | 39 |
import org.gvsig.raster.util.RasterToolsUtil; |
40 | 40 |
import org.gvsig.rastertools.geolocation.ui.GeoLocationPanel; |
... | ... | |
50 | 50 |
* |
51 | 51 |
*/ |
52 | 52 |
public class GeoLocationPanelListener implements ActionListener, DataInputContainerListener { |
53 |
|
|
53 |
|
|
54 | 54 |
private GeoLocationPanel panel = null; |
55 | 55 |
private boolean enableValueChangeEvent = false; |
56 |
|
|
56 |
|
|
57 | 57 |
/** |
58 |
* Crea un nuevo <code>GeoLocationPanelListener</code>
|
|
58 |
* Crea un nuevo <code>GeoLocationPanelListener</code> |
|
59 | 59 |
* @param panel |
60 | 60 |
*/ |
61 | 61 |
public GeoLocationPanelListener(GeoLocationPanel panel) { |
... | ... | |
78 | 78 |
} |
79 | 79 |
return; |
80 | 80 |
} |
81 |
|
|
81 |
|
|
82 | 82 |
//Asignamos la georreferenciaci?n que hay en ese momento en el dialogo |
83 | 83 |
if(e.getSource() == panel.getApplyButton()) { |
84 | 84 |
try { |
... | ... | |
97 | 97 |
return; |
98 | 98 |
} |
99 | 99 |
} |
100 |
|
|
100 |
|
|
101 | 101 |
Historical hist = panel.getHistorical(); |
102 | 102 |
if(hist == null) |
103 | 103 |
return; |
104 |
|
|
104 |
|
|
105 | 105 |
AffineTransform at = null; |
106 |
|
|
106 |
|
|
107 | 107 |
//Cargamos la primera transformaci?n |
108 |
if(e.getSource() == panel.getFirstButton())
|
|
108 |
if(e.getSource() == panel.getFirstButton()) |
|
109 | 109 |
at = (AffineTransform)hist.getFirst(); |
110 |
|
|
110 |
|
|
111 | 111 |
//Cargamos la transformaci?n anterior |
112 |
if(e.getSource() == panel.getBackButton())
|
|
112 |
if(e.getSource() == panel.getBackButton()) |
|
113 | 113 |
at = (AffineTransform)hist.getBack(); |
114 |
|
|
114 |
|
|
115 | 115 |
////Cargamos la transformaci?n siguiente |
116 | 116 |
if(e.getSource() == panel.getNextButton()) |
117 | 117 |
at = (AffineTransform)hist.getNext(); |
... | ... | |
119 | 119 |
//Cargamos la georreferenciaci?n del raster |
120 | 120 |
if(e.getSource() == panel.getResetButton()) |
121 | 121 |
at = panel.getLayer().getDataSource().getOwnAffineTransform(); |
122 |
|
|
122 |
|
|
123 | 123 |
//Cargar la georreferenciaci?n desde tfw |
124 | 124 |
if(e.getSource() == panel.getTfwLoad()) { |
125 | 125 |
JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath()); |
126 | 126 |
chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero")); |
127 |
chooser.addChoosableFileFilter(new GeorreferencingFileFilter("tfw")); |
|
128 |
chooser.addChoosableFileFilter(new GeorreferencingFileFilter("wld")); |
|
127 |
chooser.addChoosableFileFilter(new ExtendedFileFilter("tfw")); |
|
128 |
chooser.addChoosableFileFilter(new ExtendedFileFilter("wld")); |
|
129 |
|
|
130 |
ExtendedFileFilter allFilters = new ExtendedFileFilter(); |
|
131 |
allFilters.addExtension("tfw"); |
|
132 |
allFilters.addExtension("wld"); |
|
133 |
allFilters.setDescription(PluginServices.getText(this, "todos_soportados")); |
|
134 |
chooser.addChoosableFileFilter(allFilters); |
|
135 |
chooser.setFileFilter(allFilters); |
|
136 |
|
|
129 | 137 |
int returnVal = chooser.showOpenDialog(panel); |
130 | 138 |
if (returnVal == JFileChooser.APPROVE_OPTION) { |
131 | 139 |
String fName = chooser.getSelectedFile().toString(); |
132 | 140 |
at = readTfw(fName); |
133 | 141 |
} |
134 | 142 |
} |
135 |
|
|
143 |
|
|
136 | 144 |
//Centrar el raster en la vista |
137 | 145 |
if(e.getSource() == panel.getCenterToView()) { |
138 | 146 |
Extent extentView = calcCenterExtent(panel.getViewPort()); |
... | ... | |
143 | 151 |
at = new AffineTransform(psX, 0, 0, psY, x, y); |
144 | 152 |
panel.setModify(true); |
145 | 153 |
} |
146 |
|
|
154 |
|
|
147 | 155 |
//Entrar? en el caso de que se haya seleccionado alguna transformaci?n |
148 | 156 |
if(at != null) { |
149 | 157 |
panel.getLayer().setAT(at); |
... | ... | |
152 | 160 |
panel.getMapCtrl().getMapContext().invalidate(); |
153 | 161 |
} |
154 | 162 |
} |
155 |
|
|
163 |
|
|
156 | 164 |
/** |
157 | 165 |
* Control del cambio de valor dentro de las cajas de texto. Cuando esto ocurre tiene |
158 | 166 |
* el mismo efecto que el bot?n "Aplicar" |
... | ... | |
182 | 190 |
public void setEnableValueChangeEvent(boolean enableValueChangeEvent) { |
183 | 191 |
this.enableValueChangeEvent = enableValueChangeEvent; |
184 | 192 |
} |
185 |
|
|
193 |
|
|
186 | 194 |
/** |
187 |
* Centra el raster asociado a la capa en al extent del viewport pasado
|
|
188 |
* por par?metro.
|
|
195 |
* Centra el raster asociado a la capa en al extent del viewport pasado |
|
196 |
* por par?metro. |
|
189 | 197 |
* @param vp ViewPort |
190 | 198 |
* @return Extent para la imagen |
191 | 199 |
*/ |
192 | 200 |
private Extent calcCenterExtent(ViewPort vp) { |
193 | 201 |
Extent tempExtent = null; |
194 | 202 |
double widthPxImg, heightPxImg; |
195 |
|
|
203 |
|
|
196 | 204 |
widthPxImg = ((FLyrRasterSE)panel.getLayer()).getPxWidth(); |
197 | 205 |
heightPxImg = ((FLyrRasterSE)panel.getLayer()).getPxHeight(); |
198 |
|
|
206 |
|
|
199 | 207 |
if(vp == null || vp.getAdjustedExtent() == null) { |
200 | 208 |
vp = new ViewPort(null); |
201 | 209 |
Rectangle2D r2d = new Rectangle2D.Double(0, 0, widthPxImg, heightPxImg); |
... | ... | |
224 | 232 |
} |
225 | 233 |
return new Extent(ulX, ulY, lrX, lrY); |
226 | 234 |
} |
227 |
|
|
235 |
|
|
228 | 236 |
/** |
229 |
* Lee las coordenadas de un fichero de tfw con una transformaci?n y
|
|
237 |
* Lee las coordenadas de un fichero de tfw con una transformaci?n y |
|
230 | 238 |
* devuelve la clase AffineTransform con dicha transformaci?n. Esta llamada gestiona los |
231 | 239 |
* errores producidos actuando en consecuencia. Muestra los mensajes al usuario y retorna |
232 | 240 |
* null en caso de tener problemas. |
... | ... | |
260 | 268 |
} |
261 | 269 |
return new AffineTransform(result[0], result[1], result[2], result[3], result[4], result[5]); |
262 | 270 |
} |
263 |
|
|
264 |
/** |
|
265 |
* Filtro para el selector de formatos de georreferenciaci?n |
|
266 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
267 |
*/ |
|
268 |
class GeorreferencingFileFilter extends javax.swing.filechooser.FileFilter { |
|
269 |
private String filter; |
|
270 |
|
|
271 |
public GeorreferencingFileFilter(String fil) { |
|
272 |
this.filter = fil; |
|
273 |
} |
|
274 |
|
|
275 |
public boolean accept(File f) { |
|
276 |
return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
|
277 |
} |
|
278 |
|
|
279 |
public String getDescription() { |
|
280 |
return "." + filter; |
|
281 |
} |
|
282 |
} |
|
283 | 271 |
} |
Also available in: Unified diff