Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / grid / GridReader.java @ 18355

History | View | Annotate | Download (8.45 KB)

1 10740 nacho
/* 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.grid;
20
21 11076 nacho
import org.gvsig.raster.buffer.BufferFactory;
22
import org.gvsig.raster.buffer.RasterBuffer;
23
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException;
24 16590 nbrodin
import org.gvsig.raster.buffer.RasterBufferInvalidException;
25 10939 nacho
import org.gvsig.raster.dataset.IBuffer;
26 10740 nacho
27
/**
28
 * Clase abstracta para lectura de datos de un grid. Esta puede ser creada a partir de
29 11076 nacho
 * una fuente de datos (BufferFactory) o a partir de un buffer de datos (RasterBuffer).
30 10740 nacho
 * Tiene las operaciones b?sicas de consulta.
31
 *
32
 * @author Nacho Brodin (nachobrodin@gmail.com)
33
 *
34
 */
35
public abstract class GridReader {
36
37 17686 nbrodin
        protected BufferFactory         bufferFactory = null;
38 10740 nacho
        protected RasterBuffer                 rasterBuf;
39
        protected int                                 dataType = IBuffer.TYPE_UNDEFINED;
40
        protected int[]                                bands = null;
41
        protected int                                bandToOperate = 0;
42
43
        /**
44
         * Extent de la ventana que corresponde al Grid
45
         */
46
        GridExtent windowExtent;
47
        /**
48
         * Extent completo de la capa
49
         */
50
        GridExtent layerExtent;
51
52
        /**
53
         * Crea un objeto lector a partir de un buffer de datos y el extent.
54
         * @param rb Buffer de datos
55
         * @param layerExtent extent de la capa completa
56
         * @param windowExtent Extent
57
         * @param bands N?mero de bandas del origen
58
         */
59
        public GridReader(        RasterBuffer rb,
60
                                                GridExtent layerExtent,
61
                                                GridExtent windowExtent,
62
                                                int[] bands){
63
                rasterBuf = rb;
64
                dataType = rb.getDataType();
65
                this.bands = bands;
66
                this.windowExtent = windowExtent;
67
                this.layerExtent = layerExtent;
68
        }
69
70
        /**
71
         * Crea un objeto lector a partir de una fuente de datos y el extent.
72
         * @param rb Buffer de datos
73
         * @param layerExtent extent de la capa completa
74
         * @param windowExtent Extent
75
         * @param bands N?mero de bandas del origen
76
         */
77 17686 nbrodin
        public GridReader(        BufferFactory bf,
78 10740 nacho
                                                GridExtent layerExtent,
79
                                                   GridExtent windowExtent,
80
                                                int[] bands){
81
82 17686 nbrodin
                bufferFactory = bf;
83
                rasterBuf = (RasterBuffer)bufferFactory.getRasterBuf();
84
                if(bufferFactory.getDataSource() != null && bufferFactory.getDataSource().getDataType() != null)
85
                        dataType = bufferFactory.getDataSource().getDataType()[0];
86 10740 nacho
                this.bands = bands;
87
                this.windowExtent = windowExtent;
88
                this.layerExtent = layerExtent;
89
        }
90
91
        /**
92
         * Obtiene el valor de tipo byte de una celda. La posici?n x e y de la celda a
93
         * recuperar est? definida en los par?metros
94
         * @param x Posici?n X del valor que queremos recuperar
95
         * @param y Posici?n Y del valor que queremos recuperar
96
         * @return Valor de tipo byte contenido en la posici?n especificada
97
         */
98 16590 nbrodin
        public abstract byte getCellValueAsByte(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
99 10740 nacho
100
        /**
101
         * Obtiene el valor de tipo short de una celda. La posici?n x e y de la celda a
102
         * recuperar est? definida en los par?metros
103
         * @param x Posici?n X del valor que queremos recuperar
104
         * @param y Posici?n Y del valor que queremos recuperar
105
         * @return Valor de tipo short contenido en la posici?n especificada
106
         */
107 16590 nbrodin
        public abstract short getCellValueAsShort(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
108 10740 nacho
109
        /**
110
         * Obtiene el valor de tipo int de una celda. La posici?n x e y de la celda a
111
         * recuperar est? definida en los par?metros
112
         * @param x Posici?n X del valor que queremos recuperar
113
         * @param y Posici?n Y del valor que queremos recuperar
114
         * @return Valor de tipo int contenido en la posici?n especificada
115
         */
116 16590 nbrodin
        public abstract int getCellValueAsInt(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
117 10740 nacho
118
        /**
119
         * Obtiene el valor de tipo float de una celda. La posici?n x e y de la celda a
120
         * recuperar est? definida en los par?metros
121
         * @param x Posici?n X del valor que queremos recuperar
122
         * @param y Posici?n Y del valor que queremos recuperar
123
         * @return Valor de tipo float contenido en la posici?n especificada
124
         */
125 16590 nbrodin
        public abstract float getCellValueAsFloat(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
126 10740 nacho
127
        /**
128
         * Obtiene el valor de tipo double de una celda. La posici?n x e y de la celda a
129
         * recuperar est? definida en los par?metros
130
         * @param x Posici?n X del valor que queremos recuperar
131
         * @param y Posici?n Y del valor que queremos recuperar
132
         * @return Valor de tipo double contenido en la posici?n especificada
133
         */
134 16590 nbrodin
        public abstract double getCellValueAsDouble(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
135 10740 nacho
136
        /**
137
         * Obtiene el valor de tipo byte de una celda en todas las bandas.
138
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros.
139
         * @param x Posici?n X del valor que queremos recuperar
140
         * @param y Posici?n Y del valor que queremos recuperar
141
         * @return Array de tipo byte con el contenido de las bandas en la posici?n especificada
142
         */
143 16590 nbrodin
        public abstract byte[] getBandsValuesAsByte(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException;
144 10740 nacho
145
        /**
146
         * Obtiene el valor de tipo short de una celda en todas las bandas.
147
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
148
         * @param x Posici?n X del valor que queremos recuperar
149
         * @param y Posici?n Y del valor que queremos recuperar
150
         * @return Array de tipo short con el contenido de las bandas en la posici?n especificada
151
         */
152 16590 nbrodin
        public abstract short[] getBandsValuesAsShort(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
153 10740 nacho
154
        /**
155
         * Obtiene el valor de tipo int de una celda en todas las bandas.
156
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
157
         * @param x Posici?n X del valor que queremos recuperar
158
         * @param y Posici?n Y del valor que queremos recuperar
159
         * @return Array de tipo int con el contenido de las bandas en la posici?n especificada
160
         */
161 16590 nbrodin
        public abstract int[] getBandsValuesAsInt(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
162 10740 nacho
163
        /**
164
         * Obtiene el valor de tipo float de una celda en todas las bandas.
165
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
166
         * @param x Posici?n X del valor que queremos recuperar
167
         * @param y Posici?n Y del valor que queremos recuperar
168
         * @return Array de tipo float con el contenido de las bandas en la posici?n especificada
169
         */
170 16590 nbrodin
        public abstract float[] getBandsValuesAsFloat(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
171 10740 nacho
172
        /**
173
         * Obtiene el valor de tipo double de una celda en todas las bandas.
174
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
175
         * @param x Posici?n X del valor que queremos recuperar
176
         * @param y Posici?n Y del valor que queremos recuperar
177
         * @return Array de tipo double con el contenido de las bandas en la posici?n especificada
178
         */
179 16590 nbrodin
        public abstract double[] getBandsValuesAsDouble(int x, int y)  throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
180 10740 nacho
181
        public boolean isNoDataValue (double dValue){
182
                return (dValue == rasterBuf.getNoDataValue());
183
        }
184
185
        public double getNoDataValue(){
186
                return rasterBuf.getNoDataValue();
187
        }
188
189
        public int getNY() {
190
                return windowExtent.getNY();
191
        }
192
193
        public int getNX() {
194
                return windowExtent.getNX();
195
        }
196
197
        public double getCellSize(){
198
                return windowExtent.getCellSize();
199
        }
200
201
        public GridExtent getGridExtent(){
202
                return windowExtent;
203
        }
204
205
        public boolean isCellInGrid(int iX, int iY){
206
                return (iX >= 0 && iX < getNX() && iY >= 0 && iY < getNY());
207
        }
208
209
        /**
210
         * Asigna la banda sobre la que se realizan las operaciones. Por defecto es la banda 0
211
         * con lo que para el uso de MDTs no habr? que modificar este valor.
212
         * @param band Banda sobre la que se realizan las operaciones.
213
         */
214
        public void setBandToOperate(int band){
215
                this.bandToOperate = band;
216
        }
217
}