Revision 13393 trunk/libraries/libRaster/src/org/gvsig/raster/dataset/CompositeDataset.java
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