geotiffmodelfactory.java

来自「OpenMap是一个基于JavaBeansTM的开发工具包。利用OpenMap你」· Java 代码 · 共 136 行

JAVA
136
字号
//**********************************************************************////<copyright>////BBN Technologies//10 Moulton Street//Cambridge, MA 02138//(617) 873-8000////Copyright (C) BBNT Solutions LLC. All rights reserved.////</copyright>//**********************************************************************////$Source:///cvs/darwars/ambush/aar/src/com/bbn/ambush/mission/MissionHandler.java,v//$//$RCSfile: GeoTIFFModelFactory.java,v $//$Revision: 1.2.2.3 $//$Date: 2007/01/22 15:52:58 $//$Author: dietrick $////**********************************************************************package com.bbn.openmap.dataAccess.image.geotiff;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import org.geotiff.image.KeyRegistry;import org.geotiff.image.jai.GeoTIFFDirectory;import com.bbn.openmap.dataAccess.image.ErrImageTile;import com.bbn.openmap.dataAccess.image.ImageTile;public class GeoTIFFModelFactory {    public static Logger logger = Logger.getLogger("com.bbn.openmap.dataAccess.geotiff.GeoTIFFModelFactory");    protected GeoTIFFFile gtfFile;    public GeoTIFFModelFactory(GeoTIFFFile gtf) {        gtfFile = gtf;    }    public ImageTile getImageTile() throws IOException {        return getImageTile(null, null);    }    public ImageTile getImageTile(GeoTIFFImageReader gtid,                                  ImageTile.Cache cache) throws IOException {        int modelType = gtfFile.getModelType();        ImageTile ret = null;        String errorMessage = null;        /*         * ModelTypeProjected = 1 (Projection Coordinate System)         * ModelTypeGeographic = 2 Geographic latitude-longitude System)         * ModelTypeGeocentric = 3 (Geocentric (X,Y,Z) Coordinate System)         */        int modelID = -1;        switch (modelType) {        case 1:            modelID = gtfFile.getProjectedCSType();            errorMessage = "Projection Model type (" + modelID + ", "                    + KeyRegistry.getKey(KeyRegistry.EPSG_PCS, modelID)                    + ") not handled yet";            if (logger.isLoggable(Level.FINE)) {                logger.info(errorMessage);            }            ret = new ErrImageTile("Image can't be positioned: "                    + errorMessage);            break;        case 2:        case 3:            modelID = gtfFile.getGeographicType();            if (logger.isLoggable(Level.FINE)) {                logger.info("GeoModel type (" + modelID + "): "                        + KeyRegistry.getKey(KeyRegistry.EPSG_GCS, modelID));            }            switch (modelID) {            case 4326:                ret = get4326(gtid, cache);                break;            default:                errorMessage = "GeoModel type (" + modelID + ", "                        + KeyRegistry.getKey(KeyRegistry.EPSG_GCS, modelID)                        + ") not handled yet";                logger.info(errorMessage);                ret = new ErrImageTile("Image can't be positioned: "                        + errorMessage);            }        }        return ret;    }    protected ImageTile get4326(GeoTIFFImageReader gtid, ImageTile.Cache cache)            throws IOException {        // GCS_WGS_84        GeoTIFFDirectory gtfd = gtfFile.getGtfDirectory();        // There's got to be a way to figure out the pixel height and width of        // the image without having to create the BufferedImage. We need those        // for georeferencing the lower right corner right now, but it would be        // good to only create the image if an ImageDecoder and cache weren't        // provided.        double[] tiePoints = gtfd.getTiepoints();        double[] scaleMatrix = gtfd.getPixelScale();        int imageWidth = gtfFile.getFieldIntValue(256);        int imageHeight = gtfFile.getFieldIntValue(257);        double ulat = tiePoints[4] + tiePoints[1] * scaleMatrix[1];        double llon = tiePoints[3] - tiePoints[0] * scaleMatrix[0];        double llat = tiePoints[4] - imageHeight * scaleMatrix[1];        double rlon = tiePoints[3] + imageWidth * scaleMatrix[0];        if (logger.isLoggable(Level.FINE)) {            logger.info("Image should be at: " + ulat + ", " + llon                    + " - to - " + llat + ", " + rlon);        }        if (gtid == null) {            BufferedImage bi = gtfFile.getBufferedImage();            return new ImageTile((float) ulat, (float) llon, (float) llat, (float) rlon, bi);        } else {            return new ImageTile((float) ulat, (float) llon, (float) llat, (float) rlon, gtid, cache);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?