Revision 13393 trunk/libraries/libRaster/src/org/gvsig/raster/dataset/CompositeDataset.java

View differences:

CompositeDataset.java
19 19
package org.gvsig.raster.dataset;
20 20

  
21 21
import java.awt.geom.AffineTransform;
22
import java.awt.geom.NoninvertibleTransformException;
22 23
import java.awt.geom.Point2D;
23 24
import java.io.IOException;
24 25

  
26
import org.cresques.cts.IProjection;
25 27
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation;
26 28
import org.gvsig.raster.dataset.properties.DatasetListStatistics;
27 29
import org.gvsig.raster.datastruct.ColorTable;
......
85 87
			throw new MosaicNotValidException("Extends no validos para montar un mosaico");
86 88
		}
87 89
	}
90
	
91
	/**
92
	 * Abre un dataset pasando como par?metros la proyecci?n y un objeto identificador del dataset. Este
93
	 * objeto puede ser una ruta a un fichero en disco. En este caso la extensi?n del fichero servir? para 
94
	 * buscar el driver que lo gestiona. Si proporcionamos un array de cadenas se tratar?n como la ruta a N ficheros
95
	 * de disco. Tambi?n puede ser un buffer de datos en memoria o cualquier otro objeto
96
	 * que pueda aceptar un driver.  
97
	 * @param proj PRoyecci?n
98
	 * @param datasetOpenParam Par?metros al driver
99
	 * @return RasterMultiDatset
100
	 * @throws NotSupportedExtensionException
101
	 * @throws RasterDriverException
102
	 */
103
	public static CompositeDataset open(IProjection proj, Object datasetOpenParam) throws NotSupportedExtensionException, RasterDriverException {
104
		if(datasetOpenParam instanceof String[][]) {
105
			String[][] param = (String[][])datasetOpenParam;
106
			MultiRasterDataset[][][] mosaic = new MultiRasterDataset[1][param.length][param[0].length];
107
			for (int i = 0; i < param.length; i++) {
108
				for (int j = 0; j < param[i].length; j++) 
109
					mosaic[0][i][j] = MultiRasterDataset.open(proj, param[i][j]);
110
			}
111
			CompositeDataset cd;
112
			try {
113
				cd = new CompositeDataset(mosaic);
114
			} catch (MosaicNotValidException e) {
115
				return null;
116
			}
117
			return cd;
118
		}
119
		return null;
120
	}
88 121

  
89 122
	/**
90 123
	 * Valida que los extends del mosaico sean validos, es decir, que sean correlativos
......
259 292
	 * @see org.gvsig.raster.dataset.IRasterDataSource#getExtent()
260 293
	 */
261 294
	public Extent getExtent() {
262
		int k = mosaic.length;
263 295
		int n = mosaic[0].length;
264 296
		int m = mosaic[0][0].length;
265 297
		if(mosaic != null && mosaic[0][0][0] != null) {
......
364 396
	 * Obtiene el dataset cuyas coordenadas contienen el punto pasado por par?meto
365 397
	 * @param x Coordenada X a comprobar
366 398
	 * @param y Coordenada Y a comprobar
367
	 * @return MultiRasterDataset cuyas coordenadas contienen el punto pasado por par?meto
399
	 * @return Point2D Posici?n del MultiRasterDataset dentro del mosaico
368 400
	 */
369 401
	private Point2D getDatasetByCoords(double x, double y) {
370 402
		int k = mosaic.length;
......
373 405
		for (int level = 0; level < k; level++) {
374 406
			for (int row = 0; row < n; row++) {
375 407
				for (int col = 0; col < m; col++) {
376
					if(RasterUtilities.isInside(new Point2D.Double(x, y), mosaic[level][row][col].getExtent())) 
408
					if(RasterUtilities.isInside(new Point2D.Double(x, y), 
409
												mosaic[level][row][col].getExtent(), 
410
												mosaic[level][row][col].getAffineTransform())) 
377 411
						return new Point2D.Double(row, col);
378 412
				}
379 413
			}
380 414
		}
381 415
		return null;
382 416
	}
417

  
418
	/*
419
	 * (non-Javadoc)
420
	 * @see org.gvsig.raster.dataset.IRasterDataSource#isInside(java.awt.geom.Point2D)
421
	 */
422
	public boolean isInside(Point2D p) {
423
		return RasterUtilities.isInside(p, getExtent(), getAffineTransform());
424
	}
425

  
426
	/*
427
	 * (non-Javadoc)
428
	 * @see org.gvsig.raster.dataset.IRasterDataSource#rasterToWorld(java.awt.geom.Point2D)
429
	 */
430
	public Point2D rasterToWorld(Point2D pt) {
431
		Point2D p = new Point2D.Double();
432
		getAffineTransform().transform(pt, p);
433
		return p;
434
	}
383 435
	
436
	/*
437
	 * (non-Javadoc)
438
	 * @see org.gvsig.raster.dataset.IRasterDataSource#worldToRaster(java.awt.geom.Point2D)
439
	 */
440
	public Point2D worldToRaster(Point2D pt) {
441
		Point2D p = new Point2D.Double();
442
		try {
443
			getAffineTransform().inverseTransform(pt, p);
444
		} catch (NoninvertibleTransformException e) {
445
			return pt;
446
		}
447
		return p;
448
	}
449

  
450
	/*
451
	 * (non-Javadoc)
452
	 * @see org.gvsig.raster.dataset.IRasterDataSource#isRotated()
453
	 */
454
	public boolean isRotated() {
455
		if(getAffineTransform().getShearX() != 0 || getAffineTransform().getShearY() != 0)
456
			return true;
457
		return false;
458
	}
459

  
460
	/*
461
	 * (non-Javadoc)
462
	 * @see org.gvsig.raster.dataset.IRasterDataSource#isGeoreferenced()
463
	 */
464
	public boolean isGeoreferenced() {
465
		//Este tipo de datasets siempre est? georreferenciado
466
		return true;
467
	}
468
	
384 469
	public BandList getBands() {
385 470
		return null;
386 471
	}
......
451 536
		return null;
452 537
	}
453 538

  
454
	public boolean isGeoreferenced() {
455
		return false;
456
	}
457

  
458
	public boolean isInside(Point2D p) {
459
		return false;
460
	}
461

  
462
	public boolean isRotated() {
463
		return false;
464
	}
465

  
466
	public Point2D rasterToWorld(Point2D pt) {
467
		return null;
468
	}
469

  
470 539
	public void removeDataset(String fileName) {
471 540
	}
472 541

  
......
482 551
	public void setAffineTransform(AffineTransform transf) {
483 552
	}
484 553

  
485
	public Point2D worldToRaster(Point2D pt) {
486
		return null;
487
	}
488

  
554
	
489 555
	public Histogram getHistogram() throws HistogramException {
490 556
		return null;
491 557
	}

Also available in: Unified diff