Revision 10938 branches/v10/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java

View differences:

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