Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / fmap / drivers / raster / RasterSEDriver.java @ 11173

History | View | Annotate | Download (13 KB)

1
/* 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.fmap.drivers.raster;
20

    
21
import java.awt.Dimension;
22
import java.awt.Graphics2D;
23
import java.awt.Image;
24
import java.awt.geom.AffineTransform;
25
import java.awt.geom.Rectangle2D;
26
import java.awt.image.BufferedImage;
27
import java.io.File;
28
import java.io.IOException;
29
import java.util.ArrayList;
30

    
31
import org.cresques.cts.ICoordTrans;
32
import org.cresques.cts.IProjection;
33
import org.gvsig.fmap.drivers.GeoRasterDriver;
34
import org.gvsig.raster.buffer.BufferFactory;
35
import org.gvsig.raster.dataset.NotSupportedExtensionException;
36
import org.gvsig.raster.dataset.RasterDataset;
37
import org.gvsig.raster.dataset.RasterDriverException;
38
import org.gvsig.raster.dataset.io.EcwDriver;
39
import org.gvsig.raster.dataset.io.GdalDriver;
40
import org.gvsig.raster.grid.render.Rendering;
41
import org.gvsig.raster.shared.Extent;
42
import org.gvsig.raster.shared.ViewPortData;
43

    
44
import com.iver.cit.gvsig.fmap.ViewPort;
45
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
46

    
47
public class RasterSEDriver implements GeoRasterDriver {
48
        private File file = null;
49
        private IProjection proj = null;
50
        private RasterDataset dataset = null;
51
        private Rendering render = null;
52
        private BufferFactory        bf = null;
53
        private Object        params = null;
54

    
55
        int trans = 255;
56

    
57
        static {
58
                 Class c[] ={ GdalDriver.class, EcwDriver.class};
59
        }
60
        /* (non-Javadoc)
61
         * @see com.hardcode.driverManager.Driver#getName()
62
         */
63
        public String getName() {
64
                return "gvSIG Raster Driver";
65
        }
66

    
67
        /**
68
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#open(java.io.File)
69
         */
70
        public void open(File f) throws IOException {
71
                file = f;
72
        }
73

    
74
        /* (non-Javadoc)
75
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#close()
76
         */
77
        public void close() throws IOException {
78
                dataset.close();
79
        }
80

    
81
        /* (non-Javadoc)
82
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#initialize()
83
         */
84
        public void initialize() throws IOException {
85
                if (proj != null){
86
                        String fName = null;
87
                        int test = -1;
88
                        if(file != null) {
89
                                fName = file.getAbsolutePath();
90
                                test = fName.indexOf("ecwp:");
91
                        }
92

    
93
                        if (test != -1) {
94
                            String urlECW = fName.substring(test + 6);
95
                            //urlECW.replaceAll("\\", "/");
96
                            fName = "ecwp://" + urlECW;
97
                                System.err.println(test+" "+fName);
98
                    }
99
                        
100
                        //TODO: FUNCIONALIDAD: Manejar las excepciones para que informen convenientemente
101
                        
102
                        try {
103
                                if(params == null)
104
                                        dataset = RasterDataset.open(proj, fName);
105
                                else 
106
                                        dataset = RasterDataset.open(proj, params);
107
                        } catch (NotSupportedExtensionException e) {
108
                                throw new IOException("Formato no valido");
109
                        } catch (RasterDriverException e) {
110
                                throw new IOException("Formato no valido");
111
                        }
112
                        if(dataset == null)
113
                                throw new IOException("Formato no valido");
114
                        bf = new BufferFactory(dataset);
115
                        createRender();
116
                } else
117
                        throw new IOException("Proyecci?n no asignada");
118
                System.out.println(getName()+": Inicializado ");
119
        }
120

    
121
        /**
122
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#initialize(org.cresques.cts.IProjection)
123
         */
124
        public void initialize(IProjection proj) throws IOException {
125
                this.proj = proj;
126
                try{
127
                        if(params == null)
128
                                dataset = RasterDataset.open(proj, file.getAbsolutePath());
129
                        else 
130
                                dataset = RasterDataset.open(proj, params);
131
                } catch (NotSupportedExtensionException e) {
132
                        throw new IOException("Formato no valido");
133
                } catch (RasterDriverException e) {
134
                        throw new IOException("Formato no valido");
135
                }
136
                if(dataset == null)
137
                        return;
138
                bf = new BufferFactory(dataset);
139
                createRender();
140
        }
141

    
142
        private void createRender() {
143
                render = new Rendering(bf);                
144
        }
145

    
146
        /**
147
         * A?ade un fichero al PxRaste
148
         * @param fileName Nombre del fichero a a?adir
149
         */
150
        public void addFile(String fileName)throws IOException {
151
                try{
152
                        if(render != null)
153
                                bf.addFile(RasterDataset.open(getProjection(), fileName));
154
                } catch (NotSupportedExtensionException e) {
155
                        throw new IOException("Formato no valido");
156
                } catch (RasterDriverException e) {
157
                        throw new IOException("Formato no valido");
158
                }
159
        }
160

    
161
        /**
162
         * Asigna los par?metros para la carga de la capa
163
         * @param param Par?metros.
164
         */
165
        public void setLoadParams(Object param){
166
                this.params = param;
167
        }
168
        
169
        /**
170
         * Elimina un fichero al PxRaste
171
         * @param fileName Nombre del fichero a a?adir
172
         */
173
        public void delFile(String fileName){
174
                if(render != null)
175
                        bf.removeFile(fileName);
176
        }
177

    
178
        /*
179
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getFullExtent()
180
         */
181
        public Rectangle2D getFullExtent() {
182
                return dataset.getExtent().toRectangle2D();
183
        }
184

    
185
        public int getTransparency() {
186
                //return 255-(raster.getAlpha());
187
                return 255;
188
        }
189

    
190
        public void setTransparency(int trans) {
191
                this.trans = trans;
192
                /*if (raster != null) {
193
                        raster.setTransparency(trans);
194
                }*/
195
        }
196

    
197
        /* (non-Javadoc)
198
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort)
199
         */
200
        public void draw(BufferedImage image, Graphics2D g, ViewPort vp) throws DriverIOException {
201
                //Comentamos temporalmente el c?digo de Vicente y restauramos el que habia
202
                /*Dimension imgSz=new Dimension(image.getWidth(),image.getHeight());
203
                Rectangle2D r=vp.getAdjustedExtent();
204
                Extent e=new Extent(r);*/
205
                Extent e = new Extent(vp.getAdjustedExtent());
206
                Dimension imgSz = vp.getImageSize();
207
                ViewPortData vp2 = new ViewPortData(vp.getProjection(), e, imgSz );
208
                vp2.setMat(vp.getAffineTransform());
209
                render.draw(g, vp2);
210
        }
211

    
212

    
213
        /*
214
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getProjection()
215
         */
216
        public IProjection getProjection() {
217
                return proj;
218
        }
219

    
220
        /* (non-Javadoc)
221
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#setProjection(org.cresques.cts.IProjection)
222
         */
223
        public void setProjection(IProjection proj) {
224
                this.proj = proj;
225
        }
226

    
227
        /*
228
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getNumBands()
229
         */
230
        public int getNumBands() {
231
                return dataset.getBandCount();
232
        }
233

    
234
        /* (non-Javadoc)
235
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, byte[])
236
         */
237
        public byte[] getPixel(int x, int y, byte[] dArray) {
238
                // TODO Auto-generated method stub
239
                return null;
240
        }
241

    
242
        /* (non-Javadoc)
243
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, int[])
244
         */
245
        public int[] getPixel(int x, int y, int[] dArray) {
246
                // TODO Auto-generated method stub
247
                return null;
248
        }
249

    
250
        /* (non-Javadoc)
251
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getRasterDataType()
252
         */
253
        public int getRasterDataType() {
254
                return bf.getDataType();
255
        }
256

    
257
        /* (non-Javadoc)
258
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getData(int, int, int)
259
         */
260
        public Object getData(int x, int y, int band) {
261
                //return ds.getFiles()[0].getData(x, y, band);
262
                return null;
263
        }
264

    
265
        /* (non-Javadoc)
266
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsByte(int, int, int)
267
         */
268
        public byte getDataAsByte(int x, int y, int band) {
269
                // TODO Auto-generated method stub
270
                return 0;
271
        }
272

    
273
        /* (non-Javadoc)
274
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsFloat(int, int, int)
275
         */
276
        public float getDataAsFloat(int x, int y, int band) {
277
                // TODO Auto-generated method stub
278
                return 0;
279
        }
280

    
281
        /* (non-Javadoc)
282
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsDouble(int, int, int)
283
         */
284
        public double getDataAsDouble(int x, int y, int band) {
285
                // TODO Auto-generated method stub
286
                return 0;
287
        }
288

    
289
        /* (non-Javadoc)
290
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsInt(int, int, int)
291
         */
292
        public int getDataAsInt(int x, int y, int band) {
293
                // TODO Auto-generated method stub
294
                return 0;
295
        }
296

    
297
        /* (non-Javadoc)
298
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
299
         */
300
        public boolean fileAccepted(File file) {
301
                return RasterDataset.fileIsSupported(file.getName());
302
        }
303

    
304
        /* (non-Javadoc)
305
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getImage(java.awt.Dimension, java.awt.geom.Rectangle2D, org.cresques.cts.ICoordTrans)
306
         */
307
        public Image getImage(Dimension size, Rectangle2D userSize, ICoordTrans rp) {
308
                // TODO Auto-generated method stub
309
                return null;
310
        }
311

    
312
        /* (non-Javadoc)
313
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getAttributes()
314
         * ?AVISO! Variar los tipos de datos devueltos puede hacer que alguna extensi?n
315
         * no funcione bien. Se pueden a?adir atributos pero no es recomendable quitar ninguno. 
316
         */
317
        public ArrayList getAttributes() {
318
                ArrayList attr = new ArrayList();
319
/*
320
                String dataType = "Byte";
321
                if (dataset.getDataType() == DataBuffer.TYPE_BYTE) dataType = "Byte";
322
                else if (dataset.getDataType() == DataBuffer.TYPE_SHORT)
323
                        dataType = "Short";
324
                else if (dataset.getDataType() == DataBuffer.TYPE_USHORT)
325
                        dataType = "Unsigned Short";
326
                else if (dataset.getDataType() == DataBuffer.TYPE_INT)
327
                        dataType = "Integer";
328
                else if (dataset.getDataType() == DataBuffer.TYPE_FLOAT)
329
                        dataType = "Float";
330
                else if (dataset.getDataType() == DataBuffer.TYPE_DOUBLE)
331
                        dataType = "Double";
332
                else
333
                        dataType = "Unknown";
334
*/
335
                Object [][] a = {
336
                        {"Filename",dataset.getFName()},
337
                        {"Filesize",new Long(dataset.getFileSize())},
338
                        {"Width",new Integer(dataset.getWidth())},
339
                        {"Height", new Integer(dataset.getHeight())},
340
                        {"Bands", new Integer(dataset.getBandCount())}
341
//                        {"BandDataType", dataType}
342
                };
343
                for (int i=0; i<a.length; i++)
344
                        attr.add(a[i]);
345
                return attr;
346
        }
347

    
348
        /**
349
         * Devuelve el colorBand activo en la banda especificada.
350
         * @param flag banda.
351
         * @return color de banda activo
352
         */
353
        public int getBand(int flag){
354
                //return ds.getBand(flag);
355
                return 0;
356
        }
357

    
358
        /**
359
         * Devuelve la posici?n del fichero para la banda especificada.
360
         * @param flag banda.
361
         * @return posici?n del fichero
362
         */
363
        public int getPosFile(int flag){
364
                //return ds.getPosFile(flag);
365
                return 0;
366
        }
367

    
368
        /**
369
         * Activa o desactiva la transparencia
370
         * @param t        true activa la transparencia y false la desactiva
371
         */
372
        public void setTransparency(boolean t){
373
                //raster.setTransparency(t);
374
        }
375

    
376
        /**
377
         * Asocia un colorBand al rojo, verde o azul.
378
         * @param flag cual (o cuales) de las bandas.
379
         * @param nBand        que colorBand
380
         */
381
        public void setBand(int flag, int nBand){
382
                //raster.setBand(flag, nBand);
383
        }
384

    
385
        /**
386
         * Obtiene la pila de filtros
387
         * @return pila de filtros
388
         */
389
        /*public RasterFilterStack getFilterStack(){
390
                return raster.filterStack;
391
        }*/
392

    
393
        /**
394
         * Asigna la pila de filtros
395
         * @return pila de filtros
396
         */
397
        /*public void setFilterStack(RasterFilterStack stack){
398
                raster.filterStack = stack;
399
        }*/
400

    
401
        /**
402
         * Obtiene el valor del pixel del Image en la posici?n x,y
403
         * @param x Posici?n x
404
         * @param y Posici?n y
405
         * @return valor de pixel
406
         */
407
        public int[] getPixel(double wcx, double wcy){
408
                //return raster.getPixel(wcx, wcy);
409
                return null;
410
        }
411

    
412
        /**
413
         *
414
         */
415
        /*public RasterDataset [] getFiles(){
416
                //return raster.getFiles();
417
                return null;
418
        }*/
419
        
420
        /**
421
         * Obtiene el flag que dice si la imagen est? o no georreferenciada
422
         * @return true si est? georreferenciada y false si no lo est?.
423
         */
424
        public boolean isGeoreferenced() {
425
                return dataset.isGeoreferenced();
426
        }
427
        
428
        /**
429
         * Asigna una transformaci?n al georrasterfile para la transformar la 
430
         * asignaci?n de setView. Del mismo modo asigna los extents a PxRaster para
431
         * transformar la visualizaci?n.
432
         * @param t Matriz de transformaci?n
433
         */
434
        public void setAffineTransform(AffineTransform t){ 
435
                /*for (int i = 0; i < raster.getFiles().length; i++) {
436
                        raster.getFiles()[i].setAffineTransform(t);
437
                        raster.setExtent(raster.getFiles()[i].getExtent());
438
                        raster.setExtentForRequest(raster.getFiles()[i].getExtentForRequest());
439
                }*/
440
        }
441
        
442
        public AffineTransform getAffineTransform(){
443
                //return raster.getFiles()[0].getAffineTransform();
444
                return null;
445
        }
446
        
447
        /**
448
         * Obtiene el grid asociado 
449
         * @return grid
450
         */
451
        public BufferFactory getGrid(){
452
                return bf;
453
        }
454
        
455
        /**
456
        ?* It returns a new file created from the selected
457
         * raster file. e.g: When the user name chooses a
458
         * RAW file the file to open is a VRT file. This 
459
         * method creates the new file and returns its name.
460
         * @param file
461
         * Selected File
462
         * @return
463
         * New File to load
464
         */
465
        public File getTransformedFile(File file){
466
                return null;
467
        }
468
        
469
        /**
470
         * Get datasource object
471
         * @return DataSource
472
         */
473
        public BufferFactory getDatasource(){
474
                return this.bf;
475
        }
476
        
477
        /*
478
         * (non-Javadoc)
479
         * @see org.gvsig.fmap.drivers.GenericRasterDriver#getRender()
480
         */
481
        public Rendering getRender(){
482
                return this.render;
483
        }
484
}