package edu.oregonstate.cartography.grid; import java.io.BufferedReader; import java.io.IOException; import java.util.StringTokenizer; /** * * @author bernie */ public class GridHeaderImporter { private int cols = 0; private int rows = 0; private double west = Double.NaN; private double south = Double.NaN; private double cellSize = Double.NaN; private float noDataValue = Float.NaN; /* * returns whether valid values have been found */ protected boolean isValid() { return cols > 0 && rows > 0 && cellSize > 0 && !Double.isNaN(west) && !Double.isNaN(south); // noDataValue is optional } String readHeader(BufferedReader reader, boolean stopOnFirstUnknownLine) throws IOException { cols = rows = 0; west = south = cellSize = Double.NaN; noDataValue = Float.NaN; String line; while ((line = reader.readLine()) != null) { StringTokenizer tokenizer = new StringTokenizer(line, " \t,;"); String str = tokenizer.nextToken().trim().toLowerCase(); if (str.equals("ncols")) { cols = Integer.parseInt(tokenizer.nextToken()); } else if (str.equals("nrows")) { rows = Integer.parseInt(tokenizer.nextToken()); } else if (str.equals("xllcenter") || str.equals("xllcorner")) { west = Double.parseDouble(tokenizer.nextToken()); } else if (str.equals("yllcenter") || str.equals("yllcorner")) { south = Double.parseDouble(tokenizer.nextToken()); } else if (str.equals("cellsize")) { cellSize = Double.parseDouble(tokenizer.nextToken()); } else if (str.startsWith("nodata")) { noDataValue = Float.parseFloat(tokenizer.nextToken()); } else { // done reading the header if (stopOnFirstUnknownLine) { return line; } } } return null; } /** * @return the cols */ public int getCols() { return cols; } /** * @return the rows */ public int getRows() { return rows; } /** * @return the west */ public double getWest() { return west; } /** * @return the south */ public double getSouth() { return south; } /** * @return the cellSize */ public double getCellSize() { return cellSize; } /** * @return the noDataValue */ public float getNoDataValue() { return noDataValue; } }