001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/model/coverage/grid/TiffDEMParser.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.model.coverage.grid;
044:
045: import java.awt.image.BufferedImage;
046: import java.awt.image.DataBuffer;
047: import java.io.File;
048:
049: import org.apache.batik.ext.awt.image.codec.FileCacheSeekableStream;
050: import org.apache.batik.ext.awt.image.codec.tiff.TIFFDecodeParam;
051: import org.apache.batik.ext.awt.image.codec.tiff.TIFFImage;
052:
053: /**
054: * Parses 4 channel (32Bit) tiff images as DEM and returns a float matrix containing the DEM heights
055: *
056: *
057: * @version $Revision: 9343 $
058: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
059: * @author last edited by: $Author: apoth $
060: *
061: * @version 1.0. $Revision: 9343 $, $Date: 2007-12-27 05:30:32 -0800 (Thu, 27 Dec 2007) $
062: *
063: * @since 2.0
064: */
065: public class TiffDEMParser {
066:
067: private DataBuffer db;
068:
069: private float scale = 0;
070:
071: private float offset = 0;
072:
073: private int width = 0;
074:
075: private int height = 0;
076:
077: /**
078: *
079: * @param dataFile
080: * image containing DEM data instead color information
081: */
082: public TiffDEMParser(File dataFile) {
083: this (dataFile, 1, 0);
084: }
085:
086: /**
087: *
088: * @param dataFile
089: * image containing DEM data instead color information
090: * @param scale
091: * scale factor; newHeight[i][j] = height[i][j] * scale
092: */
093: public TiffDEMParser(File dataFile, float scale) {
094: this (dataFile, scale, 0);
095: }
096:
097: /**
098: *
099: * @param dataFile
100: * image containing DEM data instead color information
101: * @param scale
102: * scale factor; newHeight[i][j] = height[i][j] * scale
103: * @param offset
104: * height offset; newHeight[i][j] = height[i][j] + offset
105: */
106: public TiffDEMParser(File dataFile, float scale, float offset) {
107: try {
108: FileCacheSeekableStream fss = new FileCacheSeekableStream(
109: dataFile.toURL().openStream());
110: TIFFImage tiff = new TIFFImage(fss, new TIFFDecodeParam(),
111: 0);
112: db = tiff.getData().getDataBuffer();
113: width = tiff.getWidth();
114: height = tiff.getHeight();
115: } catch (Exception e) {
116: e.printStackTrace();
117: }
118: this .scale = scale;
119: this .offset = offset;
120: }
121:
122: /**
123: *
124: * @param data
125: * image containing DEM data instead color information
126: */
127: public TiffDEMParser(BufferedImage data) {
128: this (data, 1, 0);
129: }
130:
131: /**
132: *
133: * @param data
134: * image containing DEM data instead color information
135: * @param scale
136: * scale factor; newHeight[i][j] = height[i][j] * scale
137: */
138: public TiffDEMParser(BufferedImage data, float scale) {
139: this (data, scale, 0);
140: }
141:
142: /**
143: *
144: * @param data
145: * @param scale
146: * scale factor; newHeight[i][j] = height[i][j] * scale
147: * @param offset
148: * height offset; newHeight[i][j] = height[i][j] + offset
149: */
150: public TiffDEMParser(BufferedImage data, float scale, float offset) {
151: this .db = data.getRaster().getDataBuffer();
152: this .scale = scale;
153: this .offset = offset;
154: width = data.getWidth();
155: height = data.getHeight();
156: }
157:
158: /**
159: * returns the DEM heights as float matrix
160: *
161: * @return the DEM heights as float matrix
162: */
163: public float[][] parse() {
164:
165: float[][] terrain = new float[height][width];
166:
167: for (int j = 0; j < height; j++) {
168: for (int i = 0; i < width; i++) {
169: terrain[j][i] = db.getElemFloat(width * j + i) * scale
170: + offset;
171: }
172: }
173:
174: return terrain;
175:
176: }
177:
178: }
|