Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / dataaccess / IQueryableRaster.java @ 10960

History | View | Annotate | Download (8.99 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 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.dataaccess;
20

    
21
import org.gvsig.raster.dataaccess.buffer.RasterBuffer;
22
import org.gvsig.raster.dataset.IBuffer;
23
import org.gvsig.raster.dataset.RasterMultiDataset;
24
import org.gvsig.raster.dataset.properties.DatasetPalette;
25
import org.gvsig.raster.shared.Extent;
26

    
27

    
28
/**
29
 * Interfaz que deben implementar las clases que sirven datos y tienen posibilidad
30
 * de consulta. Tipicamente en gvSIG es implementado por DataSource que ofrecer?
31
 * sus datos a trav?s de un RasterBuffer y su interfaz IBuffer.
32
 * 
33
 * @author Nacho Brodin (nachobrodin@gmail.com)
34
 *
35
 */
36
public interface IQueryableRaster {          
37
        public final static int INTERPOLATION_Undefined                        = 0;
38
        public final static int INTERPOLATION_NearestNeighbour        = 1;
39
        public final static int INTERPOLATION_Bilinear                        = 2;
40
        public final static int INTERPOLATION_InverseDistance        = 3;
41
        public final static int INTERPOLATION_BicubicSpline                = 4;
42
        public final static int INTERPOLATION_BSpline                        = 5;
43

    
44
        /**
45
         * Obtiene el ancho de la imagen
46
         * @return  Ancho en pixeles de la imagen
47
         */
48
        public int getWidth();
49
        
50
        /**
51
         * Obtiene el alto de la imagen
52
         * @return  Alto en pixeles de la imagen
53
         */
54
        public int getHeight();
55
        
56
        /**
57
         * Tama?o de celda en X
58
         * @return 
59
         */
60
        public double getXCellSize();
61
        
62
        /**
63
         * Tama?o de celda en Y
64
         * @return
65
         */
66
        public double getYCellSize();
67
        
68
        /**
69
         * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
70
         * estas coordenadas son ajustadas el extent.
71
         * @param x Coordenada X, esquina superior izquierda
72
         * @param y Coordenada Y, esquina superior izquierda
73
         * @param w Ancho del ?rea 
74
         * @param h Alto del ?rea
75
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no.
76
         * @throws ArrayIndexOutOfBoundsException
77
         */
78
        public void setAreaOfInterest(double x, double y, double w, double h, boolean adjustToExtent) throws ArrayIndexOutOfBoundsException;
79
        
80
        /**
81
         * Asigna el ?rea de interes en coordenadas pixel. Si las coordenadas exceden del tama?o de la imagen
82
         * lanza una excepci?n.
83
         * @param x Coordenada X, esquina superior izquierda
84
         * @param y Coordenada Y, esquina superior izquierda
85
         * @param w Ancho del ?rea 
86
         * @param h Alto del ?rea
87
         * @throws ArrayIndexOutOfBoundsException
88
         */
89
        public void setAreaOfInterest(int x, int y, int w, int h) throws ArrayIndexOutOfBoundsException;
90
        
91
        /**
92
         * Asigna el ?rea de inter?s a toda la extensi?n del raster.
93
         */
94
        public void setAreaOfInterest();
95
        
96
        /**
97
         * Asigna el ?rea de interes en coordenadas pixel. Esta operaci?n cargar? un RasterBuffer con los datos solicitados por
98
         * lo que, si al acabar hacemos getRasterBuf obtendremos la matriz de datos. Si las coordenadas exceden del tama?o 
99
         * de la imagen lanza una excepci?n.
100
         * @param x Coordenada X, esquina superior izquierda
101
         * @param y Coordenada Y, esquina superior izquierda
102
         * @param w Ancho del ?rea 
103
         * @param h Alto del ?rea
104
         * @param bufWidth Ancho del buffer
105
         * @param bufHeight Alto del buffer
106
         * @throws ArrayIndexOutOfBoundsException
107
         */
108
        public void setAreaOfInterest(int x, int y, int w, int h, int bufWidth, int bufHeight) throws ArrayIndexOutOfBoundsException;
109
        
110
        /**
111
         * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
112
         * estas coordenadas son ajustadas el extent.
113
         * @param x Coordenada X, esquina superior izquierda
114
         * @param y Coordenada Y, esquina superior izquierda
115
         * @param w Ancho del ?rea 
116
         * @param h Alto del ?rea
117
         * @param bufWidth Ancho del buffer
118
         * @param bufHeight Alto del buffer
119
         * @param adjustToExtent Flag que dice si el extent solicitado debe ajustarse al extent del raster o no. 
120
         * @return En caso de que el buffer sea mayor que el tama?o seleccionado de raster se produce supersampleo. La funci?n devuelve
121
         * un array de dos elementos que representan el desplazamiento en pixels de X e Y de la esquina superior izquierda. 
122
         * @throws ArrayIndexOutOfBoundsException
123
         */
124
        public int[] setAreaOfInterest(double minX, double minY, double maxX, double maxY, int bufWidth, int bufHeight, boolean adjustToExtent) throws ArrayIndexOutOfBoundsException;
125
        
126
        /**
127
         * Obtiene un buffer desde la posici?n x,y en pixeles de ancho w y alto h
128
         * @param x Coordenada x de la esquina superior izquierda
129
         * @param y Coordenada y de la esquina superior izquierda
130
         * @param w Ancho del grid
131
         * @param h Alto del grid
132
         * @return Buffer de datos
133
         */
134
        public RasterBuffer getData(int x, int y, int w, int h);
135
        
136
        /**
137
         * Devuelve el tipo de datos del raster
138
         * @see java.awt.image.DataBuffer
139
         */
140
        public int getDataType();
141

    
142
        /**
143
         * Asigna tipo de datos del raster
144
         * @see java.awt.image.DataBuffer
145
         */
146
        public void setDataType(int dt);
147

    
148
        /**
149
         * Devuelve true si la celda contiene un valor de NODATA
150
         * @param x        coordenada X
151
         * @param y coordenada Y
152
         * @return
153
         */
154
        public boolean isNoData(int x, int y, int band);
155
        
156
        /**
157
         * Obtiene el n?mero de bandas
158
         * @return N?mero de bandas
159
         */
160
        public int getBandCount();
161
        
162
        /**
163
         * Obtiene el buffer de datos del grid
164
         * @return RasterBuf
165
         */
166
        public IBuffer getRasterBuf();
167
        
168
        /**
169
         * Para este GeoRasterFile asigna que bandas se pintaran
170
         * sobre el RasterBuf cuando se haga un update. Cada posici?n del vector es una banda
171
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
172
         * sobre ese RasterBuf.
173
         * @param drawableBands        Array con las bandas a dibujar.
174
         * @return array con tantos elementos como bandas a dibujar. El valor contenido es el fichero del 
175
         * dataset multifichero al que corresponde la banda.
176
         */
177
        public int[] addDrawableBands(int[] drawableBands);
178
        
179
        /**
180
         * Para este GeoRasterFile asigna que bandas se pintaran
181
         * sobre el RasterBuf cuando se haga un update. Cada posici?n del vector es una banda
182
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
183
         * sobre ese RasterBuf. Esta llamada asigna todas las bandas dibujables en su orden natural.
184
         * @return array con tantos elementos como bandas a dibujar. El valor contenido es el fichero del 
185
         * dataset multifichero al que corresponde la banda.
186
         */
187
        public int[] setAllDrawableBands();
188
        
189
        /**
190
         * Obtiene el array que contiene el orden de bandas. Cada posici?n del vector es una banda
191
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
192
         * sobre ese RasterBuf.
193
         * @return Array de enteros con el orden de las badas
194
         */
195
        public int[] getDrawableBands();
196
        
197
        /**
198
         * Obtiene el extent de la fuente de datos
199
         * @return Extent
200
         */
201
        public Extent getExtent();
202
        
203
        /**
204
         * Obtiene el extent correspondiente a los datos cargados en el buffer
205
         * @return Extent
206
         */
207
        public Extent getDataExtent();
208
        
209
        /**
210
         * Obtiene las coordenadas del fichero worldFile (o cabecera del raster) asociado 
211
         * o el RMF en caso de que existan. Si la imagen no est? georreferenciada tendr?
212
         * las coordenadas pixel de la misma 
213
         * @return Array de seis valores:
214
         *         <TABLE BORDER="1">
215
         *         <TR><TD><B>0:</B></TD><TD>Valor X de la esquina superior izquierda.</TD></TR>
216
         *         <TR><TD><B>1:</B></TD><TD>Tama?o de pixel en X.</TD></TR>
217
         *         <TR><TD><B>2:</B></TD><TD>Shearing en X.</TD></TR>
218
         *         <TR><TD><B>3:</B></TD><TD>Valor Y de la esquina superior izquierda.</TD></TR>
219
         *         <TR><TD><B>4:</B></TD><TD>Shearing en Y.</TD></TR>
220
         *         <TR><TD><B>5:</B></TD><TD>Tama?o de pixel en Y.</TD></TR>
221
         *         </TABLE>
222
         */
223
        public double[] getCoordsGeoTransformFile();
224
        
225
        /**
226
         * Obtiene el extent de la ?ltima selecci?n hecha con alguna de las llamadas
227
         * setAreaOfInterest. Este extent es devuelto en coordenadas reales con las transformaciones
228
         * que se hayan aplicado sobre el/los dataset.
229
         * @return Extent Coordenadas reales que representan el ?ltimo ?rea de datos
230
         * solicitada.
231
         */
232
        public Extent getLastSelectedView();
233
        
234
        /**
235
         * Obtiene la estructura que contiene la lista de ficheros del Grid
236
         * @return GeoRasterMultiFile
237
         */
238
        public RasterMultiDataset getGeoRasterMultiFile();
239
        
240
        /**
241
         * Obtiene la lista de paletas asociadas a las bandas cargadas en el DataSource
242
         * @return Lista con las paletas o null si no hay ninguna asocida. Un nulo en una
243
         * posici?n del array tambi?n indicar? que para esa banda no hay paletas asociadas.
244
         */
245
        public DatasetPalette[] getPalettes();
246
        
247
}