Statistics
| Revision:

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

History | View | Annotate | Download (12.8 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.awt.image.DataBuffer;
28
import java.io.File;
29
import java.io.IOException;
30
import java.util.ArrayList;
31

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

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

    
48

    
49
public class RasterSEDriver implements GeoRasterDriver {
50
        private File file = null;
51
        private IProjection proj = null;
52
        private RasterDataset dataset = null;
53
        private Rendering render = null;
54
        private DataSource        ds = null;
55

    
56
        int trans = 255;
57

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

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

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

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

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

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

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

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

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

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

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

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

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

    
199

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

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

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

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

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

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

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

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

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

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

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

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

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

    
299
        /* (non-Javadoc)
300
         * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getAttributes()
301
         * ?AVISO! Variar los tipos de datos devueltos puede hacer que alguna extensi?n
302
         * no funcione bien. Se pueden a?adir atributos pero no es recomendable quitar ninguno. 
303
         */
304
        public ArrayList getAttributes() {
305
                ArrayList attr = new ArrayList();
306
                String dataType = "Byte";
307
                if (dataset.getDataType() == DataBuffer.TYPE_BYTE) dataType = "Byte";
308
                else if (dataset.getDataType() == DataBuffer.TYPE_SHORT)
309
                        dataType = "Short";
310
                else if (dataset.getDataType() == DataBuffer.TYPE_USHORT)
311
                        dataType = "Unsigned Short";
312
                else if (dataset.getDataType() == DataBuffer.TYPE_INT)
313
                        dataType = "Integer";
314
                else if (dataset.getDataType() == DataBuffer.TYPE_FLOAT)
315
                        dataType = "Float";
316
                else if (dataset.getDataType() == DataBuffer.TYPE_DOUBLE)
317
                        dataType = "Double";
318
                else
319
                        dataType = "Unknown";
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 DataSource getGrid(){
437
                return ds;
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 DataSource getDatasource(){
459
                return this.ds;
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
}