Revision 13546 trunk/extensions/extWMS/src/com/iver/cit/gvsig/fmap/layers/FLyrWMS.java

View differences:

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