Statistics
| Revision:

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

History | View | Annotate | Download (12.7 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

    
54
        int trans = 255;
55

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

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

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

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

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

    
113
        /**
114
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#initialize(org.cresques.cts.IProjection)
115
         */
116
        public void initialize(IProjection proj) throws IOException {
117
                this.proj = proj;
118
                try{
119
                        dataset = RasterDataset.open(proj, file.getAbsolutePath());
120
                } catch (NotSupportedExtensionException e) {
121
                        throw new IOException("Formato no valido");
122
                } catch (RasterDriverException e) {
123
                        throw new IOException("Formato no valido");
124
                }
125
                if(dataset == null)
126
                        return;
127
                bf = new BufferFactory(dataset);
128
                createRender();
129
        }
130

    
131
        private void createRender() {
132
                render = new Rendering(bf);
133
                /*raster = new Rendering(rasterFile, null, rasterFile.getExtent());
134
                raster.setTransparency(false);
135
                grid.addRenderizer(raster);*/
136
                
137
        }
138

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

    
154
        /**
155
         * Elimina un fichero al PxRaste
156
         * @param fileName Nombre del fichero a a?adir
157
         */
158
        public void delFile(String fileName){
159
                if(render != null)
160
                        bf.removeFile(fileName);
161
        }
162

    
163
        /*
164
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getFullExtent()
165
         */
166
        public Rectangle2D getFullExtent() {
167
                return dataset.getExtent().toRectangle2D();
168
        }
169

    
170
        public int getTransparency() {
171
                //return 255-(raster.getAlpha());
172
                return 255;
173
        }
174

    
175
        public void setTransparency(int trans) {
176
                this.trans = trans;
177
                /*if (raster != null) {
178
                        raster.setTransparency(trans);
179
                }*/
180
        }
181

    
182
        /* (non-Javadoc)
183
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort)
184
         */
185
        public void draw(BufferedImage image, Graphics2D g, ViewPort vp) throws DriverIOException {
186
                //Comentamos temporalmente el c?digo de Vicente y restauramos el que habia
187
                /*Dimension imgSz=new Dimension(image.getWidth(),image.getHeight());
188
                Rectangle2D r=vp.getAdjustedExtent();
189
                Extent e=new Extent(r);*/
190
                Extent e = new Extent(vp.getAdjustedExtent());
191
                Dimension imgSz = vp.getImageSize();
192
                ViewPortData vp2 = new ViewPortData(vp.getProjection(), e, imgSz );
193
                vp2.setMat(vp.getAffineTransform());
194
                render.draw(g, vp2);
195
        }
196

    
197

    
198
        /*
199
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getProjection()
200
         */
201
        public IProjection getProjection() {
202
                return proj;
203
        }
204

    
205
        /* (non-Javadoc)
206
         * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#setProjection(org.cresques.cts.IProjection)
207
         */
208
        public void setProjection(IProjection proj) {
209
                this.proj = proj;
210
        }
211

    
212
        /*
213
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getNumBands()
214
         */
215
        public int getNumBands() {
216
                return dataset.getBandCount();
217
        }
218

    
219
        /* (non-Javadoc)
220
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, byte[])
221
         */
222
        public byte[] getPixel(int x, int y, byte[] dArray) {
223
                // TODO Auto-generated method stub
224
                return null;
225
        }
226

    
227
        /* (non-Javadoc)
228
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, int[])
229
         */
230
        public int[] getPixel(int x, int y, int[] dArray) {
231
                // TODO Auto-generated method stub
232
                return null;
233
        }
234

    
235
        /* (non-Javadoc)
236
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getRasterDataType()
237
         */
238
        public int getRasterDataType() {
239
                return bf.getDataType();
240
        }
241

    
242
        /* (non-Javadoc)
243
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getData(int, int, int)
244
         */
245
        public Object getData(int x, int y, int band) {
246
                //return ds.getFiles()[0].getData(x, y, band);
247
                return null;
248
        }
249

    
250
        /* (non-Javadoc)
251
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsByte(int, int, int)
252
         */
253
        public byte getDataAsByte(int x, int y, int band) {
254
                // TODO Auto-generated method stub
255
                return 0;
256
        }
257

    
258
        /* (non-Javadoc)
259
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsFloat(int, int, int)
260
         */
261
        public float getDataAsFloat(int x, int y, int band) {
262
                // TODO Auto-generated method stub
263
                return 0;
264
        }
265

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

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

    
282
        /* (non-Javadoc)
283
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
284
         */
285
        public boolean fileAccepted(File file) {
286
                return RasterDataset.fileIsSupported(file.getName());
287
        }
288

    
289
        /* (non-Javadoc)
290
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getImage(java.awt.Dimension, java.awt.geom.Rectangle2D, org.cresques.cts.ICoordTrans)
291
         */
292
        public Image getImage(Dimension size, Rectangle2D userSize, ICoordTrans rp) {
293
                // TODO Auto-generated method stub
294
                return null;
295
        }
296

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

    
333
        /**
334
         * Devuelve el colorBand activo en la banda especificada.
335
         * @param flag banda.
336
         * @return color de banda activo
337
         */
338
        public int getBand(int flag){
339
                //return ds.getBand(flag);
340
                return 0;
341
        }
342

    
343
        /**
344
         * Devuelve la posici?n del fichero para la banda especificada.
345
         * @param flag banda.
346
         * @return posici?n del fichero
347
         */
348
        public int getPosFile(int flag){
349
                //return ds.getPosFile(flag);
350
                return 0;
351
        }
352

    
353
        /**
354
         * Activa o desactiva la transparencia
355
         * @param t        true activa la transparencia y false la desactiva
356
         */
357
        public void setTransparency(boolean t){
358
                //raster.setTransparency(t);
359
        }
360

    
361
        /**
362
         * Asocia un colorBand al rojo, verde o azul.
363
         * @param flag cual (o cuales) de las bandas.
364
         * @param nBand        que colorBand
365
         */
366
        public void setBand(int flag, int nBand){
367
                //raster.setBand(flag, nBand);
368
        }
369

    
370
        /**
371
         * Obtiene la pila de filtros
372
         * @return pila de filtros
373
         */
374
        /*public RasterFilterStack getFilterStack(){
375
                return raster.filterStack;
376
        }*/
377

    
378
        /**
379
         * Asigna la pila de filtros
380
         * @return pila de filtros
381
         */
382
        /*public void setFilterStack(RasterFilterStack stack){
383
                raster.filterStack = stack;
384
        }*/
385

    
386
        /**
387
         * Obtiene el valor del pixel del Image en la posici?n x,y
388
         * @param x Posici?n x
389
         * @param y Posici?n y
390
         * @return valor de pixel
391
         */
392
        public int[] getPixel(double wcx, double wcy){
393
                //return raster.getPixel(wcx, wcy);
394
                return null;
395
        }
396

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