/* * Copyright 1998-2015 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.gempak; import ucar.unidata.geoloc.LatLonPoint; import ucar.unidata.geoloc.LatLonPointImpl; import ucar.unidata.geoloc.Station; import ucar.unidata.util.Format; import ucar.unidata.util.StringUtil2; /** * Class to hold GEMPAK station information * * @author Don Murray */ public class GempakStation implements Station { /** * STID identifier */ public static final String STID = "STID"; /** * STNM identifier */ public static final String STNM = "STNM"; /** * SLAT identifier */ public static final String SLAT = "SLAT"; /** * SLON identifier */ public static final String SLON = "SLON"; /** * SELV identifier */ public static final String SELV = "SELV"; /** * STAT identifier */ public static final String STAT = "STAT"; /** * COUN identifier */ public static final String COUN = "COUN"; /** * STD2 identifier */ public static final String STD2 = "STD2"; /** * SPRI identifier */ public static final String SPRI = "SPRI"; /** * SWFO identifier */ public static final String SWFO = "SWFO"; /** * WFO2 identifier */ public static final String WFO2 = "WFO2"; /** * station id */ private String stid = ""; /** * station id2 */ private String std2 = ""; /** * station number */ private int stnm = GempakConstants.IMISSD; /** * state */ private String stat = ""; /** * country */ private String coun = ""; /** * wfo id */ private String swfo = ""; /** * second wfo id */ private String wfo2 = ""; /** * station latitude */ private int slat = GempakConstants.IMISSD; /** * station longitude */ private int slon = GempakConstants.IMISSD; /** * station elevation */ private int selv = GempakConstants.IMISSD; /** * priority */ private int spri; /** * row or column index */ private int index; /** * Station description */ private String sdesc = ""; /** * Create a new GEMPAK station */ public GempakStation() { } /** * Return a String representation of this * * @return a String representation of this */ public String toString() { StringBuilder builder = new StringBuilder(); builder.append(StringUtil2.padRight((stid.trim() + std2.trim()), 8)); builder.append(" "); builder.append(Format.i(stnm, 6)); builder.append(" "); builder.append(StringUtil2.padRight(sdesc, 32)); builder.append(" "); builder.append(StringUtil2.padLeft(stat.trim(), 2)); builder.append(" "); builder.append(StringUtil2.padLeft(coun.trim(), 2)); builder.append(" "); builder.append(Format.i(slat, 5)); builder.append(" "); builder.append(Format.i(slon, 6)); builder.append(" "); builder.append(Format.i(selv, 5)); builder.append(" "); builder.append(Format.i(spri, 2)); builder.append(" "); builder.append(StringUtil2.padLeft(swfo.trim(), 3)); return builder.toString(); } public int getNobs() { return -1; } /** * Set the STID * * @param value new value */ public void setSTID(String value) { stid = value; } /** * Get the STID * * @return the STID value */ public String getSTID() { return stid; } /** * Set the STNM * * @param value new value */ public void setSTNM(int value) { stnm = value; } /** * Get the STNM * * @return the STNM value */ public int getSTNM() { return stnm; } /** * Set the STAT * * @param value new value */ public void setSTAT(String value) { stat = value; } /** * Get the STAT * * @return the STAT value */ public String getSTAT() { return stat; } /** * Set the COUN * * @param value new value */ public void setCOUN(String value) { coun = value; } /** * Get the COUN * * @return the COUN value */ public String getCOUN() { return coun; } /** * Set the STD2 * * @param value new value */ public void setSTD2(String value) { std2 = value; } /** * Get the STD2 * * @return the STD2 value */ public String getSTD2() { return std2; } /** * Set the SWFO * * @param value new value */ public void setSWFO(String value) { swfo = value; } /** * Get the SWFO * * @return the SWFO value */ public String getSWFO() { return swfo; } /** * Set the WFO2 * * @param value new value */ public void setWFO2(String value) { wfo2 = value; } /** * Get the WFO2 * * @return the WFO2 value */ public String getWFO2() { return wfo2; } /** * Set the SLAT * * @param value new value */ public void setSLAT(int value) { slat = value; } /** * Get the SLAT * * @return the SLAT value */ public int getSLAT() { return slat; } /** * Set the SLON * * @param value new value */ public void setSLON(int value) { slon = value; } /** * Get the SLON * * @return the SLON value */ public int getSLON() { return slon; } /** * Set the SELV * * @param value new value */ public void setSELV(int value) { selv = value; } /** * Get the SELV * * @return the SELV value */ public int getSELV() { return selv; } /** * Set the SPRI * * @param value new value */ public void setSPRI(int value) { spri = value; } /** * Get the SPRI * * @return the SPRI value */ public int getSPRI() { return spri; } // Station interface stuff have this class extend when we // decide where the interface lives /** * Get the latitude in decimal degrees north * * @return the latitude */ public double getLatitude() { if (slat == GempakConstants.IMISSD) { return slat; } return slat / 100.; } /** * Get the longitude in decimal degrees east * * @return the longitude */ public double getLongitude() { if (slon == GempakConstants.IMISSD) { return slon; } return slon / 100.; } /** * Get the altitude in meters; missing = NaN. * * @return the altitude */ public double getAltitude() { return selv; } /** * Get the Station name. Must be unique within the collection * * @return the station id */ public String getName() { return stid.trim() + std2.trim(); } /** * Get the Station description * * @return station description */ public String getDescription() { return sdesc; } /** * Set the station description * * @param desc the description */ public void setDescription(String desc) { sdesc = desc; } /** * Get the WMO Station ID as a string * * @return the WMO id */ public String getWmoId() { String wmoID = ""; if (!(stnm == GempakConstants.IMISSD)) { wmoID = String.valueOf((int) (stnm / 10)); } return wmoID; } /** * Compare this to another * * @param o other object * @return comparison on nam */ public int compareTo(Station o) { return getName().compareTo(o.getName()); } /** * Are either lat or lon missing? * * @return true if lat or lon is missing */ public boolean isMissing() { return ((slat == GempakConstants.IMISSD) || (slon == GempakConstants.IMISSD)); } /** * Get the lat/lon location * * @return lat/lon location */ public LatLonPoint getLatLon() { return new LatLonPointImpl(getLatitude(), getLongitude()); } /** * Set the row or column index for this station * * @param rowOrCol the index */ public void setIndex(int rowOrCol) { index = rowOrCol; } /** * Get the row or column index for this station * * @return the index */ public int getIndex() { return index; } }