From: Jan G. <goy...@te...> - 2008-04-03 19:24:29
|
Hello Simone, Thanks for your reply. I'm aware geotiff can contain multiple multi-levelled&tiled images, but I didn't know geotools was able to cope with this directly. I assumed some pre-processing was required: splitting into separate files and indexing them using one shp file. Just out of curiosity, in what situations is this technique useful ? When the data format doesn't allow for multiple levels and tiles ? I'll put gdal to work tomorrow to prepare a geotiff file. I assume with 2/4/8/16/... you mean the various levels of the geotiff file ? The second level half the size, the third a fourth of the size, etc... ? Concerning the third point - feeding the reader instead of the converage - I assume one uses the coverage when the raster needs to reside completely into memory and the reader for lazy loading of parts of the raster. Correct ? Many thanks for helping me !! Jan On Thu, 3 Apr 2008 18:43:06 +0200 "Simone Giannecchini" <sim...@gm...> wrote: > Ciao Jan, > I am chiming in a bit late but I'll try to be helpful anyway. > I scanned quickly this email so I might have not understood everything > correclty, let me try to summarize (and ask some questions along the > line): > > 1> you had a big geotiff (2GB (30000x20000px) GeoTIFF) that you wanted to show > 2> you tiled it small chunks of 512,512 > 3> you build an index for it > 4> you are expeting to render it on a 640x480 window. > > Let's assume that so far, I am right. > Well, I think you went down the wrong path, since you are trying to > compose too many files at the same time and also you are subsampling > them on the fly to get the final small output raster. > > Here is what i would do instead. > 1>if the original geotiff is not tiled, tile it using gdal_translate > and a tile size of 512,512. Note that I am not talking about splitting > the geotiff in N smaller geotiff files, I am talking about ineer > tiling (check the ggdal tiff driver options or I'll tell you how to > get there) > 2> use gdal_addo and add overviews to the tiled geotiff. I usually use > 2 4 8 16 32 64 128 level with average resampling for better visual > quality )no aliasing) > 3> ffed the mapcontext with the reader not with the coverage itself, > so that the renderer will choose the best resolution at rendering time > > > Ciao, > Simone. > > On Thu, Apr 3, 2008 at 6:24 PM, Jan Goyvaerts <goy...@te...> wrote: > > > > Okay, I wasn't aware Linux has a hard coded limit of 1024 open files. I guess > > a proxy pattern on the ImageInputStream would solve this problem. Anyway, > > using bigger and less tiles solves this issue. > > > > I don't have any exceptions now, but I can't get the image displayed. The > > application eats away any resource I'm throwing to it. It is stuck at > > GridCoverageRenderer.paint():754 (graphics.drawRenderedImage()). As my > > viewport is 640x480 and the 882 tiles are 512x512 I'm probably doing some > > beginners mistake when the program starts easting away all memory it gets. > > > > I'm putting the code sample I'm using in this message. If somebody sees my > > mistake, please tell me. > > > > Many thanks for help me !!! > > > > Jan > > > > // (1) initialize the reader > > File indexFile = new File( "/u01/data/BlueMarble/split2/tiles_index.shp" > > ); > > ImageMosaicReader reader = new ImageMosaicReader( indexFile ); > > > > // (2) create the coverage > > GridCoverage coverage = reader.read( null ); > > > > // (3) create the style - it's a raster so we need a raster symbolizer > > StyleBuilder styleBuilder = new StyleBuilder(); > > RasterSymbolizer rasterSymbolizer = > > styleBuilder.createRasterSymbolizer(); > > rasterSymbolizer.setGeometryPropertyName( "geom" ); > > Style style = styleBuilder.createStyle( rasterSymbolizer ); > > > > // (4) create the layer; > > DefaultMapLayer layer = new DefaultMapLayer( coverage, style ); > > layer.setTitle( "Test" ); > > layer.setVisible( true ); > > > > // (5) create the map context > > MapContext map = new DefaultMapContext( WGS84 ); > > map.addLayer( layer ); > > > > // (6) create the renderer > > GTRenderer renderer = new StreamingRenderer(); > > RenderingHints hints = new RenderingHints( > > RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); > > Map<String, Object> rendererParams = new HashMap<String, Object>(); > > rendererParams.put( "optimizedDataLoadingEnabled", new Boolean( true ) > > ); > > renderer.setJava2DHints( hints ); > > renderer.setRendererHints( rendererParams ); > > > > // (7) assemble the created components into a regular Swing frame > > JMapPane panel = new JMapPane( renderer, map ); > > panel.setMapArea( map.getAreaOfInterest() ); > > > > JFrame frame = new JFrame( "TrueMarble.2km.21600x10800.tif" ); > > frame.setSize( 640, 480 ); > > frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); > > frame.getContentPane().add( panel ); > > frame.setVisible( true ); > > > > > > Jan Goyvaerts wrote: > > > > > > Hello Diego, > > > > > > I'm trying to do roughly the same with the Bleumarble data set. I tiled a > > > geotiff file using your script - very useful ! - and now I'm trying to use > > > the ImageMosaic plugin to display it in a layer of a JMapPanel. I was > > > wondering whether you managed to make it work because I'm having a weird > > > problem: When the tiles are read by ImageIO from some point the > > > createImageInputStream() method only returns nulls. (After having read > > > successfully 903 tiles.) The very same file can be displayed individually > > > though. > > > > > > Wondering this might be soft/weak reference problem I tried with increased > > > heap sizes. Alas, with the same result. As far as I can see the .prj and > > > .properties files are ok. > > > > > > By any chance, did you ran into a similar issue ? I'm rather new to > > > GeoTools, so if you have a code sample of some kind to help me out that > > > would be great. > > > > > > Many thanks ! > > > > > > Jan > > > > > > > > > Diego Fdez. Durán wrote: > > >> > > >> Step by step. > > >> > > >> I've done a little script[1] that chops a big GeoTIFF in tiles using > > >> gdal[2], and generates the .shp index file. Feel free to put it in the > > >> GeoTools doc if you found it interesting. > > >> > > >> Tomorrow I'll try using ImageMosaic to load the image (I suppose that I > > >> only have to load the .shp file and the plugin do the .tif loading > > >> itself). > > >> > > >> :) > > >> > > >> [1] > > >> -- BEGIN SCRIPT > > >> #!/bin/bash > > >> # > > >> # This script divides a GeoTIFF file in tiles and generates a .shp index > > >> file. > > >> # > > >> # Diego Fdez. Durán <di...@go...> > > >> # AAC IAF - Universidad de León - 2007 > > >> > > >> > > >> TILESIZE=256 > > >> STORE_DIR="tiles" > > >> INDEX_FILE="index_tiles.shp" > > >> > > >> usage() { > > >> echo "Usage: $0 file.tif [tilesize]" > > >> } > > >> > > >> if [ -n "$1" ] && [ -e $1 ]; then > > >> MAP_FILE=$1 > > >> else > > >> usage > > >> exit -1; > > >> fi > > >> > > >> STR=( `gdalinfo $MAP_FILE | grep ^Size | cut -d' ' -f3,4 | sed s/','/' > > >> '/` ) > > >> MAP_H_RES=${STR[0]} > > >> MAP_V_RES=${STR[1]} > > >> > > >> > > >> if [ -n "$2" ]; then > > >> TILESIZE=$2 > > >> fi > > >> > > >> if [ ! -d "$STORE_DIR" ]; then > > >> mkdir $STORE_DIR > > >> fi > > >> > > >> let "N_H_TILES=$MAP_H_RES / $TILESIZE" > > >> let "N_V_TILES=$MAP_V_RES / $TILESIZE" > > >> let "N_TILES=$N_H_TILES * $N_V_TILES" > > >> > > >> > > >> echo "File: $MAP_FILE of ${MAP_H_RES}x${MAP_V_RES}px" > > >> echo "Generating $N_TILES (${N_H_TILES}*${N_V_TILES}) ${TILESIZE}x > > >> ${TILESIZE}px tiles" > > >> > > >> COUNT=1 > > >> for ((i=0; i < N_H_TILES; i++)) > > >> do > > >> let "H_OFFSET=$i * $TILESIZE" > > >> for ((j=0; j < N_V_TILES; j++)) > > >> do > > >> let "V_OFFSET=$j * $TILESIZE" > > >> let "PERCENT=(($COUNT / $N_TILES) * 100)" > > >> TILE_FILE="tile-${i}_${j}.tif" > > >> echo -ne "Working: $COUNT/$N_TILES ($PERCENT%) :: > > >> Creating tile $TILE_FILE\r" > > >> gdal_translate -of GTiff -co "TILED=YES" -srcwin > > >> $H_OFFSET $V_OFFSET $TILESIZE $TILESIZE $MAP_FILE $STORE_DIR/$TILE_FILE > > >>> /dev/null > > >> let "COUNT=$COUNT + 1" > > >> done > > >> done > > >> > > >> > > >> echo "Generating tile index $INDEX_FILE" > > >> gdaltindex tiles_index.shp tiles/*.tif > > >> -- END SCRIPT > > >> > > >> [2] http://www.gdal.org/ > > >> > > >> > > >> El sáb, 01-12-2007 a las 14:21 -0800, Jody Garnett escribió: > > >>> They made a BigTIFF "fake specification" recently for which you may want > > >>> to look around. Creatively named BIGTIFF I think. > > >>> > > >>> Two things: > > >>> 1) just try it; grab the uDig tech preview > > >>> - http://udig.refractions.net/downloads/ECWDemo.win32.win32.x86.zip > > >>> - http://udig.refractions.net/downloads/jre/jre1.6.0_03.win32.zip (in > > >>> zip this JRE into the same folder; it contains imageio-ext for geotiff) > > >>> (ImageIO is good about leaving the image on disk so it may be slow but > > >>> you should see something) > > >>> > > >>> 2) image moasic (break the image up using gdal or some imageio tools > > >>> and use a shapefile to keep track of this parts) > > >>> - http://docs.codehaus.org/display/GEOTDOC/Image+Mosaic+Plugin > > >>> The above page links to most of the information I could find (including > > >>> a tutorial of breaking up a large bluemarble image); I have been using > > >>> the result (amazing!) but have not tried breaking up an image yet. > > >>> > > >>> Cheers, > > >>> Jody > > >>> > Hi all: > > >>> > > > >>> > I'm trying visualize a 2GB (30000x20000px) GeoTIFF. I need to show a > > >>> > 1280x800px viewport of the image and be able to navigate through the > > >>> > full GeoTIFF. > > >>> > > > >>> > Is there any way to do this? > > >>> > > > >>> > - Directly working with the GeoTIFF. > > >>> > - Dividing the GeoTIFF in small tiles of 256x256px and doing on > > >>> demand > > >>> > loading? (How can I divide the GeoTiFF?) > > >>> > > > >>> > Can you point me in the right direction? > > >>> > > > >>> > Thanks in advance. > > >>> > > > >>> > > > >>> > > > >>> ------------------------------------------------------------------------ > > >>> > > > >>> > > > >>> ------------------------------------------------------------------------- > > >>> > SF.Net email is sponsored by: The Future of Linux Business White Paper > > >>> > from Novell. From the desktop to the data center, Linux is going > > >>> > mainstream. Let it simplify your IT future. > > >>> > http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 > > >>> > > > >>> ------------------------------------------------------------------------ > > >>> > > > >>> > _______________________________________________ > > >>> > Geotools-gt2-users mailing list > > >>> > Geo...@li... > > >>> > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > >>> > > > >>> > > >> -- > > >> Diego Fdez. Durán <di...@go...> | http://www.goedi.net > > >> GPG : 925C 9A21 7A11 3B13 6E43 50DB F579 D119 90D2 66BB > > >> > > >> > > >> > > >> ------------------------------------------------------------------------- > > >> SF.Net email is sponsored by: The Future of Linux Business White Paper > > >> from Novell. From the desktop to the data center, Linux is going > > >> mainstream. Let it simplify your IT future. > > >> http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 > > >> _______________________________________________ > > >> Geotools-gt2-users mailing list > > >> Geo...@li... > > >> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > >> > > >> > > > > > > > > > > -- > > View this message in context: http://www.nabble.com/VERY-big-GeoTIFF-drawing-tp14109985p16467800.html > > Sent from the geotools-gt2-users mailing list archive at Nabble.com. > > > > > > ------------------------------------------------------------------------- > > Check out the new SourceForge.net Marketplace. > > It's the best place to buy or sell services for > > just about anything Open Source. > > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > > _______________________________________________ > > Geotools-gt2-users mailing list > > Geo...@li... > > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > > > > > -- > ------------------------------------------------------- > Eng. Simone Giannecchini > President /CEO GeoSolutions S.A.S. > Via Carignoni 51 > 55041 Camaiore (LU) > Italy > > phone: +39 0584983027 > fax: +39 0584983027 > mob: +39 333 8128928 > > > http://www.geo-solutions.it > > ------------------------------------------------------- > -- Jan Goyvaerts <goy...@te...> |