All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ucar.nc2.iosp.gempak.GempakStation Maven / Gradle / Ivy

Go to download

The NetCDF-Java Library is a Java interface to NetCDF files, as well as to many other types of scientific data formats.

There is a newer version: 4.3.22
Show newest version
/*
 *
 * Copyright 1998-2009 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.StringUtil;


/**
 * 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(StringUtil.padRight((stid.trim() + std2.trim()), 8));
        builder.append(" ");
        builder.append(Format.i(stnm, 6));
        builder.append(" ");
        builder.append(StringUtil.padRight(sdesc, 32));
        builder.append(" ");
        builder.append(StringUtil.padLeft(stat.trim(), 2));
        builder.append(" ");
        builder.append(StringUtil.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(StringUtil.padLeft(swfo.trim(), 3));
        return builder.toString();
    }

    /**
     * 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;
    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy