Statistics
| Revision:

gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.api / src / main / java / org / gvsig / fmap / dal / coverage / store / RasterQuery.java @ 859

History | View | Annotate | Download (11.1 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.fmap.dal.coverage.store;
23

    
24
import org.gvsig.fmap.dal.DataQuery;
25
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
26
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
27
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
28
import org.gvsig.raster.cache.tile.provider.CacheStruct;
29
import org.gvsig.raster.cache.tile.provider.TileListener;
30
import org.gvsig.timesupport.Time;
31

    
32
/**
33
 * Interfaz que contiene las operaciones que debe soportar la carga de datos
34
 * raster en un buffer.
35
 * @author Nacho Brodin (nachobrodin@gmail.com)
36
 */
37
public interface RasterQuery extends DataQuery {
38
        
39
        /**
40
         * Sets the frame width. This parameter is take into 
41
         * account only when the request is tiled and this characteristic is
42
         * supported.
43
         * @param n
44
         */
45
        public void setFrameWidth(int n);
46
        
47
        /**
48
         * Sets the number of the alpha band. This parameter is take into 
49
         * account only when the request is made using TileListener. In this case
50
         * the parameter transparencyBuffer in nextBuffer method will have the right
51
         * data.
52
         * @param bandNumber
53
         */
54
        public void setAlphaBand(int bandNumber);
55
        
56
        /**
57
         * The user can told if the buffer will be stored or not in the RasterDatasource.
58
         * @param store
59
         */
60
        public void storeLastBuffer(boolean store);
61
        
62
        /**
63
         * Asigna el flag que ajusta el extent de la petici?n al del raster. Si est? a
64
         * true en caso de que el extent de la petici?n sea mayor lo ajustar? a los limites
65
         * de este. Si est? a false no lo ajustar? rellenando los valores con NoData
66
         * @param adjustToExtent true para ajustar y false si no queremos que lo haga. Por defecto
67
         * estar? a true.
68
         */
69
        public void setAdjustToExtent(boolean adjustToExtent);
70
        
71
        /**
72
         * Obtiene el flag que ajusta el extent de la petici?n al del raster. Si est? a
73
         * true en caso de que el extent de la petici?n sea mayor lo ajustar? a los limites
74
         * de este. Si est? a false no lo ajustar? rellenando los valores con NoData. Por defecto
75
         * estar? a true.
76
         * @return true si ajusta y false si no lo hace
77
         */
78
        public boolean isAdjustToExtent();
79
        
80
        /**
81
         * Para este GeoRasterFile asigna que bandas se pintaran
82
         * sobre el RasterBuf cuando se haga un update. Cada posici?n del vector es una banda
83
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
84
         * sobre ese RasterBuf.
85
         * @param drawableBands        Array con las bandas a dibujar.
86
         * @return array con tantos elementos como bandas a dibujar. El valor contenido es el fichero del
87
         * dataset multifichero al que corresponde la banda.
88
         */
89
        public void setDrawableBands(int[] drawableBands);
90
        
91
        /**
92
         * Para este GeoRasterFile asigna que bandas se pintaran
93
         * sobre el RasterBuf cuando se haga un update. Cada posici?n del vector es una banda
94
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
95
         * sobre ese RasterBuf. Esta llamada asigna todas las bandas dibujables en su orden natural.
96
         * @return array con tantos elementos como bandas a dibujar. El valor contenido es el fichero del
97
         * dataset multifichero al que corresponde la banda.
98
         */
99
        public void setAllDrawableBands();
100
        
101
        /**
102
         * Obtiene el array que contiene el orden de bandas. Cada posici?n del vector es una banda
103
         * del rasterBuf y el contenido de esa posici?n es la banda de la imagen que se dibujar?
104
         * sobre ese RasterBuf.
105
         * @return Array de enteros con el orden de las badas
106
         */
107
        public int[] getDrawableBands();
108
        
109
        /**
110
         * Asigna el flag que dice si la carga del siguiente buffer es de solo lectura o lectura/escritura.
111
         * La asignaci?n del flag de solo lectura a true debe hacerse para cada consulta.
112
         * @param readOnly true si la siguiente carga de buffer se hace de solo lectura y false si es de lectura/escritura
113
         */
114
        public void setReadOnly(boolean readOnly);
115
        
116
        /**
117
         * Asigna el flag que dice si la carga del siguiente buffer es en memoria
118
         * @param memory true si la siguiente carga de buffer se hace en memoria y false se deja decidir al dataset 
119
         * el tipo de buffer
120
         */
121
        public void setMemoryBuffer(boolean readOnly);
122
        
123
        /**
124
         * Asigna el valor noData con el que se rellenan las celdas cuando se hace una petici?n
125
         * en la que no se quiere que se ajuste al ?rea del raster. Por defecto noData tendr? el valor
126
         * que aparece en IBuffer.
127
         * @param noData
128
         */
129
        public void setNoDataToFill(NoData noData);
130
        
131
        /**
132
         * Consulta el flag de supersampleo en la carga del buffer.
133
         * <P>
134
         * Si este flag es false
135
         * y pasamos un buffer de tama?o mayor que el n?mero de pixels del ?rea requerida en la
136
         * llamada setAreaOfInterest entonces se ajustar? este buffer al n?mero de pixeles contenidos
137
         * en el ?rea.
138
         * </P>
139
         * <P>
140
         * Por ejemplo, si solicitamos un ?rea de 5x4 pixels de un raster y pedimos que nos los grabe
141
         * en un buffer de 500x400, si esta variable es false el buffer lo generar? de 5x4. Si esta
142
         * variable es true el buffer lo generar? de 500x400.
143
         * </P>
144
         *
145
         * @return true si el supersampleo en la carga del buffer est? activado y false si no lo est?.
146
         */
147
        public boolean isSupersamplingLoadingBuffer();
148
        
149
        /**
150
         * Returns true if the buffer is not writable
151
         * @return
152
         */
153
        public boolean isReadOnly();
154
        
155
        /**
156
         * Gets the time information of the viewport requested
157
         * @return
158
         */
159
        public Time getTime();
160

    
161
        /**
162
         * Sets the time information of the viewport requested
163
         * @return
164
         */
165
        public void setTime(Time time);
166

    
167
        /**
168
         * Activa o desactiva el supersampling en la carga del buffer.
169
         * <P>
170
         * Si este flag es false
171
         * y pasamos un buffer de tama?o mayor que el n?mero de pixels del ?rea requerida en la
172
         * llamada setAreaOfInterest entonces se ajustar? este buffer al n?mero de pixeles contenidos
173
         * en el ?rea.
174
         * </P>
175
         * <P>
176
         * Por ejemplo, si solicitamos un ?rea de 5x4 pixels de un raster y pedimos que nos los grabe
177
         * en un buffer de 500x400, si esta variable es false el buffer lo generar? de 5x4. Si esta
178
         * variable es true el buffer lo generar? de 500x400.
179
         * </P>
180
         *
181
         * @param supersamplingLoadingBuffer true o false para activar o desactivar el supersampling en la
182
         * carga del buffer.
183
         */
184
        public void setSupersamplingLoadingBuffer(boolean supersamplingLoadingBuffer);
185
        
186
        /**
187
         * Asigna el ?rea de interes en coordenadas del mundo real. 
188
         * Si las coordenadas exceden del tama?o de la imagen estas coordenadas son ajustadas el extent.
189
         * @param x Coordenada X, esquina superior izquierda
190
         * @param y Coordenada Y, esquina superior izquierda
191
         * @param w Ancho del ?rea
192
         * @param h Alto del ?rea
193
         */
194
        public void setAreaOfInterest(double x, double y, double w, double h);
195
        
196
        /**
197
         * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
198
         * estas coordenadas son ajustadas el extent. Si la petici?n es tileada se har? una llamada al listener cada vez
199
         * que se reciba un tile.
200
         * @param x Coordenada X, esquina superior izquierda
201
         * @param y Coordenada Y, esquina superior izquierda
202
         * @param w Ancho del ?rea
203
         * @param h Alto del ?rea
204
         * @param bufWidth Ancho del buffer
205
         * @param bufHeight Alto del buffer
206
         * @param listener Este listener es usado para recibir tiles. Cada vez que se recibe uno se har? una llamada.
207
         * @return En caso de que el buffer sea mayor que el tama?o seleccionado de raster se produce supersampleo. La funci?n devuelve
208
         * un array de dos elementos que representan el desplazamiento en pixels de X e Y de la esquina superior izquierda.
209
         */
210
        public void setAreaOfInterest(Extent bbox, int bufWidth, int bufHeight, TileListener listener);
211
        
212
        /**
213
         * Asigna el ?rea de interes en coordenadas del mundo real. 
214
         * Si las coordenadas exceden del tama?o de la imagen estas coordenadas son ajustadas el extent.
215
         * Este es el m?todo que se gasta para dibujado. Aunque se ajusten las coordenadas reales el tama?o de buffer ser
216
         * respeta. Si el supersamplig est? desactivado entonces cuando el zoom es mayor que 1:1 modifica el tama?o de buffer
217
         * devolviendo un pixel buffer en un pixel de imagen. El buffer resultante ser? menor que el pedido. Esto es as? porque
218
         * hay proveedores que no supersamplean y porque el dibujado se encarga de supersamplear.  
219
         * @param x Coordenada X, esquina superior izquierda
220
         * @param y Coordenada Y, esquina superior izquierda
221
         * @param w Ancho del ?rea
222
         * @param h Alto del ?rea
223
         * @param bufWidth Ancho del buffer
224
         * @param bufHeight Alto del buffer
225
         * @return En caso de que el buffer sea mayor que el tama?o seleccionado de raster se produce supersampleo. La funci?n devuelve
226
         * un array de dos elementos que representan el desplazamiento en pixels de X e Y de la esquina superior izquierda.
227
         * @throws ArrayIndexOutOfBoundsException
228
         * @throws InvalidSetViewException 
229
         */
230
        public void setAreaOfInterest(Extent bbox, int bufWidth, int bufHeight);
231
        
232
        /**
233
         * Asigna el ?rea de interes en coordenadas pixel. Si las coordenadas exceden del tama?o de la imagen
234
         * lanza una excepci?n.
235
         * @param x Coordenada X, esquina superior izquierda
236
         * @param y Coordenada Y, esquina superior izquierda
237
         * @param w Ancho del ?rea
238
         * @param h Alto del ?rea
239
         * @throws InvalidSetViewException  
240
         * @throws ArrayIndexOutOfBoundsException
241
         */
242
        public void setAreaOfInterest(int x, int y, int w, int h);
243
        
244
        /**
245
         * Asigna el ?rea de inter?s a toda la extensi?n del raster.
246
         */
247
        public void setAreaOfInterest();
248
        
249
        /**
250
         * Asigna el ?rea de interes en coordenadas pixel. Esta operaci?n cargar? un RasterBuffer con los datos solicitados por
251
         * lo que, si al acabar hacemos getRasterBuf obtendremos la matriz de datos. Si las coordenadas exceden del tama?o
252
         * de la imagen lanza una excepci?n.
253
         * @param x Coordenada X, esquina superior izquierda
254
         * @param y Coordenada Y, esquina superior izquierda
255
         * @param w Ancho del ?rea
256
         * @param h Alto del ?rea
257
         * @param bufWidth Ancho del buffer
258
         * @param bufHeight Alto del buffer
259
         * @throws ArrayIndexOutOfBoundsException
260
         */
261
        public void setAreaOfInterest(int x, int y, int w, int h, int bufWidth, int bufHeight);
262
        
263
        /**
264
         * Parameters to make a tile request.
265
         * @param level
266
         *        Resolution level 
267
         * @param tileCol 
268
         *        Tile column in the matrix of its level
269
         * @param tileRow
270
         *        Tile row in the matrix of its level
271
         * @param extent
272
         *        Bounding box of the requested tile
273
         * @param cacheStruct
274
         *        Cache structure force by the client
275
         */
276
        public void setTileParameters(int level, int tileCol, int tileRow, Extent extent, CacheStruct cacheStruct);
277
}