Revision 210
org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.wmsclient/src/main/java/org/gvsig/raster/app/extension/wmsclient/layer/FLyrWMS.java | ||
---|---|---|
412 | 412 |
throw new ReadException(e.getMessage(), e); |
413 | 413 |
} |
414 | 414 |
} |
415 |
|
|
416 | 415 |
} |
417 | 416 |
disableStopped(); |
418 | 417 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java | ||
---|---|---|
145 | 145 |
public static final String PERSISTENT_NAME = "FLyrRasterSE_Persistent"; |
146 | 146 |
public static final String PERSISTENT_DESCRIPTION = "FLyrRasterSE Persistent"; |
147 | 147 |
private RasterManager rManager = RasterLocator.getManager(); |
148 |
private boolean mustTileDraw = false; |
|
149 |
private boolean mustTilePrint = true; |
|
150 |
private int maxTileDrawWidth = 200; |
|
151 |
private int maxTileDrawHeight = 200; |
|
152 |
private int maxTilePrintWidth = 1500; |
|
153 |
private int maxTilePrintHeight = 1500; |
|
154 |
protected IStatusRaster status = null; |
|
155 |
private boolean firstLoad = false; |
|
156 |
private boolean removeRasterFlag = true; |
|
157 |
protected RasterDataStore dataStore = null; |
|
158 |
protected Render render = null; |
|
159 |
private int posX = 0; |
|
160 |
private int posY = 0; |
|
161 |
private double posXWC = 0; |
|
162 |
private int posYWC = 0; |
|
163 |
private int r = 0; |
|
164 |
private int g = 0; |
|
165 |
private int b = 0; |
|
166 |
private LayerChangeSupport layerChangeSupport = new LayerChangeSupport(); |
|
167 |
private FLyrState state = new FLyrState(); |
|
168 |
protected ILegend lastLegend = null; |
|
169 |
protected ColorTable loadedFromProject = null; |
|
170 |
private ArrayList<ROI> rois = null; |
|
171 |
private RasterDrawStrategy strategy = null; |
|
172 |
static private IConfiguration configuration = new DefaultLayerConfiguration(); |
|
148 |
private boolean mustTileDraw = false;
|
|
149 |
private boolean mustTilePrint = true;
|
|
150 |
private int maxTileDrawWidth = 200;
|
|
151 |
private int maxTileDrawHeight = 200;
|
|
152 |
private int maxTilePrintWidth = 1500;
|
|
153 |
private int maxTilePrintHeight = 1500;
|
|
154 |
protected IStatusRaster status = null;
|
|
155 |
private boolean firstLoad = false;
|
|
156 |
private boolean removeRasterFlag = true;
|
|
157 |
protected RasterDataStore dataStore = null;
|
|
158 |
protected Render render = null;
|
|
159 |
private int posX = 0;
|
|
160 |
private int posY = 0;
|
|
161 |
private double posXWC = 0;
|
|
162 |
private int posYWC = 0;
|
|
163 |
private int r = 0;
|
|
164 |
private int g = 0;
|
|
165 |
private int b = 0;
|
|
166 |
private LayerChangeSupport layerChangeSupport = new LayerChangeSupport();
|
|
167 |
private FLyrState state = new FLyrState();
|
|
168 |
protected ILegend lastLegend = null;
|
|
169 |
protected ColorTable loadedFromProject = null;
|
|
170 |
private ArrayList<ROI> rois = null;
|
|
171 |
private RasterDrawStrategy strategy = null;
|
|
172 |
static private IConfiguration configuration = new DefaultLayerConfiguration();
|
|
173 | 173 |
|
174 |
private BufferedImage image = null; |
|
175 |
private static GeometryManager geomManager = GeometryLocator.getGeometryManager(); |
|
176 |
private static final Logger logger = LoggerFactory.getLogger(DefaultFLyrRaster.class); |
|
177 |
protected FileUtils fileUtil = RasterLocator.getManager().getFileUtils(); |
|
178 |
protected RasterUtils rasterUtil = RasterLocator.getManager().getRasterUtils(); |
|
179 |
protected CRSUtils crsUtil = RasterLocator.getManager().getCRSUtils(); |
|
180 |
protected MathUtils mathUtil = RasterLocator.getManager().getMathUtils(); |
|
174 |
private BufferedImage image = null;
|
|
175 |
private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
|
|
176 |
private static final Logger logger = LoggerFactory.getLogger(DefaultFLyrRaster.class);
|
|
177 |
protected FileUtils fileUtil = RasterLocator.getManager().getFileUtils();
|
|
178 |
protected RasterUtils rasterUtil = RasterLocator.getManager().getRasterUtils();
|
|
179 |
protected CRSUtils crsUtil = RasterLocator.getManager().getCRSUtils();
|
|
180 |
protected MathUtils mathUtil = RasterLocator.getManager().getMathUtils();
|
|
181 | 181 |
|
182 | 182 |
/** |
183 | 183 |
* Tipo de valor no data asociado a la capa. |
184 | 184 |
* Sirve para diferenciar los estados seleccionados por el usuario. Siendo |
185 | 185 |
* estos 'Sin Valor NoData', 'NoData de Capa'(Por defecto) y 'Personalizado' |
186 | 186 |
*/ |
187 |
private int noDataType = RasterLibrary.NODATATYPE_LAYER; |
|
187 |
private int noDataType = RasterLibrary.NODATATYPE_LAYER;
|
|
188 | 188 |
|
189 | 189 |
/** |
190 | 190 |
* Lista de transformaciones afines que son aplicadas. Esta lista es |
191 | 191 |
* simplemente un historico que no se utiliza. Es posible utilizarlo para |
192 | 192 |
* recuperar transformaciones anteriores. |
193 | 193 |
*/ |
194 |
private Historical affineTransformList = null; |
|
195 |
protected String readingData = null; |
|
194 |
private Historical affineTransformList = null;
|
|
195 |
protected String readingData = null;
|
|
196 | 196 |
|
197 | 197 |
public DefaultFLyrRaster() { |
198 | 198 |
affineTransformList = rManager.createHistoricalService(); |
... | ... | |
496 | 496 |
params.setParam("remove", new Boolean(false)); |
497 | 497 |
params.setParam("renderBands", getRender().getRenderBands()); |
498 | 498 |
params.setParam("stretchs", null);//coge el LinearStretchParams por defecto |
499 |
params.setParam("rgb", new Boolean(true)); |
|
499 | 500 |
enhancementManager.addFilter(params); |
500 | 501 |
} |
501 | 502 |
|
... | ... | |
627 | 628 |
} |
628 | 629 |
|
629 | 630 |
} |
631 |
|
|
630 | 632 |
//callLegendChanged(null); |
631 | 633 |
} finally { |
632 | 634 |
disableStopped(); |
... | ... | |
647 | 649 |
Dimension imgSz = vp.getImageSize(); |
648 | 650 |
ViewPortData vp2 = rManager.createViewPortData(vp.getProjection(), e, imgSz ); |
649 | 651 |
vp2.setMat(vp.getAffineTransform()); |
650 |
try { |
|
651 |
getRender().draw(g, vp2); |
|
652 |
} catch (ProcessInterruptedException e1) { |
|
653 |
new InterruptedException(); |
|
654 |
} |
|
652 |
|
|
653 |
getRender().drawThread(g, vp2); |
|
655 | 654 |
} |
656 | 655 |
|
657 | 656 |
/** |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultMultiRasterStore.java | ||
---|---|---|
23 | 23 |
|
24 | 24 |
import java.awt.geom.AffineTransform; |
25 | 25 |
import java.awt.geom.Point2D; |
26 |
import java.awt.geom.Rectangle2D; |
|
26 | 27 |
import java.io.File; |
27 | 28 |
import java.util.ArrayList; |
28 | 29 |
|
... | ... | |
45 | 46 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
46 | 47 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
47 | 48 |
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException; |
49 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
48 | 50 |
import org.gvsig.fmap.dal.coverage.store.MultiRasterStore; |
49 | 51 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
50 | 52 |
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation; |
... | ... | |
60 | 62 |
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer; |
61 | 63 |
import org.gvsig.raster.impl.datastruct.BandListImpl; |
62 | 64 |
import org.gvsig.raster.impl.datastruct.DatasetBandImpl; |
65 |
import org.gvsig.raster.impl.datastruct.ExtentImpl; |
|
63 | 66 |
import org.gvsig.raster.impl.provider.DefaultRasterProvider; |
64 | 67 |
import org.gvsig.raster.impl.provider.RasterProvider; |
65 | 68 |
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation; |
... | ... | |
581 | 584 |
|
582 | 585 |
return raster; |
583 | 586 |
} |
587 |
|
|
588 |
/* |
|
589 |
* (non-Javadoc) |
|
590 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
591 |
*/ |
|
592 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
593 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException { |
|
594 |
double[] step = null; |
|
595 |
Buffer buf = null; |
|
596 |
|
|
597 |
//Esta secci?n es para que no supersamplee el driver y pueda hacerse en el cliente |
|
598 |
if(!currentQuery.isSupersamplingLoadingBuffer()) { |
|
599 |
//nWidth = ((adjustedDataExtent.width() * mDataset.getDataset(0).getWidth()) / mDataset.getExtentForRequest().width()); |
|
600 |
//nHeight = ((adjustedDataExtent.height() * mDataset.getDataset(0).getHeight()) / mDataset.getExtentForRequest().height()); |
|
601 |
Point2D p1 = worldToRaster(new Point2D.Double(ulx, uly)); |
|
602 |
Point2D p2 = worldToRaster(new Point2D.Double(lrx, lry)); |
|
603 |
nWidth = Math.abs(p1.getX() - p2.getX()); |
|
604 |
nHeight = Math.abs(p1.getY() - p2.getY()); |
|
584 | 605 |
|
606 |
if(bufWidth > Math.ceil(nWidth) && bufHeight > Math.ceil(nHeight)) { |
|
607 |
step = calcSteps(ulx, uly, lrx, lry, nWidth, nHeight, bufWidth, bufHeight); |
|
608 |
buf = getWindowRaster(ulx, uly, lrx, lry); |
|
609 |
} |
|
610 |
} |
|
611 |
|
|
612 |
if(buf == null) |
|
613 |
buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true); |
|
614 |
|
|
615 |
buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry))); |
|
616 |
listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), step); |
|
617 |
listener.endReading(); |
|
618 |
} |
|
619 |
|
|
585 | 620 |
/* |
586 | 621 |
* (non-Javadoc) |
587 | 622 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, boolean) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultRemoteRasterStore.java | ||
---|---|---|
22 | 22 |
package org.gvsig.raster.impl.store; |
23 | 23 |
|
24 | 24 |
import java.awt.geom.Point2D; |
25 |
import java.awt.geom.Rectangle2D; |
|
25 | 26 |
|
26 | 27 |
import org.gvsig.fmap.dal.DALLocator; |
27 | 28 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
... | ... | |
33 | 34 |
import org.gvsig.fmap.dal.coverage.exception.OperationNotSupportedException; |
34 | 35 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
35 | 36 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
37 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
36 | 38 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
37 | 39 |
import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters; |
38 | 40 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
... | ... | |
44 | 46 |
import org.gvsig.fmap.dal.spi.DataManagerProviderServices; |
45 | 47 |
import org.gvsig.raster.impl.DefaultRasterManager; |
46 | 48 |
import org.gvsig.raster.impl.datastruct.BandListImpl; |
49 |
import org.gvsig.raster.impl.datastruct.ExtentImpl; |
|
47 | 50 |
import org.gvsig.raster.impl.provider.DefaultRasterProvider; |
48 | 51 |
import org.gvsig.raster.impl.provider.RasterProvider; |
49 | 52 |
import org.gvsig.raster.impl.provider.RemoteRasterProvider; |
... | ... | |
325 | 328 |
Buffer buffer = DefaultRasterManager.getInstance().createMemoryBuffer(getProvider(0).getDataType()[0], width, height, getProvider(0).getBandCount(), true); |
326 | 329 |
return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()), bandList, buffer, adjustToExtent); |
327 | 330 |
} |
331 |
|
|
332 |
/* |
|
333 |
* (non-Javadoc) |
|
334 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
335 |
*/ |
|
336 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
337 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException { |
|
338 |
Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true); |
|
339 |
buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry))); |
|
340 |
listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null); |
|
341 |
listener.endReading(); |
|
342 |
} |
|
328 | 343 |
|
329 | 344 |
/* |
330 | 345 |
* (non-Javadoc) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultTRasterStore.java | ||
---|---|---|
38 | 38 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
39 | 39 |
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException; |
40 | 40 |
import org.gvsig.fmap.dal.coverage.exception.TimeException; |
41 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
41 | 42 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
42 | 43 |
import org.gvsig.fmap.dal.coverage.store.TRasterStore; |
43 | 44 |
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation; |
... | ... | |
382 | 383 |
throws InvalidSetViewException, RasterDriverException, ProcessInterruptedException { |
383 | 384 |
return ((QueryableRaster)list.get(selectedStore)).getWindowRaster(ulx, uly, w, h, adjustToExtent); |
384 | 385 |
} |
386 |
|
|
387 |
/* |
|
388 |
* (non-Javadoc) |
|
389 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
390 |
*/ |
|
391 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
392 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException { |
|
393 |
((QueryableRaster)list.get(selectedStore)).getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, listener, frameInPx); |
|
394 |
} |
|
385 | 395 |
|
386 | 396 |
/* |
387 | 397 |
* (non-Javadoc) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/QueryableRaster.java | ||
---|---|---|
31 | 31 |
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException; |
32 | 32 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
33 | 33 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
34 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
34 | 35 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
35 | 36 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
36 | 37 |
import org.gvsig.raster.impl.provider.RasterProvider; |
... | ... | |
185 | 186 |
|
186 | 187 |
/** |
187 | 188 |
* Obtiene una ventana de datos de la imagen a partir de coordenadas reales. |
189 |
* Aplica supersampleo o subsampleo en funci?n del tama?o del buffer. Esta operaci?n la gestiona |
|
190 |
* el driver. |
|
191 |
* @param minX Valor m?nimo de la X en coordenadas reales |
|
192 |
* @param minY Valor m?nimo de la Y en coordenadas reales |
|
193 |
* @param maxX Valor m?ximo de la X en coordenadas reales |
|
194 |
* @param maxY Valor m?ximo de la Y en coordenadas reales |
|
195 |
* @param bufWidth ancho del buffer lde datos |
|
196 |
* @param bufHeight alto del buffer de datos |
|
197 |
* @param listener |
|
198 |
* @param frameInPx |
|
199 |
* @return Buffer de datos |
|
200 |
*/ |
|
201 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
202 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException; |
|
203 |
|
|
204 |
/** |
|
205 |
* Obtiene una ventana de datos de la imagen a partir de coordenadas reales. |
|
188 | 206 |
* No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los |
189 | 207 |
* pixeles de disco. |
190 | 208 |
* @param x Posici?n X superior izquierda |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultListRasterStore.java | ||
---|---|---|
24 | 24 |
import java.awt.geom.AffineTransform; |
25 | 25 |
import java.awt.geom.NoninvertibleTransformException; |
26 | 26 |
import java.awt.geom.Point2D; |
27 |
import java.awt.geom.Rectangle2D; |
|
27 | 28 |
import java.io.IOException; |
28 | 29 |
import java.util.ArrayList; |
29 | 30 |
|
... | ... | |
41 | 42 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
42 | 43 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
43 | 44 |
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException; |
45 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
44 | 46 |
import org.gvsig.fmap.dal.coverage.store.ListRasterStore; |
45 | 47 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
46 | 48 |
import org.gvsig.fmap.dal.coverage.store.RasterStoreParameters; |
... | ... | |
582 | 584 |
} |
583 | 585 |
} |
584 | 586 |
} |
587 |
|
|
588 |
/* |
|
589 |
* (non-Javadoc) |
|
590 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
591 |
*/ |
|
592 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
593 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException { |
|
594 |
Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true); |
|
595 |
buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry))); |
|
596 |
listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null); |
|
597 |
listener.endReading(); |
|
598 |
} |
|
585 | 599 |
|
586 | 600 |
/* |
587 | 601 |
* (non-Javadoc) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultMosaicRasterStore.java | ||
---|---|---|
24 | 24 |
import java.awt.geom.AffineTransform; |
25 | 25 |
import java.awt.geom.NoninvertibleTransformException; |
26 | 26 |
import java.awt.geom.Point2D; |
27 |
import java.awt.geom.Rectangle2D; |
|
27 | 28 |
import java.io.IOException; |
28 | 29 |
import java.util.ArrayList; |
29 | 30 |
|
... | ... | |
41 | 42 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
42 | 43 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
43 | 44 |
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException; |
45 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
44 | 46 |
import org.gvsig.fmap.dal.coverage.store.MosaicRasterStore; |
45 | 47 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
46 | 48 |
import org.gvsig.fmap.dal.coverage.store.RasterStoreParameters; |
... | ... | |
928 | 930 |
|
929 | 931 |
/* |
930 | 932 |
* (non-Javadoc) |
933 |
* @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
934 |
*/ |
|
935 |
public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx) |
|
936 |
throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException { |
|
937 |
Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true); |
|
938 |
buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry))); |
|
939 |
listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null); |
|
940 |
listener.endReading(); |
|
941 |
} |
|
942 |
|
|
943 |
/* |
|
944 |
* (non-Javadoc) |
|
931 | 945 |
* @see org.gvsig.raster.dataset.IRasterDataSource#getWindowRaster(double, double, double, double, int, int, boolean) |
932 | 946 |
*/ |
933 | 947 |
public Buffer getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, boolean adjustToExtent) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/AbstractRasterDataStore.java | ||
---|---|---|
40 | 40 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
41 | 41 |
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException; |
42 | 42 |
import org.gvsig.fmap.dal.coverage.grid.render.Render; |
43 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
43 | 44 |
import org.gvsig.fmap.dal.coverage.process.vector.Vectorization; |
44 | 45 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
45 | 46 |
import org.gvsig.fmap.dal.coverage.store.RasterFileStoreParameters; |
... | ... | |
108 | 109 |
/** |
109 | 110 |
* Ancho y alto en pixeles del ?ltimo buffer asignado |
110 | 111 |
*/ |
111 |
private double nWidth = 0;
|
|
112 |
private double nHeight = 0;
|
|
112 |
protected double nWidth = 0;
|
|
113 |
protected double nHeight = 0;
|
|
113 | 114 |
private double[] step = null; |
114 | 115 |
private Buffer lastBuffer = null; |
115 | 116 |
|
... | ... | |
159 | 160 |
buf.setDataExtent(new Rectangle2D.Double(currentQuery.getUlx(), currentQuery.getUly(), currentQuery.getLrx() - currentQuery.getUlx(), currentQuery.getLry() - currentQuery.getUly())); |
160 | 161 |
} |
161 | 162 |
|
163 |
if(currentQuery.getType() == DefaultRasterQuery.TYPE_COORDS_SIZE_TILED) { |
|
164 |
setAreaOfInterest(currentQuery.getUlx(), currentQuery.getUly(), currentQuery.getLrx(), currentQuery.getLry(), currentQuery.getBufWidth(), currentQuery.getBufHeight(), currentQuery.getTileListener(), currentQuery.getFrameWidthPx()); |
|
165 |
} |
|
166 |
|
|
162 | 167 |
if(currentQuery.getType() == DefaultRasterQuery.TYPE_PX) |
163 | 168 |
buf = setAreaOfInterest(currentQuery.getPixelX(), currentQuery.getPixelY(), currentQuery.getPixelW(), currentQuery.getPixelH()); |
164 | 169 |
|
... | ... | |
244 | 249 |
return getWindowRaster(adjustedDataExtent.getMin().getX(), adjustedDataExtent.getMax().getY(), adjustedDataExtent.width(), adjustedDataExtent.height(), currentQuery.isAdjustToExtent()); |
245 | 250 |
} |
246 | 251 |
|
252 |
public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, |
|
253 |
int bufWidth, int bufHeight, TileListener listener, int frameWidthPx) throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException { |
|
254 |
dataExtent = new ExtentImpl(ulx, uly, lrx, lry); |
|
255 |
Extent adjustedDataExtent = util.calculateAdjustedView(dataExtent, getAffineTransform(), new Dimension((int)getWidth(), (int)getHeight())); |
|
256 |
getWindowRaster(adjustedDataExtent.getULX(), adjustedDataExtent.getULY(), adjustedDataExtent.getLRX(), adjustedDataExtent.getLRY(), bufWidth, bufHeight, listener, frameWidthPx); |
|
257 |
} |
|
258 |
|
|
247 | 259 |
/** |
248 | 260 |
* Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen |
249 | 261 |
* estas coordenadas son ajustadas el extent. |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/filter/enhancement/EnhancementStretchListManager.java | ||
---|---|---|
159 | 159 |
} else { |
160 | 160 |
//Si stretch vale null se usan los par?metros por defecto de LinearStretchParams |
161 | 161 |
if(params.getParamById("stretchs").getDefaultValue() == null) { |
162 |
p = DefaultLinearStretchParams.createStandardParam(renderBands, 0.0, stats, removeEnds); |
|
162 |
boolean rgb = false; |
|
163 |
if(params.getParamById("rgb").getDefaultValue() != null) |
|
164 |
rgb = ((Boolean)params.getParamById("rgb").getDefaultValue()).booleanValue(); |
|
165 |
p = DefaultLinearStretchParams.createStandardParam(renderBands, 0.0, stats, rgb); |
|
163 | 166 |
} |
164 | 167 |
} |
165 | 168 |
} catch (FileNotOpenException e) { |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java | ||
---|---|---|
43 | 43 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilter; |
44 | 44 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList; |
45 | 45 |
import org.gvsig.fmap.dal.coverage.grid.render.Render; |
46 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
46 | 47 |
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyEvent; |
47 | 48 |
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyListener; |
48 | 49 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
... | ... | |
67 | 68 |
import org.gvsig.tools.persistence.Persistent; |
68 | 69 |
import org.gvsig.tools.persistence.PersistentState; |
69 | 70 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
71 |
import org.slf4j.LoggerFactory; |
|
70 | 72 |
/** |
71 | 73 |
* Esta clase se encarga de la gesti?n del dibujado de datos le?dos desde la capa |
72 | 74 |
* "dataaccess" sobre objetos java. Para ello necesita una fuente de datos que tipicamente |
... | ... | |
88 | 90 |
* |
89 | 91 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
90 | 92 |
*/ |
91 |
public class DefaultRender implements Render, PropertyListener, FilterListChangeListener, Persistent { |
|
93 |
public class DefaultRender implements Render, PropertyListener, FilterListChangeListener, Persistent, TileListener {
|
|
92 | 94 |
|
93 | 95 |
/** |
94 | 96 |
* Grid para la gesti?n del buffer |
... | ... | |
136 | 138 |
private ArrayList<VisualPropertyListener> |
137 | 139 |
visualPropertyListener = new ArrayList<VisualPropertyListener>(); |
138 | 140 |
private RasterUtils util = RasterLocator.getManager().getRasterUtils(); |
141 |
private boolean isDrawing = false; |
|
139 | 142 |
|
143 |
private Graphics2D lastGraphics = null; |
|
144 |
private ViewPortData lastViewPortData = null; |
|
145 |
|
|
140 | 146 |
/** |
141 | 147 |
* Constructor |
142 | 148 |
*/ |
... | ... | |
250 | 256 |
((VisualPropertyListener)visualPropertyListener.get(i)).visualPropertyValueChanged(ev); |
251 | 257 |
} |
252 | 258 |
} |
259 |
|
|
260 |
/** |
|
261 |
* Thread de dibujado |
|
262 |
*/ |
|
263 |
public void run() { |
|
264 |
try { |
|
265 |
draw(lastGraphics, lastViewPortData); |
|
266 |
} catch (RasterDriverException e) { |
|
267 |
LoggerFactory.getLogger(getClass()).debug("Error reading data", e); |
|
268 |
} catch (InvalidSetViewException e) { |
|
269 |
LoggerFactory.getLogger(getClass()).debug("Invalid view", e); |
|
270 |
} catch (ProcessInterruptedException e) { |
|
271 |
} |
|
272 |
} |
|
273 |
|
|
274 |
/* |
|
275 |
* (non-Javadoc) |
|
276 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#setGraphicInfo(java.awt.Graphics2D, org.gvsig.fmap.dal.coverage.datastruct.ViewPortData) |
|
277 |
*/ |
|
278 |
public void setGraphicInfo(Graphics2D g, ViewPortData vp) { |
|
279 |
this.lastGraphics = g; |
|
280 |
this.lastViewPortData = vp; |
|
281 |
} |
|
253 | 282 |
|
254 | 283 |
/* |
255 | 284 |
* (non-Javadoc) |
285 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#drawThread(java.awt.Graphics2D, org.gvsig.fmap.dal.coverage.datastruct.ViewPortData) |
|
286 |
*/ |
|
287 |
public void drawThread(Graphics2D g, ViewPortData vp) { |
|
288 |
//Se dibuja si cae dentro de la vista |
|
289 |
if(util.isOutside(vp.getExtent(), dataStore.getExtent())) |
|
290 |
return; |
|
291 |
|
|
292 |
setReading(true); |
|
293 |
setGraphicInfo(g, vp); |
|
294 |
new Thread(this).start(); |
|
295 |
|
|
296 |
while(isReading()) { |
|
297 |
try { |
|
298 |
Thread.sleep(50); |
|
299 |
} catch (InterruptedException e) { |
|
300 |
break; |
|
301 |
} |
|
302 |
} |
|
303 |
} |
|
304 |
|
|
305 |
/* |
|
306 |
* (non-Javadoc) |
|
256 | 307 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData) |
257 | 308 |
*/ |
258 |
public synchronized Image draw(Graphics2D g, ViewPortData vp)
|
|
309 |
public synchronized void draw(Graphics2D g, ViewPortData vp)
|
|
259 | 310 |
throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException { |
260 |
Image geoImage = null; |
|
261 |
//RasterDataSet dataset = dataStore.getDataset(); |
|
262 |
AffineTransform transf = dataStore.getAffineTransform(); |
|
311 |
lastGraphics = g; |
|
312 |
lastViewPortData = vp; |
|
263 | 313 |
|
264 |
if(util.isOutside(vp.getExtent(), dataStore.getExtent())) |
|
265 |
return null; |
|
314 |
if(util.isOutside(vp.getExtent(), dataStore.getExtent())) { |
|
315 |
endReading(); |
|
316 |
return; |
|
317 |
} |
|
266 | 318 |
|
267 | 319 |
Extent adjustedRotedRequest = request(vp, dataStore); |
268 | 320 |
|
269 |
if ((widthImage <= 0) || (heightImage <= 0)) |
|
270 |
return null; |
|
271 |
|
|
272 |
double[] step = null; |
|
273 |
Buffer buf = null; |
|
321 |
if ((widthImage <= 0) || (heightImage <= 0)) { |
|
322 |
endReading(); |
|
323 |
return; |
|
324 |
} |
|
274 | 325 |
|
275 | 326 |
if (dataStore != null) { |
276 | 327 |
if (lastTransparency == null) { |
... | ... | |
282 | 333 |
if (dataStore.getTransparency().getAlphaBandNumber() != -1) { |
283 | 334 |
query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer. |
284 | 335 |
query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber(), -1, -1 }); |
285 |
query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage)); |
|
336 |
query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage), this, 0);
|
|
286 | 337 |
query.setSupersamplingLoadingBuffer(true); |
287 | 338 |
lastTransparency.setAlphaBand(dataStore.query(query)); |
288 | 339 |
} |
289 | 340 |
query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer. |
290 | 341 |
// En el renderizado ser? ImageDrawer el que se encargue de esta funci?n |
291 | 342 |
query.setDrawableBands(getRenderBands()); |
292 |
query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage)); |
|
293 |
buf = dataStore.query(query); |
|
294 |
step = dataStore.getStep(); |
|
343 |
query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage), this, 0); |
|
344 |
dataStore.query(query); |
|
295 | 345 |
query.setSupersamplingLoadingBuffer(true); |
296 |
|
|
346 |
} else |
|
347 |
return; |
|
348 |
} |
|
349 |
|
|
350 |
/* |
|
351 |
* (non-Javadoc) |
|
352 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData) |
|
353 |
*/ |
|
354 |
public synchronized void drawBufferOnImage(Graphics2D g, ViewPortData vp, Buffer buf, double[] step, AffineTransform transf, Extent adjustedRotedRequest) |
|
355 |
throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException { |
|
356 |
|
|
357 |
if (dataStore != null) { |
|
297 | 358 |
//Asignamos los datos al objeto transparencia antes de aplicar la pila de filtros para que el valor NoData sea efectivo |
298 | 359 |
if (dataStore.getTransparency().isNoDataActive()) |
299 | 360 |
lastTransparency.setDataBuffer(buf); |
300 | 361 |
else |
301 | 362 |
lastTransparency.setDataBuffer(null); |
302 | 363 |
lastTransparency.activeTransparency(); |
303 |
|
|
304 | 364 |
} else |
305 |
return null;
|
|
365 |
return; |
|
306 | 366 |
|
307 | 367 |
//Aplicamos los filtros |
308 | 368 |
grid = new GridImpl(buf, dataStore, true); |
... | ... | |
326 | 386 |
drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar |
327 | 387 |
drawer.setStep(step); // Desplazamiento para supersampleo |
328 | 388 |
drawer.setBufferSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer |
329 |
geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado |
|
389 |
Image geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
|
|
330 | 390 |
|
331 | 391 |
// Borramos el buffer de transparencia para que siempre se tenga que regenerar. |
332 | 392 |
lastTransparency.setAlphaBand(null); |
... | ... | |
339 | 399 |
Point2D lastGraphicOffset = new Point2D.Double(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY()); |
340 | 400 |
((DefaultViewPortData)vp).mat.transform(lastGraphicOffset, lastGraphicOffset); |
341 | 401 |
g.drawImage(geoImage, (int) Math.round(lastGraphicOffset.getX()), (int) Math.round(lastGraphicOffset.getY()), null); |
342 |
return geoImage;
|
|
402 |
return; |
|
343 | 403 |
} |
344 | 404 |
|
345 | 405 |
/* |
... | ... | |
373 | 433 |
g.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null); |
374 | 434 |
g.transform(at.createInverse()); |
375 | 435 |
} catch (NoninvertibleTransformException e) { |
376 |
e.printStackTrace();
|
|
436 |
LoggerFactory.getLogger(getClass()).debug("Transformation error", e);
|
|
377 | 437 |
} |
378 |
return geoImage;
|
|
438 |
return; |
|
379 | 439 |
// long t2 = new Date().getTime(); |
380 | 440 |
// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs."); |
381 | 441 |
} |
382 |
|
|
442 |
|
|
443 |
/* |
|
444 |
* (non-Javadoc) |
|
445 |
* @see org.gvsig.raster.impl.grid.render.TileListener#nextBuffer(org.gvsig.fmap.dal.coverage.dataset.Buffer, org.gvsig.fmap.dal.coverage.datastruct.Extent, java.awt.geom.AffineTransform) |
|
446 |
*/ |
|
447 |
public void nextBuffer(Buffer buf, Extent e, AffineTransform transf, double[] step) throws ProcessInterruptedException { |
|
448 |
try { |
|
449 |
drawBufferOnImage(lastGraphics, lastViewPortData, buf, step, transf, e); |
|
450 |
} catch (RasterDriverException e1) { |
|
451 |
LoggerFactory.getLogger(getClass()).debug("Error loading data", e); |
|
452 |
} catch (InvalidSetViewException e1) { |
|
453 |
LoggerFactory.getLogger(getClass()).debug("Invalid view", e); |
|
454 |
} |
|
455 |
} |
|
456 |
|
|
457 |
/* |
|
458 |
* (non-Javadoc) |
|
459 |
* @see org.gvsig.raster.impl.grid.render.TileListener#endReading() |
|
460 |
*/ |
|
461 |
public void endReading() { |
|
462 |
isDrawing = false; |
|
463 |
} |
|
464 |
|
|
465 |
/* |
|
466 |
* (non-Javadoc) |
|
467 |
* @see org.gvsig.raster.impl.grid.render.TileListener#isReading() |
|
468 |
*/ |
|
469 |
public boolean isReading() { |
|
470 |
return isDrawing; |
|
471 |
} |
|
472 |
|
|
473 |
/* |
|
474 |
* (non-Javadoc) |
|
475 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#setReading(boolean) |
|
476 |
*/ |
|
477 |
public void setReading(boolean reading) { |
|
478 |
isDrawing = reading; |
|
479 |
} |
|
480 |
|
|
383 | 481 |
/** |
384 | 482 |
* Calculamos la petici?n en coordenadas del mundo real con la transformaci?n del raster. Esto |
385 | 483 |
* permite obtener las coordenadas de la petici?n con la rotaci?n, si la tiene. |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/DefaultRasterQuery.java | ||
---|---|---|
21 | 21 |
*/ |
22 | 22 |
package org.gvsig.raster.impl.buffer; |
23 | 23 |
|
24 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
24 | 25 |
import org.gvsig.fmap.dal.coverage.store.RasterQuery; |
25 | 26 |
import org.gvsig.tools.persistence.PersistentState; |
26 | 27 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
... | ... | |
36 | 37 |
public static final int TYPE_COORDS_SIZE = 2; |
37 | 38 |
public static final int TYPE_PX = 3; |
38 | 39 |
public static final int TYPE_PX_SIZE = 4; |
40 |
public static final int TYPE_COORDS_SIZE_TILED = 5; |
|
39 | 41 |
|
40 | 42 |
private int type = 0; |
41 | 43 |
|
... | ... | |
72 | 74 |
*/ |
73 | 75 |
private double noDataValueToFill = -99999; |
74 | 76 |
|
77 |
private int frameWidthPx = 0; |
|
78 |
private TileListener listener = null; |
|
79 |
|
|
75 | 80 |
/* |
76 | 81 |
* (non-Javadoc) |
77 | 82 |
* @see org.gvsig.fmap.dal.coverage.buffer.RasterQuery#setAreaOfInterest(double, double, double, double) |
... | ... | |
101 | 106 |
|
102 | 107 |
/* |
103 | 108 |
* (non-Javadoc) |
109 |
* @see org.gvsig.fmap.dal.coverage.store.RasterQuery#setAreaOfInterest(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int) |
|
110 |
*/ |
|
111 |
public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, |
|
112 |
int bufWidth, int bufHeight, TileListener listener, int frameWidthPx) { |
|
113 |
this.ulx = ulx; |
|
114 |
this.uly = uly; |
|
115 |
this.lrx = lrx; |
|
116 |
this.lry = lry; |
|
117 |
this.bufWidth = bufWidth; |
|
118 |
this.bufHeight = bufHeight; |
|
119 |
this.type = TYPE_COORDS_SIZE_TILED; |
|
120 |
this.frameWidthPx = frameWidthPx; |
|
121 |
this.listener = listener; |
|
122 |
} |
|
123 |
|
|
124 |
/* |
|
125 |
* (non-Javadoc) |
|
104 | 126 |
* @see org.gvsig.fmap.dal.coverage.buffer.RasterQuery#setAreaOfInterest(int, int, int, int) |
105 | 127 |
*/ |
106 | 128 |
public void setAreaOfInterest(int x, int y, int w, int h) { |
... | ... | |
306 | 328 |
public boolean isReadOnly() { |
307 | 329 |
return readOnly; |
308 | 330 |
} |
331 |
|
|
332 |
public int getFrameWidthPx() { |
|
333 |
return frameWidthPx; |
|
334 |
} |
|
309 | 335 |
|
336 |
public TileListener getTileListener() { |
|
337 |
return listener; |
|
338 |
} |
|
339 |
|
|
310 | 340 |
//**************************************************** |
311 | 341 |
//*********Implementing DataQuery methods************* |
312 | 342 |
//**************************************************** |
... | ... | |
369 | 399 |
// TODO Auto-generated method stub |
370 | 400 |
|
371 | 401 |
} |
372 |
|
|
373 | 402 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java | ||
---|---|---|
22 | 22 |
package org.gvsig.fmap.dal.coverage.grid.render; |
23 | 23 |
|
24 | 24 |
import java.awt.Graphics2D; |
25 |
import java.awt.Image; |
|
26 | 25 |
|
27 | 26 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
28 | 27 |
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData; |
... | ... | |
40 | 39 |
* Renders a Grid object |
41 | 40 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
42 | 41 |
*/ |
43 |
public interface Render { |
|
42 |
public interface Render extends Runnable { |
|
43 |
|
|
44 | 44 |
/** |
45 | 45 |
* Obtiene las lista de filtros aplicados en la renderizaci?n |
46 | 46 |
* @return RasterFilterList |
... | ... | |
189 | 189 |
* @throws InvalidSetViewException |
190 | 190 |
* @throws ArrayIndexOutOfBoundsException |
191 | 191 |
*/ |
192 |
public Image draw(Graphics2D g, ViewPortData vp)
|
|
192 |
public void draw(Graphics2D g, ViewPortData vp)
|
|
193 | 193 |
throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException; |
194 |
|
|
195 |
/** |
|
196 |
* <p> |
|
197 |
* This method throws the draw call in a Thread. This is useful to draw tiles. |
|
198 |
* </p> |
|
199 |
* <p> |
|
200 |
* Strategy: |
|
201 |
* <ul> |
|
202 |
* <li>If the image is out of the view the thread won't be thrown</li> |
|
203 |
* <li>Throw the thread to draw</li> |
|
204 |
* <li>The main thread waits until the secondary thread ends</li> |
|
205 |
* <li>When the buffer of a new tile has been received then nextBuffer is called from the store</li> |
|
206 |
* <li>When the last tile has been received then endReading is called from the store. This method unlocks the main |
|
207 |
* thread and will finish the process</li> |
|
208 |
* <li></li> |
|
209 |
* </ul> |
|
210 |
* </p> |
|
211 |
* |
|
212 |
* @see draw |
|
213 |
*/ |
|
214 |
public void drawThread(Graphics2D g, ViewPortData vp); |
|
215 |
|
|
216 |
/** |
|
217 |
* Sets the view structures to draw |
|
218 |
* @param g |
|
219 |
* @param vp |
|
220 |
*/ |
|
221 |
public void setGraphicInfo(Graphics2D g, ViewPortData vp); |
|
222 |
|
|
223 |
public void setReading(boolean reading); |
|
194 | 224 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/TileListener.java | ||
---|---|---|
1 |
/* gvSIG. Geographic Information System of the Valencian Government |
|
2 |
* |
|
3 |
* Copyright (C) 2007-2008 Infrastructures and Transports Department |
|
4 |
* of the Valencian Government (CIT) |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 2 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
*/ |
|
22 |
package org.gvsig.fmap.dal.coverage.grid.render; |
|
23 |
|
|
24 |
import java.awt.geom.AffineTransform; |
|
25 |
|
|
26 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
|
27 |
import org.gvsig.fmap.dal.coverage.datastruct.Extent; |
|
28 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
|
29 |
|
|
30 |
/** |
|
31 |
* This interface will receive events when a new tile arrives. When the last tile is |
|
32 |
* received then endReading will be called. |
|
33 |
* |
|
34 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
35 |
*/ |
|
36 |
public interface TileListener { |
|
37 |
|
|
38 |
/** |
|
39 |
* A new tile is received |
|
40 |
* @param b |
|
41 |
* @param e |
|
42 |
* @param t |
|
43 |
*/ |
|
44 |
public void nextBuffer(Buffer b, Extent e, AffineTransform t, double[] step) throws ProcessInterruptedException ; |
|
45 |
|
|
46 |
/** |
|
47 |
* The last tile is received |
|
48 |
*/ |
|
49 |
public void endReading(); |
|
50 |
|
|
51 |
/** |
|
52 |
* Returns true if the endReading wasn't be called yet |
|
53 |
*/ |
|
54 |
public boolean isReading(); |
|
55 |
|
|
56 |
} |
|
0 | 57 |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/RasterFilter.java | ||
---|---|---|
33 | 33 |
* |
34 | 34 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
35 | 35 |
*/ |
36 |
@SuppressWarnings("unchecked") |
|
36 | 37 |
public interface RasterFilter { |
37 | 38 |
/** |
38 | 39 |
* Acciones a realizar antes de la ejecuci?n del filtro |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/store/RasterQuery.java | ||
---|---|---|
23 | 23 |
|
24 | 24 |
import org.gvsig.fmap.dal.DataQuery; |
25 | 25 |
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException; |
26 |
import org.gvsig.fmap.dal.coverage.grid.render.TileListener; |
|
26 | 27 |
|
27 | 28 |
/** |
28 | 29 |
* Interfaz que contiene las operaciones que debe soportar la carga de datos |
... | ... | |
163 | 164 |
|
164 | 165 |
/** |
165 | 166 |
* Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen |
167 |
* estas coordenadas son ajustadas el extent. Si la petici?n es tileada se har? una llamada al listener cada vez |
|
168 |
* que se reciba un tile. |
|
169 |
* @param x Coordenada X, esquina superior izquierda |
|
170 |
* @param y Coordenada Y, esquina superior izquierda |
|
171 |
* @param w Ancho del ?rea |
|
172 |
* @param h Alto del ?rea |
|
173 |
* @param bufWidth Ancho del buffer |
|
174 |
* @param bufHeight Alto del buffer |
|
175 |
* @param listener Este listener es usado para recibir tiles. Cada vez que se recibe uno se har? una llamada. |
|
176 |
* @param frameWidthPx N?mero de tiles de exceso a pedir cuando la petici?n es tileada |
|
177 |
* @return En caso de que el buffer sea mayor que el tama?o seleccionado de raster se produce supersampleo. La funci?n devuelve |
|
178 |
* un array de dos elementos que representan el desplazamiento en pixels de X e Y de la esquina superior izquierda. |
|
179 |
* @throws ArrayIndexOutOfBoundsException |
|
180 |
* @throws InvalidSetViewException |
|
181 |
*/ |
|
182 |
public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameWidthPx); |
|
183 |
|
|
184 |
/** |
|
185 |
* Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen |
|
166 | 186 |
* estas coordenadas son ajustadas el extent. |
167 | 187 |
* @param x Coordenada X, esquina superior izquierda |
168 | 188 |
* @param y Coordenada Y, esquina superior izquierda |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/exception/TileReadingException.java | ||
---|---|---|
1 |
/* gvSIG. Geographic Information System of the Valencian Government |
|
2 |
* |
|
3 |
* Copyright (C) 2007-2008 Infrastructures and Transports Department |
|
4 |
* of the Valencian Government (CIT) |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 2 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
*/ |
|
22 |
package org.gvsig.fmap.dal.coverage.exception; |
|
23 |
|
|
24 |
import org.gvsig.tools.exception.BaseException; |
|
25 |
|
|
26 |
/** |
|
27 |
* This exception is thrown when a tile download or reading fails. |
|
28 |
* |
|
29 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
30 |
* |
|
31 |
*/ |
|
32 |
public class TileReadingException extends BaseException { |
|
33 |
private static final long serialVersionUID = 337663732071639106L; |
|
34 |
private static final String MESSAGE_KEY = "tile_access__exception"; |
|
35 |
|
|
36 |
public TileReadingException(String msg) { |
|
37 |
super(msg, null, MESSAGE_KEY, serialVersionUID); |
|
38 |
} |
|
39 |
|
|
40 |
public TileReadingException(String msg, Throwable e) { |
|
41 |
super(msg, e, MESSAGE_KEY, serialVersionUID); |
|
42 |
} |
|
43 |
} |
|
0 | 44 |
Also available in: Unified diff