Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / dataset / IRasterDataSource.java @ 20119

History | View | Annotate | Download (17.6 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.raster.dataset;
20

    
21
import java.awt.geom.AffineTransform;
22
import java.awt.geom.Point2D;
23
import java.io.IOException;
24

    
25
import org.gvsig.raster.dataset.io.RasterDriverException;
26
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation;
27
import org.gvsig.raster.dataset.properties.DatasetListStatistics;
28
import org.gvsig.raster.datastruct.ColorTable;
29
import org.gvsig.raster.datastruct.Extent;
30
import org.gvsig.raster.datastruct.GeoPoint;
31
import org.gvsig.raster.datastruct.Transparency;
32
import org.gvsig.raster.hierarchy.IHistogramable;
33

    
34
/**
35
 * Interfaz que deben implementar cualquier fuente de datos raster. Estas pueden estar
36
 * compuestas por N datasets. B?sicamente hay dos fuentes que deben implementar este interfaz, 
37
 * MultiRasterDataset y CompositeDataset. La primera es un dataset compuesto por varios ficheros
38
 * con el mismo Extent de N bandas cada uno. MultiRasterDataset proporciona una encapsulaci?n al acceso
39
 * a datos de todos ellos. CompositeDataset es un dataset compuesto de N MultiRasterDatasets cuya extensi?n
40
 * es continua formando un Grid de datasets con continuidad espacial. IRasterDataSource proporciona
41
 * una visi?n de acceso a datos com?n para ambos.
42
 * 
43
 * @version 27/08/2007
44
 * @author Nacho Brodin (nachobrodin@gmail.com)
45
 *
46
 */
47
public interface IRasterDataSource extends IHistogramable {
48
                        
49
        /**
50
         * Obtiene el tipo de dato por banda
51
         * @return tipo de dato por banda
52
         */
53
        public int[] getDataType();
54

    
55
        /**
56
         * Obtiene el valor NoData asociado al raster.
57
         * @return
58
         */
59
        public double getNoDataValue();
60

    
61
        /**
62
         * Vuelve a poner el valor noData como estaba inicialmente
63
         */
64
        public void resetNoDataValue();
65

    
66
        /**
67
         * Define el valor NoData asociado al raster.
68
         * @return
69
         */
70
        public void setNoDataValue(double value);
71

    
72
        /**
73
         * Obtiene si esta activo el valor NoData asociado al raster.
74
         * @return
75
         */
76
        public boolean isNoDataEnabled();
77

    
78
        /**
79
         * Define si se activa el valor NoData asociado al raster.
80
         * @return
81
         */
82
        public void setNoDataEnabled(boolean enabled);
83
        
84
        /**
85
         * Obtiene la paleta correspondiente al nombre del fichero pasado por par?metro. 
86
         * @param fileName Nombre del fichero
87
         * @return Paleta o null si no la tiene
88
         */
89
        public ColorTable getColorTable(String fileName);
90
        
91
        /**
92
         * Obtiene el n?mero de bandas del raster
93
         * @return N?mero de bandas
94
         */
95
        public int getBandCount();
96
                
97
        /**
98
         * Obtiene la lista de bandas.
99
         * @return BandList
100
         */
101
        public BandList getBands();
102
                
103
        /**
104
         * Obtiene el n?mero de datasets con el extent completo del IRasterDataSource. El valor 
105
         * devuelto por esta llamada coincidir?a con el valor devuelto por getDatasetCount() de un
106
         * MultiRasterDataset que lo compone.
107
         * @return integer.
108
         */
109
        public int getDatasetCount();
110
        
111
        /**
112
         * Obtiene el extent de la ?ltima selecci?n hecha con alguna de las llamadas
113
         * setAreaOfInterest. Este extent es devuelto en coordenadas reales con las transformaciones
114
         * que se hayan aplicado sobre el/los dataset.
115
         * @return Extent Coordenadas reales que representan el ?ltimo ?rea de datos
116
         * solicitada.
117
         */
118
        public Extent getLastSelectedView();
119
        
120
        /**
121
         * Obtiene el dataset de la posici?n i. En un CompositeDataset devolver? la lista de 
122
         * todos los datasets en esa posici?n 
123
         * @param i Posici?n del dataset a obtener.
124
         * @return GeoRasterFileDataset.
125
         */
126
        public RasterDataset[] getDataset(int i);
127
        
128
        /**
129
         * Obtiene fichero de nombre fileName.
130
         * @param i Posici?n del dataset a obtener.
131
         * @return GeoRasterFile.
132
         */
133
        public RasterDataset getDataset(String fileName);
134
                
135
        /**
136
         * Elimina un fichero a la lista a partir de su nombre
137
         * @param fileName        Nombre del fichero a eliminar.
138
         */
139
        public void removeDataset(String fileName);
140
        
141
        /**
142
         * Elimina un fichero a la lista
143
         * @param file Fichero a eliminar
144
         */
145
        public void removeDataset(RasterDataset file);
146
                
147
        /**
148
         * A?ade un fichero a la lista de datasets a partir de su nombre. Si se trata de un multiRasterDataset
149
         * solo se necesita un fichero pero si es un CompositeDataset necesitaremos una lista de ellos. Tantos
150
         * como tenga el CompositeDataset 
151
         * @param f fichero a a?adir.
152
         * @throws RasterDriverException 
153
         */
154
        public void addDataset(RasterDataset[] f)throws FileNotFoundInListException;
155
        
156
        /**
157
         * A?ade un fichero a la lista de datasets a partir de su nombre. Si se trata de un multiRasterDataset
158
         * solo se necesita un fichero pero si es un CompositeDataset necesitaremos una lista de ellos. Tantos
159
         * como tenga el CompositeDataset 
160
         * @param f fichero a a?adir.
161
         * @throws RasterDriverException 
162
         */
163
        public void addDataset(String[] fileName)throws FileNotFoundInListException, NotSupportedExtensionException, RasterDriverException;
164
        
165
        /**
166
         * Obtiene la altura del raster en p?xeles.
167
         * @return altura
168
         */
169
        public double getHeight();
170

    
171
        /**
172
         * Obtiene la anchura del raster en p?xeles.
173
         * @return anchura
174
         */
175
        public double getWidth();
176
        
177
        /**
178
         * Obtiene el tama?o de celda del raster
179
         * @return Valor del tama?o de celda
180
         */
181
        public double getCellSize();
182
        
183
        /**
184
         * Cierra los raster asociados.
185
         */
186
        public void close();
187
        
188
        /**
189
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
190
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
191
         * pixeles de disco. 
192
         * @param x Posici?n X superior izquierda
193
         * @param y Posici?n Y superior izquierda
194
         * @param w Ancho en coordenadas reales
195
         * @param h Alto en coordenadas reales
196
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
197
         * @param bandList
198
         * @return Buffer de datos
199
         */
200
        public IBuffer getWindowRaster(double ulx, double uly, double lrx, double lry) 
201
                throws InvalidSetViewException, InterruptedException, RasterDriverException;
202
        
203
        /**
204
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
205
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
206
         * pixeles de disco. 
207
         * @param x Posici?n X superior izquierda
208
         * @param y Posici?n Y superior izquierda
209
         * @param w Ancho en coordenadas reales
210
         * @param h Alto en coordenadas reales
211
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
212
         * @param bandList
213
         * @return Buffer de datos
214
         */
215
        public IBuffer getWindowRaster(double ulx, double uly, double w, double h, boolean adjustToExtent) 
216
                throws InvalidSetViewException, InterruptedException, RasterDriverException;
217
                
218
        /**
219
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
220
         * Aplica supersampleo o subsampleo en funci?n del tama?o del buffer. Esta operaci?n la gestiona
221
         * el driver.
222
         * @param minX Valor m?nimo de la X en coordenadas reales
223
         * @param minY Valor m?nimo de la Y en coordenadas reales
224
         * @param maxX Valor m?ximo de la X en coordenadas reales
225
         * @param maxY Valor m?ximo de la Y en coordenadas reales
226
         * @param bufWidth ancho del buffer lde datos
227
         * @param bufHeight alto del buffer de datos
228
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
229
         * @param bandList
230
         * @return Buffer de datos
231
         */
232
        public IBuffer getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, boolean adjustToExtent) 
233
                throws InvalidSetViewException, InterruptedException, RasterDriverException;
234
                
235
        
236
        /**
237
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
238
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
239
         * pixeles de disco. 
240
         * @param x Posici?n X superior izquierda
241
         * @param y Posici?n Y superior izquierda
242
         * @param w Ancho en coordenadas pixel
243
         * @param h Alto en coordenadas pixel
244
         * @param bandList
245
         * @return Buffer de datos
246
         */
247
        public IBuffer getWindowRaster(int x, int y, int w, int h) 
248
                throws InvalidSetViewException, InterruptedException, RasterDriverException;
249
                
250
        /**
251
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
252
         * Aplica supersampleo o subsampleo en funci?n del tama?o del buffer
253
         * @param x Posici?n X superior izquierda en pixels
254
         * @param y Posici?n Y superior izquierda en pixels
255
         * @param w Ancho en pixels
256
         * @param h Alto en pixels
257
         * @param bufWidth ancho del buffer de datos
258
         * @param bufHeight alto del buffer de datos
259
         * @param bandList
260
         * @return Buffer de datos
261
         */
262
        public IBuffer getWindowRaster(int x, int y, int w, int h, int bufWidth, int bufHeight) 
263
                throws InvalidSetViewException, InterruptedException, RasterDriverException;
264
        
265
        /**
266
         * Obtiene el extent del raster.
267
         * @return Extent
268
         */
269
        public Extent getExtent();
270
        
271
        /**
272
         * Convierte un punto desde coordenadas pixel a coordenadas del mundo.
273
         * @param pt Punto a transformar
274
         * @return punto transformado en coordenadas del mundo
275
         */
276
        public Point2D rasterToWorld(Point2D pt);
277
        
278
        /**
279
         * Convierte un punto desde del mundo a coordenadas pixel.
280
         * @param pt Punto a transformar
281
         * @return punto transformado en coordenadas pixel
282
         */
283
        public Point2D worldToRaster(Point2D pt);
284
        
285
        /**
286
         * Obtiene el objeto con las estadisticas
287
         * @return MultiFileStatistics
288
         */
289
        public DatasetListStatistics getStatistics();
290
        
291
        /**
292
         * Obtiene el flag que dice si el raster est? o no georreferenciado
293
         * @return true si est? georreferenciado y false si no lo est?.
294
         */
295
        public boolean isGeoreferenced();
296
        
297
        /**
298
         * Obtiene el valor del raster en la coordenada que se le pasa.
299
         * El valor ser? Double, Int, Byte, etc. dependiendo del tipo de
300
         * raster.
301
         * @param x        coordenada X
302
         * @param y coordenada Y
303
         * @return
304
         */
305
        public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException;
306
        
307
                
308
        /**
309
         * Obtiene el objeto que contiene que contiene la interpretaci?n de 
310
         * color por banda para el dataset seleccionado
311
         * @param dataset Dataset del que se necesesita la informaci?n de color dentro del RasterMultiDataset
312
         * @return DatasetColorInterpretation
313
         */
314
        public DatasetColorInterpretation getColorInterpretation(int dataset);
315
        
316
        /**
317
         * Obtiene la proyecci?n asociada al raster. Como todos los dataset del 
318
         * multiDataset deben tener la misma proyecci?n obtenemos esta del primer
319
         * dataset.
320
         * @return Proyecci?n en formato cadena
321
         * @throws RasterDriverException
322
         */
323
        public String getWktProjection() throws RasterDriverException;
324
        
325
        /**
326
         * Metodo que obtiene si un punto cae dentro de los l?mites de la extensi?n de la fuente de 
327
         * datos raster o fuera de ellos.
328
         * @param p Punto a calcular
329
         * @return true si est? dentro de los l?mites y false si est? fuera
330
         */
331
        public boolean isInside(Point2D p); 
332
        
333
        /**
334
         * Recupera del raster la matriz de transformaci?n que ten?a en la carga.
335
         * @return AffineTransform
336
         */
337
        public AffineTransform getOwnAffineTransform();
338
        
339
        /**
340
         * Recupera del raster la matriz de transformaci?n que lo situa en cualquier parte de la vista
341
         * @return AffineTransform
342
         */
343
        public AffineTransform getAffineTransform();
344
        
345
        /**
346
         * Asigna al raster la matriz de transformaci?n para situarlo en cualquier parte de la vista
347
         * @param transf
348
         */
349
        public void setAffineTransform(AffineTransform transf);
350
        
351
        /**
352
         * Consulta de si un raster tiene rotaci?n o no.
353
         * @return true si tiene rotaci?n y false si no la tiene.
354
         */
355
        public boolean isRotated();
356
        
357
        /**
358
         * Crea un un nuevo dataset que referencia al mismo fichero en disco
359
         * @return IRasterDataSource
360
         */
361
        public IRasterDataSource newDataset();
362
        
363
        /**
364
         * Dado unas coordenadas reales, un tama?o de buffer y un tama?o de raster. 
365
         * Si el buffer es de mayor tama?o que el raster (supersampleo) quiere decir que 
366
         * por cada pixel de buffer se repiten varios del raster. Esta funci?n calcula el 
367
         * n?mero de pixels de desplazamiento en X e Y que corresponden al primer pixel del
368
         * buffer en la esquina superior izquierda. Esto es necesario porque la coordenada
369
         * solicitada es real y puede no caer sobre un pixel completo. Este calculo es
370
         * util cuando un cliente quiere supersamplear sobre un buffer y que no se lo haga
371
         * el driver autom?ticamente.
372
         * @param dWorldTLX Coordenada real X superior izquierda
373
         * @param dWorldTLY Coordenada real Y superior izquierda
374
         * @param nWidth Ancho del raster
375
         * @param nHeight Alto del raster
376
         * @param bufWidth Ancho del buffer
377
         * @param bufHeight Alto del buffer
378
         * @return Array de cuatro. Los dos primeros elementos son el desplazamiento en X e Y y los dos segundos
379
         * el tama?o en pixels de buffer de un pixel de la imagen en ancho y alto.  
380
         */
381
        public double[] calcSteps(double dWorldTLX, double dWorldTLY, double dWorldBRX, double dWorldBRY,
382
                        double nWidth, double nHeight, int bufWidth, int bufHeight);
383
        
384
        /**
385
         * Obtiene en un array de String la lista de nombres de ficheros. 
386
         * @param i Columna para un CompositeDataset 
387
         * @param j Fila para un CompositeDataset
388
         * @return lista de nombres de los ficheros del GeoRasterMultiFile
389
         */
390
        public String[] getNameDatasetStringList(int i, int j);
391
        
392
        /**
393
         * Obtiene el estado de transparencia a partir de los estados de transparencia de todos
394
         * los ficheros que lo componen. Si varios de los ficheros que lo componen tienen banda de 
395
         * transparencia estas tendr?n que ser mezcladas sobre una banda de transparencia ?nica.
396
         * @return Objeto FileTransparency con el estado de transparencia
397
         */
398
        public Transparency getTransparencyFilesStatus();
399
        
400
        /**
401
         * Obtiene la lista de tablas de color correspondiente a todos los ficheros que forman el raster
402
         * @return Paleta asociada a este o null si no tiene. Una posici?n null en el array tambi?n indica que
403
         * para ese fichero no hay paletas asociadas.
404
         */
405
        public ColorTable[] getColorTables();
406
        
407
        /**
408
         * Salva la georreferenciaci?n a fichero rmf.
409
         * @param fName
410
         * @throws IOException  
411
         */
412
        public void saveGeoToRmf() throws IOException;
413
        
414
        /**
415
         * Escribe sobre el rmf todos los cambios que haya para salvar, es decir, para cada
416
         * Objeto registrado en el manager volcar? su contenido al fichero rmf.
417
         * @throws IOException
418
         */
419
        public void saveRmfModification() throws IOException;
420
        
421
        /**
422
         * Salva la georreferenciaci?n a fichero rmf.
423
         * @param geoPoints
424
         * @throws IOException  
425
         */
426
        public void saveGeoPointsToRmf(GeoPoint[] geoPoints) throws IOException;
427
        
428
        /**
429
         * Salva la georreferenciaci?n a fichero rmf.
430
         * @param geoPoints
431
         * @throws IOException  
432
         */
433
        public GeoPoint[] loadGeoPointsFromRmf() throws IOException;
434
                 
435
        
436
        /**
437
         * Calcula el tama?o en byte de los raster.
438
         * @return tama?o en bytes de todos los ficheros de la lista
439
         */
440
        public long getFileSize();
441
        
442
        /**
443
         * Asigna las bandas dibujables cuando se solicita una acci?n de lectura de datos
444
         * @param db int[]
445
         */
446
        public void setDrawableBands(int[] db);
447
        
448
        /**
449
         * Asigna las bandas dibujables cuando se solicita una acci?n de lectura de datos
450
         * @param db int[]
451
         */
452
        public void clearDrawableBands();
453
        
454
        /**
455
         * Para este dataset asigna que bandas se pintaran
456
         * sobre el RasterBuf cuando se haga un update. Especificamos a 
457
         * trav?s de los par?metros para que posici?n del RasterBuf ir? 
458
         * dibujada con que banda del fichero de imagen.
459
         * @param posRasterBuf        Posici?n del RasterBuf que queremos pintar.
460
         * @param imageBand        Banda de la imagen que se pintar?
461
         */
462
        public void addDrawableBand(int posRasterBuf, int imageBand);
463
        
464
        /**
465
         * Consulta si el buffer siguiente a pedir es de solo lectura o lectura y escritura.
466
         * La asignaci?n del flag de solo lectura a true debe hacerse para cada consulta.
467
         * @return true si la siguiente carga de buffer se hace de solo lectura y false si es de lectura/escritura 
468
         */
469
        public boolean isReadOnly();
470
        
471
        /**
472
         * Asigna el flag que dice si la carga del siguiente buffer es de solo lectura o lectura/escritura.
473
         * El poner este flag a true hace que se ponga a false el de memory autom?ticamente.
474
         * La asignaci?n del flag de solo lectura a true debe hacerse para cada consulta.
475
         * @param readOnly true si la siguiente carga de buffer se hace de solo lectura y false si es de lectura/escritura
476
         */
477
        public void setReadOnly(boolean readOnly);
478
        
479
        /**
480
         * Consulta si el buffer siguiente a pedir es se est? forzando a que sea cargado en memoria. Si no se fuerza
481
         * puede cargarse en memoria o cacheado, seg?n decida el dataset.
482
         * @return true si la siguiente carga se forzar? a memoria y false si no se fuerza. 
483
         */
484
        public boolean isMemoryBuffer();
485
        
486
        /**
487
         * Asigna el flag que dice si la carga del siguiente buffer es en memoria. El poner este flag a true hace que se
488
         * ponga a false el de readOnly autom?ticamente.
489
         * @param memory true si la siguiente carga de buffer se hace en memoria y false se deja decidir al dataset 
490
         * el tipo de buffer
491
         */
492
        public void setMemoryBuffer(boolean readOnly);
493
        
494
        /**
495
         * Obtiene el n?mero de overviews de una banda
496
         * @return N?mero de overviews del raster.
497
         */
498
        public int getOverviewCount(int band) throws BandAccessException, RasterDriverException;
499
        
500
        /**
501
         * Informa de si el dataset soporta overviews o no.
502
         * @return true si soporta overviews y false si no las soporta.
503
         */
504
        public boolean overviewsSupport();        
505
}