/* * Copyright 1998-2013 University Corporation for Atmospheric Research/Unidata * * Portions of this software were developed by the Unidata Program at the * University Corporation for Atmospheric Research. * * Access and use of this software shall impose the following obligations * and understandings on the user. The user is granted the right, without * any fee or cost, to use, copy, modify, alter, enhance and distribute * this software, and any derivative works thereof, and its supporting * documentation for any purpose whatsoever, provided that this entire * notice appears in all copies of the software, derivative works and * supporting documentation. Further, UCAR requests that the user credit * UCAR/Unidata in any publications that result from the use of this * software or in any product that includes this software. The names UCAR * and/or Unidata, however, may not be used in any advertising or publicity * to endorse or promote any products or commercial entity unless specific * written permission is obtained from UCAR/Unidata. The user also * understands that UCAR/Unidata is not obligated to provide the user with * any support, consulting, training or assistance of any kind with regard * to the use, operation and performance of this software nor to provide * the user with any updates, revisions, new versions or "bug fixes." * * THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. */ package ucar.nc2.iosp.vis5d; import ucar.nc2.iosp.grid.*; import ucar.nc2.iosp.mcidas.McGridDefRecord; /** * Class to hold the Vis5D grid navigation information. * * @author Unidata Development Team */ public class Vis5DGridDefRecord extends GridDefRecord { private static final int PROJ_GENERIC = 0; private static final int PROJ_LINEAR = 1; private static final int PROJ_CYLINDRICAL = 20; private static final int PROJ_SPHERICAL = 21; private static final int PROJ_LAMBERT = 2; private static final int PROJ_STEREO = 3; private static final int PROJ_ROTATED = 4; private int projection; //private Vis5DCoordinateSystem coord_sys; /** * Create a new grid nav block with the values * * @param Projection _more_ * @param projargs _more_ * @param nr _more_ * @param nc _more_ */ public Vis5DGridDefRecord(int Projection, double[] projargs, int nr, int nc) { projection = Projection; //coord_sys = new Vis5DCoordinateSystem(Projection, projargs, nr, nc); setParams(Projection, projargs); addParam(GDS_KEY, this.toString()); } /** * Get a short name for this GDSKey for the netCDF group. * Subclasses should implement as a short description * * @return short name */ public String getGroupName() { return getParam(PROJ) + "_" + getParam(NX) + "x" + getParam(NY); } public String toString() { // TODO: make this more unique return getParam(PROJ) + " X:" + getParam(NX) + " " + "Y:" + getParam(NY) + " Proj:" + projection; } public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Vis5DGridDefRecord)) { return false; } return this.toString().equals(o.toString()); } public int hashCode() { return toString().hashCode(); } private void setParams(int Projection, double[] projargs) { double NorthBound; double SouthBound; double WestBound; double EastBound; double RowInc; double ColInc; double Lat1; double Lat2; double PoleRow; double PoleCol; double CentralLat; double CentralLon; double CentralRow; double CentralCol; double Rotation; /* radians */ double Cone; double Hemisphere; double ConeFactor; double CosCentralLat; double SinCentralLat; double StereoScale; double InvScale; double CylinderScale; switch (Projection) { case PROJ_GENERIC: addParam(PROJ, "GENERIC"); case PROJ_LINEAR: addParam(PROJ, "LINEAR"); case PROJ_CYLINDRICAL: addParam(PROJ, "CYLINDRICAL"); case PROJ_SPHERICAL: addParam(PROJ, "SPHERICAL"); NorthBound = projargs[0]; WestBound = -projargs[1]; RowInc = projargs[2]; ColInc = projargs[3]; addParam(LA1, String.valueOf(NorthBound)); addParam(LO1, String.valueOf(WestBound)); addParam(DX, String.valueOf(ColInc)); addParam(DY, String.valueOf(RowInc)); break; case PROJ_ROTATED: addParam(PROJ, "ROTATED"); NorthBound = projargs[0]; WestBound = projargs[1]; RowInc = projargs[2]; ColInc = projargs[3]; CentralLat = projargs[4]; CentralLon = projargs[5]; Rotation = projargs[6]; break; case PROJ_LAMBERT: addParam(PROJ, "LAMBERT"); Lat1 = projargs[0]; Lat2 = projargs[1]; PoleRow = projargs[2]; PoleCol = projargs[3]; CentralLon = projargs[4]; ColInc = projargs[5]; break; case PROJ_STEREO: addParam(PROJ, "STEREO"); CentralLat = projargs[0]; CentralLon = projargs[1]; CentralRow = projargs[2]; CentralCol = projargs[3]; ColInc = projargs[4]; break; } } /** * _more_ * * @param Projection _more_ * @param projargs _more_ */ public static void printProjArgs(int Projection, double[] projargs) { double NorthBound; double SouthBound; double WestBound; double EastBound; double RowInc; double ColInc; double Lat1; double Lat2; double PoleRow; double PoleCol; double CentralLat; double CentralLon; double CentralRow; double CentralCol; double Rotation; /* radians */ double Cone; double Hemisphere; double ConeFactor; double CosCentralLat; double SinCentralLat; double StereoScale; double InvScale; double CylinderScale; switch (Projection) { case PROJ_GENERIC: case PROJ_LINEAR: case PROJ_CYLINDRICAL: case PROJ_SPHERICAL: NorthBound = projargs[0]; WestBound = projargs[1]; RowInc = projargs[2]; ColInc = projargs[3]; System.out.println("Generic, Linear, Cylindrical, Spherical:"); System.out.println("NB: " + NorthBound + ", WB: " + WestBound + ", rowInc: " + RowInc + ", colInc: " + ColInc); break; case PROJ_ROTATED: NorthBound = projargs[0]; WestBound = projargs[1]; RowInc = projargs[2]; ColInc = projargs[3]; CentralLat = projargs[4]; CentralLon = projargs[5]; Rotation = projargs[6]; System.out.println("Rotated:"); System.out.println("NB: " + NorthBound + ", WB: " + WestBound + ", rowInc: " + RowInc + ", colInc: " + ColInc + ", clat: " + CentralLat + ", clon: " + CentralLon + ", rotation: " + Rotation); break; case PROJ_LAMBERT: Lat1 = projargs[0]; Lat2 = projargs[1]; PoleRow = projargs[2]; PoleCol = projargs[3]; CentralLon = projargs[4]; ColInc = projargs[5]; System.out.println("Lambert: "); System.out.println("lat1: " + Lat1 + ", lat2: " + Lat2 + ", poleRow: " + PoleRow + ", PoleCol: " + PoleCol + ", clon: " + CentralLon + ", colInc: " + ColInc); break; case PROJ_STEREO: CentralLat = projargs[0]; CentralLon = projargs[1]; CentralRow = projargs[2]; CentralCol = projargs[3]; ColInc = projargs[4]; System.out.println("Stereo: "); System.out.println("clat: " + CentralLat + ", clon: " + CentralLon + ", cRow: " + CentralRow + ", cCol: " + CentralCol + ", colInc: " + ColInc); break; default: System.out.println("Projection unknown"); } } }