Revision 6403

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider/src/main/java/org/gvsig/raster/tilecache/provider/TileStructImage.java
65 65
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
66 66
import org.gvsig.tools.dynobject.DynObject;
67 67
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
68
import org.gvsig.tools.task.SimpleTaskStatus;
69 68

  
70 69
/**
71 70
 * Represents a tiled image
......
75 74
public class TileStructImage {
76 75

  
77 76
    private static final Logger logger = LoggerFactory.getLogger(TileStructImage.class);
78
    private static final int MAX_RECENT_ACCEDED_TILES_NUMBER = 200;
77
    private static final int MAX_RECENT_ACCEDED_TILES_NUMBER = 50;
79 78

  
80 79
    private int rowsPerTile;
81 80
    private int columnsPerTile;
......
92 91
    private int[] dataTypes;
93 92

  
94 93
    private IProjection crs;
95
    private SimpleTaskStatus taskStatus;
96 94
    private Envelope structExtent;
97
    //Este envelope sirve para calcular el nombre de las fila y columna del tile en la estructura de cach?
95
    // Este envelope sirve para calcular el nombre de la fila y columna del tile en la estructura de cach?.
98 96

  
99 97
    /**
100 98
     * @param folder
101 99
     * @param crs
102 100
     */
103 101
    public TileStructImage(File folder, IProjection crs){
104
//        builder = new StringBuilder();
105
//        builder.append("*********************");
106

  
107 102
      GeometryManager geoManager=GeometryLocator.getGeometryManager();
108 103

  
109 104
        this.crs=crs;
......
205 200
                            }
206 201
                        }
207 202
                    }
208

  
209 203
                }
210 204
            }
211

  
212
//            this.extension="tif";
213

  
214 205
        } catch (Exception e) {
215 206
            throw new RuntimeException();
216 207
        }
217
//        System.out.println(builder.toString());
218
//        builder.append("*********************");
219 208

  
220

  
221 209
    }
222 210

  
223
//    /**
224
//     * @param zoomLevel
225
//     */
226
//    private void readFolderTileStructure(int zoomLevel){
227
//        File zoomFolder=new File(tilesFolder,String.valueOf(zoomLevel));
228
//        String[] columnsNames = zoomFolder.list();
229
//        Set<Integer> columns = new HashSet<Integer>();
230
//        for (int i = 0; i < columnsNames.length; i++) {
231
//            columns.add(Integer.valueOf(FilenameUtils.getBaseName(columnsNames[i])));
232
//        }
233
//        ArrayList<Integer> columnsList = new ArrayList<Integer>();
234
//        columnsList.addAll(columns);
235
//        Collections.sort(columnsList);
236
//        this.columnsInZoomLevel.put(zoomLevel, columnsList);
237
//
238
//        int maxRows=0;
239
//        Integer firstColumn=columnsList.get(0);
240
//        Integer firstRow=null;
241
//        for (String columnName:columnsNames){
242
//            File columnFolder=new File(zoomFolder,columnName);
243
//            String[] filenames = columnFolder.list();
244
//            Set<Integer> rows = new HashSet<Integer>();
245
//            for (int i = 0; i < filenames.length; i++) {
246
//                rows.add(Integer.valueOf(FilenameUtils.getBaseName(filenames[i])));
247
//            }
248
//            if (rows.size()>maxRows){
249
//                maxRows=rows.size();
250
//            }
251
//            if (firstRow==null){
252
//                ArrayList<Integer> rowsList = new ArrayList<Integer>();
253
//                rowsList.addAll(rows);
254
//                Collections.sort(rowsList);
255
//                this.rowsInZoomLevel.put(zoomLevel, rowsList);
256
//                firstRow=rowsList.get(0);
257
//            }
258
//        }
259
//
260
//        //Leemos el primer tile para obtener el upperLeftPoint
261
//        File firstRowFile=null;
262
//        File firstColumnFolder=new File(zoomFolder,String.valueOf(firstColumn));
263
//        String rowBaseName = String.valueOf(firstRow);
264
//        File[] providerAcceptedFiles = firstColumnFolder.listFiles(factory);
265
//        for (int i = 0; i < providerAcceptedFiles.length; i++) {
266
//            File providerAcceptedFile = providerAcceptedFiles[i];
267
//            if(FilenameUtils.getBaseName(providerAcceptedFile.getAbsolutePath()).equalsIgnoreCase(rowBaseName)){
268
//                firstRowFile = providerAcceptedFile;
269
//            }
270
//        }
271
//        if ( firstRowFile!=null ){
272
//            DataManagerProviderServices manager =  DALSPILocator.getDataManagerProviderServices();
273
//            DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory(providerName);
274
//            DynObject params = providerFactory.createParameters();
275
//            if (params.getDynClass().getDynField("file")!=null){
276
//                params.setDynValue("file", firstRowFile);
277
//            }
278
//            if (params.getDynClass().getDynField("crs")!=null){
279
//                params.setDynValue("crs", this.crs);
280
//            }
281
//            try {
282
//                if(this.tileStore!=null){
283
//                    this.tileStore.dispose();
284
//                }
285
//                this.tileStore = (RasterStore) manager.openStore(providerName,params);
286
//                this.bandNumber=this.tileStore.getBands();
287
//                this.dataTypes=new int[this.bandNumber];
288
//                for (int i=0;i<this.bandNumber;i++){
289
//                    dataTypes[i]=this.tileStore.getBandInfo(i).getDataType();
290
//                }
291
//                Envelope firstTileEnvelope=this.tileStore.getEnvelope();
292
//                GeometryManager geoManager=GeometryLocator.getGeometryManager();
293
//                double minX = firstTileEnvelope.getMinimum(DIMENSIONS.X);
294
//                double maxY = firstTileEnvelope.getMaximum(DIMENSIONS.Y);
295
//                Envelope levelEnvelope=geoManager.createEnvelope(
296
//                    minX,
297
//                    maxY - ( getRows(zoomLevel)*pixelSizePerZoomLevel.get(zoomLevel) ),
298
//                    minX + ( getColumns(zoomLevel)*pixelSizePerZoomLevel.get(zoomLevel) ),
299
//                    maxY,
300
//                    SUBTYPES.GEOM2D);
301
////                builder.append("<level>\n");
302
////                builder.append("<index>");
303
////                builder.append(zoomLevel);
304
////                builder.append("</index>\n");
305
////                builder.append("<pixelSize>");
306
////                builder.append(pixelSizePerZoomLevel.get(zoomLevel));
307
////                builder.append("</pixelSize>\n");
308
////                builder.append("<extent>\n");
309
////                builder.append("<minX>");
310
////                builder.append(minX);
311
////                builder.append("</minX>\n");
312
////                builder.append("<minY>");
313
////                builder.append(maxY - ( getRows(zoomLevel)*pixelSizePerZoomLevel.get(zoomLevel) ));
314
////                builder.append("</minY>\n");
315
////                builder.append("<maxX>");
316
////                builder.append(minX + ( getColumns(zoomLevel)*pixelSizePerZoomLevel.get(zoomLevel) ));
317
////                builder.append("</maxX>\n");
318
////                builder.append("<maxY>");
319
////                builder.append(maxY);
320
////                builder.append("</maxY>\n");
321
////                builder.append("</extent>\n");
322
////                builder.append("</level>\n");
323
//
324
//                envelopePerZoomLevel.put(zoomLevel, levelEnvelope);
325
//
326
//
327
//            } catch (ValidateDataParametersException |
328
//                  CreateEnvelopeException | DataException e) {
329
//                logger.info("Can't read tile", e);
330
//                // TODO exception
331
//
332
//            }
333
//            this.extension = FilenameUtils.getExtension(firstRowFile.getAbsolutePath());
334
//        }else{
335
//            logger.info("Can't read tile structure");
336
//
337
//        }
338
//    }
339

  
340 211
    /**
341 212
     * @param pixelSize
342 213
     * @return The appropiate zoom level for the pizelSize
......
394 265
        } else {
395 266
            // Cargar un tile nuevo
396 267
            Buffer rasterSet = null;
397
            File tileFile = null;
398 268
            RasterStore tileStore = null;
399 269
            try {
400 270
                tileStore = createTileStore(zoomLevel, structRow, structCol);
......
471 341
     * @throws ValidateDataParametersException
472 342
     */
473 343
    public RasterStore getDelegatedRasterStore() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException{
474
        int[] structRowCol = calculateStructRowCol(0, 0, 0);
344
        int[] structRowCol = calculateStructRowCol(pixelSizePerZoomLevel.firstKey(), 0, 0);
475 345
        return createTileStore(0, structRowCol[0], structRowCol[1]);
476 346
    }
477 347

  
......
536 406

  
537 407
    /**
538 408
     * @param zoomLevel
539
     * @return envelope por zoom level
409
     * @return envelope per zoom level
540 410
     */
541 411
    public Envelope getEnvelopePerZoomLevel(int zoomLevel){
542
        if(envelopePerZoomLevel.isEmpty()){
412
        Envelope envelope = envelopePerZoomLevel.get(zoomLevel);
413
        if(envelope==null){
543 414
            return structExtent;
544 415
        }
545
        return envelopePerZoomLevel.get(zoomLevel);
416
        return envelope;
546 417
    }
547 418

  
548 419
    /**
......
577 448
    }
578 449

  
579 450
    private void removeOlderTile(){
580

  
581 451
        Tile olderTile = null;
582
        for (Iterator iterator = recentAccededTiles.values().iterator(); iterator.hasNext();) {
452
        for (Iterator<Tile> iterator = recentAccededTiles.values().iterator(); iterator.hasNext();) {
583 453
            Tile tile = (Tile) iterator.next();
584 454
            if(olderTile == null || tile.getLastAccess()<olderTile.getLastAccess()){
585 455
                olderTile = tile;

Also available in: Unified diff