Revision 1800 org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileProvider.java
MultiFileProvider.java | ||
---|---|---|
37 | 37 |
import org.gvsig.fmap.dal.coverage.datastruct.BandList; |
38 | 38 |
import org.gvsig.fmap.dal.coverage.datastruct.Extent; |
39 | 39 |
import org.gvsig.fmap.dal.coverage.exception.BandAccessException; |
40 |
import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException; |
|
40 | 41 |
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException; |
41 | 42 |
import org.gvsig.fmap.dal.coverage.exception.FileNotSupportedException; |
42 | 43 |
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException; |
... | ... | |
66 | 67 |
import org.gvsig.raster.cache.tile.provider.TileListener; |
67 | 68 |
import org.gvsig.raster.cache.tile.provider.TileServer; |
68 | 69 |
import org.gvsig.raster.impl.buffer.DefaultRasterQuery; |
70 |
import org.gvsig.raster.impl.datastruct.BandListImpl; |
|
71 |
import org.gvsig.raster.impl.datastruct.DatasetBandImpl; |
|
69 | 72 |
import org.gvsig.raster.impl.datastruct.ExtentImpl; |
70 | 73 |
import org.gvsig.raster.impl.provider.DefaultRasterProvider; |
71 | 74 |
import org.gvsig.raster.impl.provider.RasterProvider; |
... | ... | |
696 | 699 |
|
697 | 700 |
DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery(); |
698 | 701 |
q.setAreaOfInterest(extent, bufWidth, bufHeight); |
699 |
q.setBandList(bandList); |
|
700 | 702 |
q.setBuffer(rasterBuf); |
701 | 703 |
q.setAdjustToExtent(adjustToExtent); |
702 | 704 |
|
703 | 705 |
for (int i = 0; i < providerList.size(); i++) { |
704 |
rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q); |
|
706 |
BandList bandListByFile = createBandListByProvider(bandList, providerList.get(i)); |
|
707 |
if(bandListByFile != null) { |
|
708 |
q.setBandList(bandListByFile); |
|
709 |
rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q); |
|
710 |
} |
|
705 | 711 |
} |
706 | 712 |
return rasterBuf; |
707 | 713 |
} |
714 |
|
|
715 |
/** |
|
716 |
* Creates a <code>BandList</code> for each provider of this <code>MuktiFileProvider</code>. |
|
717 |
* When a request is made, the <code>BandList</code> is global for all files. A specific |
|
718 |
* <code>BandList</code> has to be built for each provider. |
|
719 |
* @param globalBandList |
|
720 |
* @param provider |
|
721 |
* @return |
|
722 |
*/ |
|
723 |
private BandList createBandListByProvider(BandList globalBandList, RasterProvider provider) { |
|
724 |
BandList bandListByFile = new BandListImpl(); |
|
725 |
for (int i = 0; i < provider.getBandCount(); i++) { |
|
726 |
try { |
|
727 |
bandListByFile.addBand(new DatasetBandImpl(provider.getURI(), i, provider.getDataType()[0], provider.getBandCount()), i); |
|
728 |
} catch (BandNotFoundInListException e1) { |
|
729 |
} |
|
730 |
} |
|
731 |
|
|
732 |
boolean areThereBandsToDraw = false; |
|
733 |
for (int i = 0; i < provider.getBandCount(); i++) { |
|
734 |
int[] bandsToDrawByProviderBand = globalBandList.getBufferBandToDraw(provider.getURI(), i); |
|
735 |
if(bandsToDrawByProviderBand != null) { |
|
736 |
areThereBandsToDraw = true; |
|
737 |
for (int j = 0; j < bandsToDrawByProviderBand.length; j++) { |
|
738 |
bandListByFile.getBand(i).addPositionToDrawInBuffer(bandsToDrawByProviderBand[j]); |
|
739 |
} |
|
740 |
} |
|
741 |
} |
|
742 |
|
|
743 |
if(areThereBandsToDraw) |
|
744 |
return bandListByFile; |
|
745 |
return null; |
|
746 |
} |
|
708 | 747 |
|
709 | 748 |
/* |
710 | 749 |
* (non-Javadoc) |
Also available in: Unified diff