Revision 13546 trunk/extensions/extWMS/src/com/iver/cit/gvsig/fmap/layers/FLyrWMS.java
FLyrWMS.java | ||
---|---|---|
76 | 76 |
import org.gvsig.fmap.raster.layers.IRasterLayerActions; |
77 | 77 |
import org.gvsig.fmap.raster.layers.StatusLayerRaster; |
78 | 78 |
import org.gvsig.fmap.raster.layers.StatusRasterInterface; |
79 |
import org.gvsig.raster.dataset.CompositeDataset; |
|
80 |
import org.gvsig.raster.dataset.IRasterDataSource; |
|
81 |
import org.gvsig.raster.dataset.MosaicNotValidException; |
|
82 |
import org.gvsig.raster.dataset.MultiRasterDataset; |
|
83 |
import org.gvsig.raster.grid.GridTransparency; |
|
79 | 84 |
import org.gvsig.raster.grid.filter.RasterFilterList; |
80 | 85 |
import org.gvsig.remoteClient.utils.Utilities; |
81 | 86 |
import org.gvsig.remoteClient.wms.ICancellable; |
... | ... | |
119 | 124 |
private boolean isPrinting = false; |
120 | 125 |
private boolean mustTileDraw = true; |
121 | 126 |
private boolean mustTilePrint = true; |
122 |
private final int maxTileDrawWidth = 1023;
|
|
123 |
private final int maxTileDrawHeight = 1023;
|
|
127 |
private final int maxTileDrawWidth = 299;
|
|
128 |
private final int maxTileDrawHeight = 299;
|
|
124 | 129 |
private final int maxTilePrintWidth = 1023; |
125 | 130 |
private final int maxTilePrintHeight = 1023; |
126 | 131 |
private final int minTilePrintWidth = 12; |
... | ... | |
148 | 153 |
* Lista de filtros aplicada en la renderizaci?n |
149 | 154 |
*/ |
150 | 155 |
private RasterFilterList filterList = null; |
156 |
private GridTransparency transparency = null; |
|
157 |
private FLyrRasterSE layerRaster = null; |
|
151 | 158 |
|
152 |
|
|
153 | 159 |
private class MyCancellable implements ICancellable |
154 | 160 |
{ |
155 | 161 |
private Cancellable original; |
... | ... | |
668 | 674 |
try { |
669 | 675 |
visualStatus.fileNames = new String[1]; |
670 | 676 |
drawFixedSize(g, viewPort, cancel, scale); |
677 |
dataset = layerRaster.getDataSource(); |
|
671 | 678 |
} catch (LoadLayerException e) { |
672 | 679 |
// TODO Auto-generated catch block |
673 | 680 |
e.printStackTrace(); |
... | ... | |
679 | 686 |
Tiling tiles = new Tiling(maxTileDrawWidth, maxTileDrawHeight, r); |
680 | 687 |
tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone()); |
681 | 688 |
visualStatus.fileNames = new String[tiles.getNumTiles()]; |
682 |
for (int tileNr=0; tileNr < tiles.getNumTiles(); tileNr++) { |
|
689 |
MultiRasterDataset[][] datasets = new MultiRasterDataset[tiles.getNumRows()][tiles.getNumCols()]; |
|
690 |
for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) { |
|
683 | 691 |
// drawing part |
684 | 692 |
try { |
685 | 693 |
ViewPort vp = tiles.getTileViewPort(viewPort, tileNr); |
686 | 694 |
drawTile(g, vp, cancel, tileNr, scale); |
695 |
if(layerRaster != null) |
|
696 |
datasets[(int)(tileNr / tiles.getNumCols())][tileNr % tiles.getNumCols()] = (MultiRasterDataset)layerRaster.getDataSource().copy(); |
|
687 | 697 |
} catch (NoninvertibleTransformException e) { |
688 | 698 |
e.printStackTrace(); |
689 | 699 |
} catch (LoadLayerException e) { |
... | ... | |
691 | 701 |
e.printStackTrace(); |
692 | 702 |
} |
693 | 703 |
} |
704 |
try { |
|
705 |
if(datasets != null && datasets[0][0] != null) |
|
706 |
dataset = new CompositeDataset(datasets); |
|
707 |
} catch (MosaicNotValidException e) { |
|
708 |
throw new ReadDriverException("No hay continuidad en el mosaico.", e); |
|
709 |
} |
|
694 | 710 |
} else |
695 | 711 |
try { |
696 | 712 |
visualStatus.fileNames = new String[1]; |
697 | 713 |
drawTile(g, viewPort, cancel, 0, scale); |
714 |
dataset = layerRaster.getDataSource(); |
|
698 | 715 |
} catch (LoadLayerException e) { |
699 | 716 |
// TODO Auto-generated catch block |
700 | 717 |
e.printStackTrace(); |
... | ... | |
845 | 862 |
*/ |
846 | 863 |
private void rasterProcess(String filePath, Graphics2D g, ViewPort vp, double scale, Cancellable cancel) throws ReadDriverException, LoadLayerException { |
847 | 864 |
//Cerramos el dataset asociado a la capa si est? abierto. |
848 |
if(getDataSource() != null) { |
|
865 |
/*if(getDataSource() != null) {
|
|
849 | 866 |
getDataSource().close(); |
850 | 867 |
this.setRemoveRasterFlag(true); |
851 |
} |
|
868 |
}*/
|
|
852 | 869 |
|
853 | 870 |
//Cargamos el dataset con el raster de disco. |
854 |
setLoadParams(filePath); |
|
871 |
layerRaster = FLyrRasterSE.createLayer("", filePath, vp.getProjection()); |
|
872 |
layerRaster.getRender().setBufferFactory(layerRaster.getBufferFactory()); |
|
873 |
|
|
874 |
/*setLoadParams(filePath); |
|
855 | 875 |
load(); |
856 |
getRender().setBufferFactory(bufferFactory); |
|
876 |
getRender().setBufferFactory(bufferFactory);*/
|
|
857 | 877 |
|
858 | 878 |
//Como el raster se carga a cada zoom el render se crea nuevamente y la lista de |
859 | 879 |
//filtros siempre estar? vacia a cada visualizaci?n. Para evitarlo tenemos que |
860 | 880 |
//guardar la lista de filtro aplicada en la visualizaci?n anterior. |
861 |
if (this.filterList != null) |
|
862 |
getRender().setFilterList(filterList); |
|
881 |
if(this.filterList != null) |
|
882 |
layerRaster.getRender().setFilterList(filterList); |
|
883 |
if(this.transparency != null) |
|
884 |
layerRaster.getRender().setLastTransparency(transparency); |
|
863 | 885 |
|
864 | 886 |
//Dibujamos |
865 |
super.draw(null, g, vp, cancel, scale);
|
|
887 |
layerRaster.draw(null, g, vp, cancel, scale);
|
|
866 | 888 |
|
867 | 889 |
//La primera vez asignamos la lista de filtros asociada al renderizador. Guardamos una referencia |
868 | 890 |
//en esta clase para que a cada zoom no se pierda. |
869 | 891 |
if (this.filterList == null) |
870 |
filterList = getRender().getFilterList(); |
|
892 |
filterList = layerRaster.getRender().getFilterList(); |
|
893 |
if (this.transparency == null) |
|
894 |
transparency = layerRaster.getRender().getLastTransparency(); |
|
895 |
|
|
871 | 896 |
} |
872 | 897 |
|
873 | 898 |
|
Also available in: Unified diff