Statistics
| Revision:

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

History | View | Annotate | Download (13.5 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.properties.DatasetColorInterpretation;
26
import org.gvsig.raster.dataset.properties.DatasetListStatistics;
27
import org.gvsig.raster.datastruct.ColorTable;
28
import org.gvsig.raster.datastruct.Extent;
29
import org.gvsig.raster.datastruct.Transparency;
30
import org.gvsig.raster.hierarchy.IHistogramable;
31

    
32
/**
33
 * Interfaz que deben implementar cualquier fuente de datos raster. Estas pueden estar
34
 * compuestas por N datasets. B?sicamente hay dos fuentes que deben implementar este interfaz, 
35
 * MultiRasterDataset y CompositeDataset. La primera es un dataset compuesto por varios ficheros
36
 * con el mismo Extent de N bandas cada uno. MultiRasterDataset proporciona una encapsulaci?n al acceso
37
 * a datos de todos ellos. CompositeDataset es un dataset compuesto de N MultiRasterDatasets cuya extensi?n
38
 * es continua formando un Grid de datasets con continuidad espacial. IRasterDataSource proporciona
39
 * una visi?n de acceso a datos com?n para ambos.
40
 * 
41
 * @version 27/08/2007
42
 * @author Nacho Brodin (nachobrodin@gmail.com)
43
 *
44
 */
45
public interface IRasterDataSource extends IHistogramable{
46
                        
47
        /**
48
         * Obtiene el tipo de dato por banda
49
         * @return tipo de dato por banda
50
         */
51
        public int[] getDataType();
52
                
53
        /**
54
         * Obtiene la paleta correspondiente al nombre del fichero pasado por par?metro. 
55
         * @param fileName Nombre del fichero
56
         * @return Paleta o null si no la tiene
57
         */
58
        public ColorTable getColorTable(String fileName);
59
        
60
        /**
61
         * Obtiene el n?mero de bandas del raster
62
         * @return N?mero de bandas
63
         */
64
        public int getBandCount();
65
                
66
        /**
67
         * Obtiene la lista de bandas.
68
         * @return BandList
69
         */
70
        public BandList getBands();
71
                
72
        /**
73
         * Obtiene el n?mero de datasets con el extent completo del IRasterDataSource. El valor 
74
         * devuelto por esta llamada coincidir?a con el valor devuelto por getDatasetCount() de un
75
         * MultiRasterDataset que lo compone.
76
         * @return integer.
77
         */
78
        public int getDatasetCount();
79
        
80
        /**
81
         * Obtiene el extent de la ?ltima selecci?n hecha con alguna de las llamadas
82
         * setAreaOfInterest. Este extent es devuelto en coordenadas reales con las transformaciones
83
         * que se hayan aplicado sobre el/los dataset.
84
         * @return Extent Coordenadas reales que representan el ?ltimo ?rea de datos
85
         * solicitada.
86
         */
87
        public Extent getLastSelectedView();
88
        
89
        /**
90
         * Obtiene el dataset de la posici?n i. En un CompositeDataset devolver? la lista de 
91
         * todos los datasets en esa posici?n 
92
         * @param i Posici?n del dataset a obtener.
93
         * @return GeoRasterFileDataset.
94
         */
95
        public RasterDataset[] getDataset(int i);
96
        
97
        /**
98
         * Obtiene fichero de nombre fileName.
99
         * @param i Posici?n del dataset a obtener.
100
         * @return GeoRasterFile.
101
         */
102
        public RasterDataset getDataset(String fileName);
103
                
104
        /**
105
         * Elimina un fichero a la lista a partir de su nombre
106
         * @param fileName        Nombre del fichero a eliminar.
107
         */
108
        public void removeDataset(String fileName);
109
        
110
        /**
111
         * Elimina un fichero a la lista
112
         * @param file Fichero a eliminar
113
         */
114
        public void removeDataset(RasterDataset file);
115
                
116
        /**
117
         * A?ade un fichero a la lista de datasets a partir de su nombre. Si se trata de un multiRasterDataset
118
         * solo se necesita un fichero pero si es un CompositeDataset necesitaremos una lista de ellos. Tantos
119
         * como tenga el CompositeDataset 
120
         * @param f fichero a a?adir.
121
         * @throws RasterDriverException 
122
         */
123
        public void addDataset(RasterDataset[] f)throws FileNotFoundInListException;
124
        
125
        /**
126
         * A?ade un fichero a la lista de datasets a partir de su nombre. Si se trata de un multiRasterDataset
127
         * solo se necesita un fichero pero si es un CompositeDataset necesitaremos una lista de ellos. Tantos
128
         * como tenga el CompositeDataset 
129
         * @param f fichero a a?adir.
130
         * @throws RasterDriverException 
131
         */
132
        public void addDataset(String[] fileName)throws FileNotFoundInListException, NotSupportedExtensionException, RasterDriverException;
133
        
134
        /**
135
         * Obtiene la altura del raster.
136
         * @return altura
137
         */
138
        public double[] getHeight();
139

    
140
        /**
141
         * Obtiene la anchura del raster.
142
         * @return anchura
143
         */
144
        public double[] getWidth();
145
        
146
        /**
147
         * Cierra los raster asociados.
148
         */
149
        public void close();
150
        
151
        /**
152
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
153
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
154
         * pixeles de disco. 
155
         * @param x Posici?n X superior izquierda
156
         * @param y Posici?n Y superior izquierda
157
         * @param w Ancho en coordenadas reales
158
         * @param h Alto en coordenadas reales
159
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
160
         * @param bandList
161
         * @return Buffer de datos
162
         */
163
        public IBuffer getWindowRaster(double ulx, double uly, double lrx, double lry) throws InvalidSetViewException;
164
        
165
        /**
166
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
167
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
168
         * pixeles de disco. 
169
         * @param x Posici?n X superior izquierda
170
         * @param y Posici?n Y superior izquierda
171
         * @param w Ancho en coordenadas reales
172
         * @param h Alto en coordenadas reales
173
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
174
         * @param bandList
175
         * @return Buffer de datos
176
         */
177
        public IBuffer getWindowRaster(double ulx, double uly, double w, double h, boolean adjustToExtent) 
178
                throws InvalidSetViewException;
179
                
180
        /**
181
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
182
         * Aplica supersampleo o subsampleo en funci?n del tama?o del buffer. Esta operaci?n la gestiona
183
         * el driver.
184
         * @param minX Valor m?nimo de la X en coordenadas reales
185
         * @param minY Valor m?nimo de la Y en coordenadas reales
186
         * @param maxX Valor m?ximo de la X en coordenadas reales
187
         * @param maxY Valor m?ximo de la Y en coordenadas reales
188
         * @param bufWidth ancho del buffer lde datos
189
         * @param bufHeight alto del buffer de datos
190
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
191
         * @param bandList
192
         * @return Buffer de datos
193
         */
194
        public IBuffer getWindowRaster(double ulx, double uly, double lrx, double lry, 
195
                                                                        int bufWidth, int bufHeight, boolean adjustToExtent) throws InvalidSetViewException;
196
                
197
        
198
        /**
199
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
200
         * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
201
         * pixeles de disco. 
202
         * @param x Posici?n X superior izquierda
203
         * @param y Posici?n Y superior izquierda
204
         * @param w Ancho en coordenadas pixel
205
         * @param h Alto en coordenadas pixel
206
         * @param bandList
207
         * @return Buffer de datos
208
         */
209
        public IBuffer getWindowRaster(int x, int y, int w, int h) throws InvalidSetViewException;
210
                
211
        /**
212
         * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
213
         * Aplica supersampleo o subsampleo en funci?n del tama?o del buffer
214
         * @param x Posici?n X superior izquierda en pixels
215
         * @param y Posici?n Y superior izquierda en pixels
216
         * @param w Ancho en pixels
217
         * @param h Alto en pixels
218
         * @param bufWidth ancho del buffer de datos
219
         * @param bufHeight alto del buffer de datos
220
         * @param bandList
221
         * @return Buffer de datos
222
         */
223
        public IBuffer getWindowRaster(int x, int y, int w, int h, int bufWidth, int bufHeight) throws InvalidSetViewException ;
224
        
225
        /**
226
         * Obtiene el extent del raster.
227
         * @return Extent
228
         */
229
        public Extent getExtent();
230
        
231
        /**
232
         * Convierte un punto desde coordenadas pixel a coordenadas del mundo.
233
         * @param pt Punto a transformar
234
         * @return punto transformado en coordenadas del mundo
235
         */
236
        public Point2D rasterToWorld(Point2D pt);
237
        
238
        /**
239
         * Convierte un punto desde del mundo a coordenadas pixel.
240
         * @param pt Punto a transformar
241
         * @return punto transformado en coordenadas pixel
242
         */
243
        public Point2D worldToRaster(Point2D pt);
244
        
245
        /**
246
         * Obtiene el objeto con las estadisticas
247
         * @return MultiFileStatistics
248
         */
249
        public DatasetListStatistics getStatistics();
250
        
251
        /**
252
         * Obtiene el flag que dice si el raster est? o no georreferenciado
253
         * @return true si est? georreferenciado y false si no lo est?.
254
         */
255
        public boolean isGeoreferenced();
256
        
257
        /**
258
         * Obtiene el valor del raster en la coordenada que se le pasa.
259
         * El valor ser? Double, Int, Byte, etc. dependiendo del tipo de
260
         * raster.
261
         * @param x        coordenada X
262
         * @param y coordenada Y
263
         * @return
264
         */
265
        public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException;
266
        
267
                
268
        /**
269
         * Obtiene el objeto que contiene que contiene la interpretaci?n de 
270
         * color por banda para el dataset seleccionado
271
         * @param dataset Dataset del que se necesesita la informaci?n de color dentro del RasterMultiDataset
272
         * @return DatasetColorInterpretation
273
         */
274
        public DatasetColorInterpretation getColorInterpretation(int dataset);
275
        
276
        /**
277
         * Obtiene la proyecci?n asociada al raster. Como todos los dataset del 
278
         * multiDataset deben tener la misma proyecci?n obtenemos esta del primer
279
         * dataset.
280
         * @return Proyecci?n en formato cadena
281
         * @throws RasterDriverException
282
         */
283
        public String getWktProjection() throws RasterDriverException;
284
        
285
        /**
286
         * Metodo que obtiene si un punto cae dentro de los l?mites de la extensi?n de la fuente de 
287
         * datos raster o fuera de ellos.
288
         * @param p Punto a calcular
289
         * @return true si est? dentro de los l?mites y false si est? fuera
290
         */
291
        public boolean isInside(Point2D p); 
292
        
293
        /**
294
         * Recupera del raster la matriz de transformaci?n que lo situa en cualquier parte de la vista
295
         * @return AffineTransform
296
         */
297
        public AffineTransform getAffineTransform();
298
        
299
        /**
300
         * Asigna al raster la matriz de transformaci?n para situarlo en cualquier parte de la vista
301
         * @param transf
302
         */
303
        public void setAffineTransform(AffineTransform transf);
304
        
305
        /**
306
         * Consulta de si un raster tiene rotaci?n o no.
307
         * @return true si tiene rotaci?n y false si no la tiene.
308
         */
309
        public boolean isRotated();
310
        
311
        /**
312
         * Crea una copia del objeto IRasterDataSource
313
         * @return IRasterDataSource
314
         */
315
        public IRasterDataSource copy();
316
        
317
        /**
318
         * Dado unas coordenadas reales, un tama?o de buffer y un tama?o de raster. 
319
         * Si el buffer es de mayor tama?o que el raster (supersampleo) quiere decir que 
320
         * por cada pixel de buffer se repiten varios del raster. Esta funci?n calcula el 
321
         * n?mero de pixels de desplazamiento en X e Y que corresponden al primer pixel del
322
         * buffer en la esquina superior izquierda. Esto es necesario porque la coordenada
323
         * solicitada es real y puede no caer sobre un pixel completo. Este calculo es
324
         * util cuando un cliente quiere supersamplear sobre un buffer y que no se lo haga
325
         * el driver autom?ticamente.
326
         * @param dWorldTLX Coordenada real X superior izquierda
327
         * @param dWorldTLY Coordenada real Y superior izquierda
328
         * @param nWidth Ancho del raster
329
         * @param nHeight Alto del raster
330
         * @param bufWidth Ancho del buffer
331
         * @param bufHeight Alto del buffer
332
         * @return Array de dos elementos con el desplazamiento en X e Y. 
333
         */
334
        public int[] calcSteps(double dWorldTLX, double dWorldTLY, double dWorldBRX, double dWorldBRY,
335
                        double nWidth, double nHeight, int bufWidth, int bufHeight);
336
        
337
        /**
338
         * Obtiene en un array de String la lista de nombres de ficheros. 
339
         * @param i Columna para un CompositeDataset 
340
         * @param j Fila para un CompositeDataset
341
         * @return lista de nombres de los ficheros del GeoRasterMultiFile
342
         */
343
        public String[] getNameDatasetStringList(int i, int j);
344
        
345
        /**
346
         * Obtiene el estado de transparencia a partir de los estados de transparencia de todos
347
         * los ficheros que lo componen. Si varios de los ficheros que lo componen tienen banda de 
348
         * transparencia estas tendr?n que ser mezcladas sobre una banda de transparencia ?nica.
349
         * @return Objeto FileTransparency con el estado de transparencia
350
         */
351
        public Transparency getTransparencyFilesStatus();
352
        
353
        /**
354
         * Obtiene la lista de tablas de color correspondiente a todos los ficheros que forman el raster
355
         * @return Paleta asociada a este o null si no tiene. Una posici?n null en el array tambi?n indica que
356
         * para ese fichero no hay paletas asociadas.
357
         */
358
        public ColorTable[] getColorTables();
359
        
360
        /**
361
         * Salva la georreferenciaci?n a fichero rmf.
362
         * @param fName
363
         * @throws IOException  
364
         */
365
        public void saveGeoToRmf() throws IOException;
366
        
367
        /**
368
         * Escribe sobre el rmf todos los cambios que haya para salvar, es decir, para cada
369
         * Objeto registrado en el manager volcar? su contenido al fichero rmf.
370
         * @throws IOException
371
         */
372
        public void saveRmfModification() throws IOException;
373
        
374
        /**
375
         * Calcula el tama?o en byte de los raster.
376
         * @return tama?o en bytes de todos los ficheros de la lista
377
         */
378
        public long getFileSize();
379
}