package com.vividsolutions.jump.workbench.imagery.mrsid; /* * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI * for visualizing and manipulating spatial features with geometry and attributes. * * Copyright (C) 2003 Vivid Solutions * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * For more information, contact: * * Vivid Solutions * Suite #1A * 2328 Government Street * Victoria BC V8T 5G5 * Canada * * (250)385-6040 * www.vividsolutions.com */ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import com.vividsolutions.jump.JUMPException; public class SIDInfo { private String fileName; private int pixelWidth; private int pixelHeight; private double xres; private double xrot; private double yrot; private double yres; private double upper_left_x; //realworld coords private double upper_left_y; //realworld coords private int numLevels; private String colorSpace; SIDInfo(String fileName, int pixelWidth, int pixelHeight, double xres, double xrot, double yrot, double yres, double ulx, double uly, int numLevels, String colorSpace) { this.fileName = fileName; this.pixelWidth = pixelWidth; this.pixelHeight = pixelHeight; this.xres = xres; this.xrot = xrot; this.yrot = yrot; this.yres = yres; this.upper_left_x = ulx; this.upper_left_y = uly; this.numLevels = numLevels; this.colorSpace = colorSpace; } String getFileName() { return fileName; } int getPixelWidth() { return pixelWidth; } int getPixelHeight() { return pixelHeight; } double getXRes() { return xres; } double getXRot() { return xrot; } double getYRot() { return yrot; } double getYRes() { return yres; } double getUpperLeftX() { return upper_left_x; } double getUpperLeftY() { return upper_left_y; } int getNumLevels() { return numLevels; } String getColorSpace() { return colorSpace; } static SIDInfo readInfo(String sidFilename) throws JUMPException { int sidPixelWidth = 0; int sidPixelHeight = 0; double sid_xres = 1; double sid_xrot = 0; double sid_yrot = 0; double sid_yres = 1; double sid_ulx = 0; //realworld coords double sid_uly = 0; //realworld coords int maxLevel = 0; int numInfoItems = 0; String colorSpace = null; try { File file = File.createTempFile("MrSIDinfo","txt"); String [] runStr = { MrSIDImageFactory.MRSIDINFO, sidFilename, // "-sid", "-quiet", "-log", file.getPath() }; Process p = Runtime.getRuntime().exec(runStr); p.waitFor(); p.destroy(); if (!(file.exists() && file.isFile() && file.canRead())) return null; //this could happen if mrsidinfo.exe couldn't produce a file //read the info FileReader fin = new FileReader(file); BufferedReader in = new BufferedReader(fin); String lineIn = in.readLine(); while (in.ready()) { String value = ""; if (lineIn.indexOf("width:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sidPixelWidth = Integer.parseInt(value.trim()); numInfoItems++; } if (lineIn.indexOf("height:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sidPixelHeight = Integer.parseInt(value.trim()); numInfoItems++; } if (lineIn.indexOf("number of levels:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); maxLevel = Integer.parseInt(value.trim()); numInfoItems++; } if (lineIn.indexOf("X UL:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sid_ulx = Double.parseDouble(value.trim()); numInfoItems++; } if (lineIn.indexOf("Y UL:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sid_uly = Double.parseDouble(value.trim()); numInfoItems++; } if (lineIn.indexOf("X res:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sid_xres = Double.parseDouble(value.trim()); numInfoItems++; } if (lineIn.indexOf("Y res:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); sid_yres = Double.parseDouble(value.trim()); numInfoItems++; } if (lineIn.indexOf("color space:") != -1) { value = lineIn.substring(lineIn.indexOf(":") + 1); colorSpace = value.trim(); numInfoItems++; } lineIn = in.readLine(); } in.close(); fin.close(); if (numInfoItems == 8) return new SIDInfo(sidFilename, sidPixelWidth, sidPixelHeight, sid_xres, sid_xrot, sid_yrot, sid_yres, sid_ulx, sid_uly, maxLevel, colorSpace); else return null; } catch (Throwable t) { throw new JUMPException(t.getMessage()); } } }