Revision 10938 branches/v10/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java
Grid.java | ||
---|---|---|
202 | 202 |
public int[] setAreaOfInterest(double minX, double minY, double maxX, double maxY, int bufWidth, int bufHeight) throws ArrayIndexOutOfBoundsException{ |
203 | 203 |
//TODO: VALIDACI?N: Comprobaci?n de exceso de memoria reservada |
204 | 204 |
dataExtent = new Extent(minX, minY, maxX, maxY); |
205 |
dataExtent = Utilities.calculateAdjustedView(dataExtent, grmf.getExtent());
|
|
205 |
Extent fitExtent = Utilities.calculateAdjustedView(dataExtent, grmf.getExtent());
|
|
206 | 206 |
|
207 |
rasterBuf = grmf.getWindowRaster(minX, minY, maxX, maxY, bufWidth, bufHeight); |
|
207 |
//Caso en que la extensi?n pedida SI se sale fuera del ?rea del raster |
|
208 |
//El pixel a medias entre NoData y datos se pone NoData |
|
209 |
if(!Utilities.isInside(dataExtent, fitExtent)){ |
|
210 |
//Upper Left |
|
211 |
double distWcX = Math.abs(fitExtent.getMin().getX() - dataExtent.getMin().getX()); |
|
212 |
double distWcY = Math.abs(fitExtent.getMax().getY() - dataExtent.getMax().getY()); |
|
213 |
//Pixel inicial del buffer donde se empieza a dibujar. Redondeamos por arriba pq lo que sobra se pone NoData |
|
214 |
double initPxX = Math.ceil((distWcX * bufWidth) / (Math.abs(maxX - minX))); |
|
215 |
double initPxY = Math.ceil((distWcY * bufHeight) / (Math.abs(maxY - minY))); |
|
216 |
//Obtenemos la coordenada real para el pixel inicial |
|
217 |
double wcXInit = (initPxX * (Math.abs(maxX - minX))) / bufWidth; |
|
218 |
double wcYInit = (initPxY * (Math.abs(maxY - minY))) / bufHeight; |
|
219 |
|
|
220 |
//Lower Right |
|
221 |
distWcX = Math.abs(fitExtent.getMax().getX() - dataExtent.getMin().getX()); |
|
222 |
distWcY = Math.abs(fitExtent.getMin().getY() - dataExtent.getMax().getY()); |
|
223 |
//Pixel final del buffer donde se dibuja. Redondeamos por abajo pq lo que sobra se pone NoData |
|
224 |
double endPxX = Math.floor((distWcX * bufWidth) / (Math.abs(maxX - minX))); |
|
225 |
double endPxY = Math.floor((distWcY * bufHeight) / (Math.abs(maxY - minY))); |
|
226 |
//Obtenemos la coordenada real para el pixel |
|
227 |
double wcXEnd = (endPxX * (Math.abs(maxX - minX))) / bufWidth; |
|
228 |
double wcYEnd = (endPxY * (Math.abs(maxY - minY))) / bufHeight; |
|
229 |
|
|
230 |
rasterBuf = grmf.getWindowRaster(wcXInit, wcYInit, wcXEnd, wcYEnd, (int)Math.abs(endPxX - initPxX), (int)Math.abs(endPxY - initPxY)); |
|
231 |
|
|
232 |
RasterBuf buf = new RasterBuf(rasterBuf.getDataType(), bufWidth, bufHeight, rasterBuf.getBandCount(), true); |
|
233 |
buf.setToNoData(); |
|
234 |
for (int iBand = 0; iBand < rasterBuf.getBandCount(); iBand++) |
|
235 |
for (int row = 0; row < rasterBuf.getHeight(); row++) |
|
236 |
for (int col = 0; col < rasterBuf.getWidth(); col++) |
|
237 |
buf.setElemByte((int)(row + initPxY), (int)(col + initPxX), |
|
238 |
iBand, |
|
239 |
rasterBuf.getElemByte(row, col, iBand)); |
|
240 |
rasterBuf = buf; |
|
241 |
return null; |
|
242 |
|
|
243 |
} |
|
244 |
|
|
245 |
//Caso en que la extensi?n pedida NO se sale fuera del ?rea del raster |
|
246 |
rasterBuf = grmf.getWindowRaster(fitExtent.minX(), fitExtent.maxY(), fitExtent.width(), fitExtent.height(), bufWidth, bufHeight); |
|
208 | 247 |
return null; |
209 | 248 |
} |
210 | 249 |
|
Also available in: Unified diff