Dear Nicholas, using imagemosaic with geotools 2.6.3 is surely the way to go.
Question, can you give the tiles that you are using in your test so that I can reproduce and fix the problem or at least provide some help? Simone. ------------------------------------------------------- Ing. Simone Giannecchini GeoSolutions S.A.S. Founder - Software Engineer Via Carignoni 51 55041 Camaiore (LU) Italy phone: +39 0584983027 fax: +39 0584983027 mob: +39 333 8128928 http://www.geo-solutions.it http://geo-solutions.blogspot.com/ http://www.linkedin.com/in/simonegiannecchini http://twitter.com/simogeo ------------------------------------------------------- On Tue, Apr 27, 2010 at 8:55 PM, Nicholas Bergson-Shilcock <[email protected]> wrote: > I'm working with tiff files from the National Elevation Dataset and have run > into some problems. Each file represents a tile, and I need to be able to > evaluate points within those tiles to get the elevation at specific points. > > // Point that is definitely in the tif file below > double x = -73.919996; > double y = 40.865797; > > File path = new > File("/Users/nicholasbs/dev/graph-data/ny/ned_tifs/ned--73.92_-73.76_40.959999999999994_40.8.tif"); > GeoTiffFormat tifFormat = new GeoTiffFormat(); > GeoTiffReader tifReader = (GeoTiffReader) tifFormat.getReader(path); > GridCoverage2D coverage = (GridCoverage2D) tifReader.read(null); > coverage = Interpolator2D.create(coverage, new InterpolationBilinear()); > > double[] result = new double[1]; > DirectPosition2D pos = new DirectPosition2D(x,y); > try { > result = coverage.evaluate((DirectPosition)pos, result); > System.out.println(result[0]); // *should* print 7.120205980059255 > } catch (PointOutsideCoverageException e) { > System.out.println("point not found"); // what is exactly printed > } > > This works great except for when you query for a point that falls on one of > the pixels directly on the edge the tiff. The outermost pixels aren't > considered to be inside the region. Pictures make this much clearer: > http://opentripplanner.org/attachment/ticket/163/bad_points.png and > http://opentripplanner.org/attachment/ticket/163/bad_points_zoom.png. The > markers represent the points that threw a PointOutsideCoverageException. > > Next, I tried creating an ImageMosaic as follows: > > GridCoverage coverage2 = null; > ImageMosaicFormatFactory formatFactory = new ImageMosaicFormatFactory(); > ImageMosaicFormat format = (ImageMosaicFormat) formatFactory.createFormat(); > ImageMosaicReader reader = (ImageMosaicReader) format.getReader( > "/Users/nicholasbs/dev/graph-data/ny/ned_test", null); > coverage2 = reader.read(new GeneralParameterValue[] {}); > coverage2 = Interpolator2D.create((GridCoverage2D) coverage2, new > InterpolationBilinear()); > > double[] result2 = new double[1]; > coverage2.evaluate(new DirectPosition2D(x, y), result2); > > System.out.println(result2[0]); // gt 2.5.7 prints 7.120205980059255; gt > 2.6.3 prints 0.0 > > This works with GeoTools 2.5.7, however, it is painfully slow. It takes > nearly 2.5 hours to process just my test region (for comparison, the approach > above takes less than a minute). Each call to evaluate() takes about 400ms. > > I tried upgrading to GeoTools 2.6.3. This runs about 100x faster, however, > evaluate() returns 0.0. for *all* points, so either I'm misusing something or > there's a bug in 2.6.3. > > Any idea what's going on here and/or what I should try next? > > Thanks in advance, > -Nick > > > ------------------------------------------------------------------------------ > _______________________________________________ > Geotools-gt2-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > ------------------------------------------------------------------------------ _______________________________________________ Geotools-gt2-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
