## com.bbn.openmap.proj.coords
Class MGRSPoint

    java.lang.Object
      com.bbn.openmap.proj.coords.UTMPoint
          com.bbn.openmap.proj.coords.ZonedUTMPoint
              com.bbn.openmap.proj.coords.MGRSPoint

public class MGRSPoint
extends ZonedUTMPoint

A class representing a MGRS coordinate that has the ability to provide the decimal degree lat/lon equivalent, as well as the UTM equivalent. This class does not do checks to see if the MGRS coordiantes provided actually make sense. It assumes that the values are valid.

Field Summary
`static int` `A`
`protected int` `accuracy` Controls the number of digits that the MGRS coordinate will have, which directly affects the accuracy of the coordinate.
`static int` `ACCURACY_1_METER` Use 5 digits for northing and easting values, for 1 meter accuracy of coordinate.
`static int` `ACCURACY_10_METER` Use 4 digits for northing and easting values, for 10 meter accuracy of coordinate.
`static int` `ACCURACY_100_METER` Use 3 digits for northing and easting values, for 100 meter accuracy of coordinate.
`static int` `ACCURACY_1000_METER` Use 2 digits for northing and easting values, for 1000 meter accuracy of coordinate.
`static int` `ACCURACY_10000_METER` Use 1 digits for northing and easting values, for 10000 meter accuracy of coordinate.
`static int[]` `BESSEL_SET_ORIGIN_COLUMN_LETTERS` The column letters (for easting) of the lower left value, per set,, for Bessel Ellipsoid.
`static int[]` `BESSEL_SET_ORIGIN_ROW_LETTERS` The row letters (for northing) of the lower left value, per set, for Bessel Ellipsoid.
`protected boolean` `DEBUG`
`static int` `I`
`protected java.lang.String` `mgrs` The String holding the MGRS coordinate value.
`protected static int` `NUM_100K_SETS` UTM zones are grouped, and assigned to one of a group of 6 sets.
`static int` `O`
`protected int[]` `originColumnLetters` The set origin column letters to use.
`protected int[]` `originRowLetters` The set origin row letters to use.
`static int` `SET_NORTHING_ROLLOVER`
`static int[]` `SET_ORIGIN_COLUMN_LETTERS` The column letters (for easting) of the lower left value, per set.
`static int[]` `SET_ORIGIN_ROW_LETTERS` The row letters (for northing) of the lower left value, per set.
`static int` `V`
`static int` `Z`

Fields inherited from class com.bbn.openmap.proj.coords.UTMPoint
`easting, northing, zone_letter, zone_number`

Constructor Summary
`MGRSPoint()` Point to create if you are going to use the static methods to fill the values in.
`MGRSPoint(float northing, float easting, int zoneNumber, char zoneLetter)` Create a MGRSPoint from UTM values;
`MGRSPoint(LatLonPoint llpoint)` Contruct a MGRSPoint from a LatLonPoint, assuming a WGS_84 ellipsoid.
`MGRSPoint(LatLonPoint llpoint, Ellipsoid ellip)` Construct a MGRSPoint from a LatLonPoint and a particular ellipsoid.
`MGRSPoint(MGRSPoint point)` Contructs a new MGRSPoint instance from values in another MGRSPoint.
`MGRSPoint(java.lang.String mgrsString)` Constructs a new MGRS instance from a MGRS String.

Method Summary
`protected char` `checkZone(char zone)` Method that provides a check for MGRS zone letters.
`protected void` `decode(java.lang.String mgrsString)` Set the UTM parameters from a MGRS string.
`protected java.lang.String` `get100kID(float easting, float northing, int zone_number)` Get the two letter 100k designator for a given UTM easting, northing and zone number value.
`protected java.lang.String` `get100kID(int setColumn, int setRow, int set)` Get the two-letter MGRS 100k designator given information translated from the UTM northing, easting and zone number.
`protected int` `get100kSetForZone(int i)` Given a UTM zone number, figure out the MGRS 100K set it is in.
`int` `getAccuracy()`
`protected float` `getEastingFromChar(char e, int set)` Given the first letter from a two-letter MGRS 100k zone, and given the MGRS table set for the zone number, figure out the easting value that should be added to the other, secondary easting value.
`java.lang.String` `getMGRS()` Get the MGRS string value - the honkin' coordinate value.
`protected float` `getMinNorthing(char zoneLetter)` The function getMinNorthing returns the minimum northing value of a MGRS zone.
`protected float` `getNorthingFromChar(char n, int set)` Given the second letter from a two-letter MGRS 100k zone, and given the MGRS table set for the zone number, figure out the northing value that should be added to the other, secondary northing value.
`protected int[]` `getOriginColumnLetters()` Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids.
`protected int[]` `getOriginRowLetters()` Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids.
`static MGRSPoint` `LLtoMGRS(LatLonPoint llpoint)` Converts a LatLonPoint to a MGRS Point, assuming the WGS_84 ellipsoid.
`static MGRSPoint` `LLtoMGRS(LatLonPoint llp, Ellipsoid ellip, MGRSPoint mgrsp)` Create a MGRSPoint from a LatLonPoint.
`static MGRSPoint` `LLtoMGRS(LatLonPoint llpoint, MGRSPoint mgrsp)` Converts a LatLonPoint to a MGRS Point.
`static void` `main(java.lang.String[] argv)`
`static LatLonPoint` `MGRStoLL(Ellipsoid ellip, float northing, float easting, int zoneNumber, char zoneLetter, LatLonPoint llp)` Create a LatLonPoint from a MGRSPoint.
`static LatLonPoint` `MGRStoLL(MGRSPoint mgrsp, Ellipsoid ellip, LatLonPoint llp)` Create a LatLonPoint from a MGRSPoint.
`static char` `MGRSZoneToUTMZone(char mgrsZone)` Convert MGRS zone letter to UTM zone letter, N or S.
`protected void` `print100kSets()` Testing method, used to print out the MGRS 100k two letter set tables.
`void` `resolve()` Create the mgrs string based on the internal UTM settings, using the accuracy set in the MGRSPoint.
`void` `resolve(int digitAccuracy)` Create the mgrs string based on the internal UTM settings, should be called if the accuracy changes.
`void` `setAccuracy(int value)` Set the number of digits to use for easting and northing numbers in the mgrs string, which reflects the accuracy of the coordinate.
`void` `setMGRS(java.lang.String mgrsString)` Set the MGRS value for this Point.
`protected void` `setOriginColumnLetters(int[] letters)` Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids.
`protected void` `setOriginRowLetters(int[] letters)` Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids.
`LatLonPoint` `toLatLonPoint()` Convert this MGRSPoint to a LatLonPoint, and assume a WGS_84 ellisoid.
`LatLonPoint` `toLatLonPoint(Ellipsoid ellip)` Convert this MGRSPoint to a LatLonPoint, and use the given ellipsoid.
`LatLonPoint` `toLatLonPoint(Ellipsoid ellip, LatLonPoint llpoint)` Fill in the given LatLonPoint with the converted values of this MGRSPoint, and use the given ellipsoid.
`java.lang.String` `toString()` Returns a string representation of the object.

Methods inherited from class com.bbn.openmap.proj.coords.ZonedUTMPoint
`getLetterDesignator, ZonedUTMtoLL`

Methods inherited from class com.bbn.openmap.proj.coords.UTMPoint
`getZoneNumber, LLtoUTM, LLtoUTM, LLtoUTM, LLtoUTM, UTMtoLL, UTMtoLL, UTMtoLL, UTMtoLL`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### NUM_100K_SETS

    protected static final int NUM_100K_SETS

  UTM zones are grouped, and assigned to one of a group of 6 sets.

  See Also:
    Constant Field Values

### SET_ORIGIN_COLUMN_LETTERS

    public static final int[] SET_ORIGIN_COLUMN_LETTERS

  The column letters (for easting) of the lower left value, per set.

### SET_ORIGIN_ROW_LETTERS

    public static final int[] SET_ORIGIN_ROW_LETTERS

  The row letters (for northing) of the lower left value, per set.

### BESSEL_SET_ORIGIN_COLUMN_LETTERS

    public static final int[] BESSEL_SET_ORIGIN_COLUMN_LETTERS

  The column letters (for easting) of the lower left value, per set,, for Bessel Ellipsoid.

### BESSEL_SET_ORIGIN_ROW_LETTERS

    public static final int[] BESSEL_SET_ORIGIN_ROW_LETTERS

  The row letters (for northing) of the lower left value, per set, for Bessel Ellipsoid.

### SET_NORTHING_ROLLOVER

    public static final int SET_NORTHING_ROLLOVER

See Also:
  Constant Field Values

### ACCURACY_1_METER

    public static final int ACCURACY_1_METER

  Use 5 digits for northing and easting values, for 1 meter accuracy of coordinate.

  See Also:
    Constant Field Values

### ACCURACY_10_METER

    public static final int ACCURACY_10_METER

  Use 4 digits for northing and easting values, for 10 meter accuracy of coordinate.

  See Also:
    Constant Field Values

### ACCURACY_100_METER

    public static final int ACCURACY_100_METER

  Use 3 digits for northing and easting values, for 100 meter accuracy of coordinate.

  See Also:
    Constant Field Values

### ACCURACY_1000_METER

    public static final int ACCURACY_1000_METER

  Use 2 digits for northing and easting values, for 1000 meter accuracy of coordinate.

  See Also:
    Constant Field Values

### ACCURACY_10000_METER

    public static final int ACCURACY_10000_METER

  Use 1 digits for northing and easting values, for 10000 meter accuracy of coordinate.

  See Also:
    Constant Field Values

### originColumnLetters

    protected int[] originColumnLetters

  The set origin column letters to use.

### originRowLetters

    protected int[] originRowLetters

  The set origin row letters to use.

### A

    public static final int A

See Also:
  Constant Field Values

### I

    public static final int I

See Also:
  Constant Field Values

### O

    public static final int O

See Also:
  Constant Field Values

### V

    public static final int V

See Also:
  Constant Field Values

### Z

    public static final int Z

See Also:
  Constant Field Values

### DEBUG

    protected boolean DEBUG

### mgrs

    protected java.lang.String mgrs

  The String holding the MGRS coordinate value.

### accuracy

    protected int accuracy

  Controls the number of digits that the MGRS coordinate will have, which directly affects the accuracy of the coordinate. Default is ACCURACY_1_METER, which indicates that MGRS coordinates will have 10 digits (5 easting, 5 northing) after the 100k two letter code, indicating 1 meter resolution.

Constructor Detail

### MGRSPoint

    public MGRSPoint()

  Point to create if you are going to use the static methods to fill the values in.

### MGRSPoint

    public MGRSPoint(java.lang.String mgrsString)

  Constructs a new MGRS instance from a MGRS String.

### MGRSPoint

    public MGRSPoint(MGRSPoint point)

  Contructs a new MGRSPoint instance from values in another MGRSPoint.

### MGRSPoint

    public MGRSPoint(float northing,
                     float easting,
                     int zoneNumber,
                     char zoneLetter)

  Create a MGRSPoint from UTM values;

### MGRSPoint

    public MGRSPoint(LatLonPoint llpoint)

  Contruct a MGRSPoint from a LatLonPoint, assuming a WGS_84 ellipsoid.

### MGRSPoint

    public MGRSPoint(LatLonPoint llpoint,
                     Ellipsoid ellip)

  Construct a MGRSPoint from a LatLonPoint and a particular ellipsoid.

Method Detail

### setMGRS

    public void setMGRS(java.lang.String mgrsString)

  Set the MGRS value for this Point. Will be decoded, and the UTM values figured out. You can call toLatLonPoint() to translate it to lat/lon decimal degrees.

### getMGRS

    public java.lang.String getMGRS()

  Get the MGRS string value - the honkin' coordinate value.

### toLatLonPoint

    public LatLonPoint toLatLonPoint()

  Convert this MGRSPoint to a LatLonPoint, and assume a WGS_84 ellisoid.

  Overrides:
    `toLatLonPoint` in class `UTMPoint`

### toLatLonPoint

    public LatLonPoint toLatLonPoint(Ellipsoid ellip)

  Convert this MGRSPoint to a LatLonPoint, and use the given ellipsoid.

  Overrides:
    `toLatLonPoint` in class `UTMPoint`

### toLatLonPoint

    public LatLonPoint toLatLonPoint(Ellipsoid ellip,
                                     LatLonPoint llpoint)

  Fill in the given LatLonPoint with the converted values of this MGRSPoint, and use the given ellipsoid.

  Overrides:
    `toLatLonPoint` in class `UTMPoint`

### toString

    public java.lang.String toString()

  Returns a string representation of the object.

  Overrides:
    `toString` in class `UTMPoint`
  Returns:
    String representation

### MGRStoLL

    public static LatLonPoint MGRStoLL(MGRSPoint mgrsp,
                                       Ellipsoid ellip,
                                       LatLonPoint llp)

  Create a LatLonPoint from a MGRSPoint.

  Parameters:
    `mgrsp` - to convert.
    `ellip` - Ellipsoid for earth model.
    `llp` - a LatLonPoint to fill in values for. If null, a new LatLonPoint will be returned. If not null, the new values will be set in this object, and it will be returned.
  Returns:
    LatLonPoint with values converted from MGRS coordinate.

### MGRStoLL

    public static LatLonPoint MGRStoLL(Ellipsoid ellip,
                                       float northing,
                                       float easting,
                                       int zoneNumber,
                                       char zoneLetter,
                                       LatLonPoint llp)

  Create a LatLonPoint from a MGRSPoint.

  Parameters:
    `ellip` - Ellipsoid for earth model.
    `llp` - a LatLonPoint to fill in values for. If null, a new LatLonPoint will be returned. If not null, the new values will be set in this object, and it will be returned.
  Returns:
    LatLonPoint with values converted from MGRS coordinate.

### LLtoMGRS

    public static MGRSPoint LLtoMGRS(LatLonPoint llpoint)

  Converts a LatLonPoint to a MGRS Point, assuming the WGS_84 ellipsoid.

  Returns:
    MGRSPoint, or null if something bad happened.

### LLtoMGRS

    public static MGRSPoint LLtoMGRS(LatLonPoint llpoint,
                                     MGRSPoint mgrsp)

  Converts a LatLonPoint to a MGRS Point.

  Parameters:
    `llpoint` - the LatLonPoint to convert.
    `mgrsp` - a MGRSPoint to put the results in. If it's null, a MGRSPoint will be allocated.
  Returns:
    MGRSPoint, or null if something bad happened. If a MGRSPoint was passed in, it will also be returned on a successful conversion.

### LLtoMGRS

    public static MGRSPoint LLtoMGRS(LatLonPoint llp,
                                     Ellipsoid ellip,
                                     MGRSPoint mgrsp)

  Create a MGRSPoint from a LatLonPoint.

  Parameters:
    `llp` - LatLonPoint to convert.
    `ellip` - Ellipsoid for earth model.
    `mgrsp` - a MGRSPoint to fill in values for. If null, a new MGRSPoint will be returned. If not null, the new values will be set in this object, and it will be returned.
  Returns:
    MGRSPoint with values converted from lat/lon.

### MGRSZoneToUTMZone

    public static char MGRSZoneToUTMZone(char mgrsZone)

  Convert MGRS zone letter to UTM zone letter, N or S.

  Parameters:
    `mgrsZone` -
  Returns:
    N of given zone is equal or larger than N, S otherwise.

### checkZone

    protected char checkZone(char zone)

  Method that provides a check for MGRS zone letters. Returns an uppercase version of any valid letter passed in.

  Overrides:
    `checkZone` in class `UTMPoint`

### setAccuracy

    public void setAccuracy(int value)

  Set the number of digits to use for easting and northing numbers in the mgrs string, which reflects the accuracy of the coordinate. From 5 (1 meter) to 1 (10,000 meter).

### getAccuracy

    public int getAccuracy()

### decode

    protected void decode(java.lang.String mgrsString)
                   throws java.lang.NumberFormatException

  Set the UTM parameters from a MGRS string.

  Parameters:
    `mgrsString` - an UPPERCASE coordinate string is expected.
  Throws:
    `java.lang.NumberFormatException`

### resolve

    public void resolve(int digitAccuracy)

  Create the mgrs string based on the internal UTM settings, should be called if the accuracy changes.

  Parameters:
    `digitAccuracy` - The number of digits to use for the northing and easting numbers. 5 digits reflect a 1 meter accuracy, 4 - 10 meter, 3 - 100 meter, 2 - 1000 meter, 1 - 10,000 meter.

### resolve

    public void resolve()

  Create the mgrs string based on the internal UTM settings, using the accuracy set in the MGRSPoint.

### get100kSetForZone

    protected int get100kSetForZone(int i)

  Given a UTM zone number, figure out the MGRS 100K set it is in.

### getOriginColumnLetters

    protected int[] getOriginColumnLetters()

  Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids. The int[] represents all of the first letters in the bottom left corner of each set box, as shown in an MGRS 100K box layout.

### setOriginColumnLetters

    protected void setOriginColumnLetters(int[] letters)

  Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids. The int[] represents all of the first letters in the bottom left corner of each set box, as shown in an MGRS 100K box layout.

### getOriginRowLetters

    protected int[] getOriginRowLetters()

  Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids. The int[] represents all of the second letters in the bottom left corner of each set box, as shown in an MGRS 100K box layout.

### setOriginRowLetters

    protected void setOriginRowLetters(int[] letters)

  Provided so that extensions to this class can provide different origin letters, in case of different ellipsoids. The int[] represents all of the second letters in the bottom left corner of each set box, as shown in an MGRS 100K box layout.

### get100kID

    protected java.lang.String get100kID(float easting,
                                         float northing,
                                         int zone_number)

  Get the two letter 100k designator for a given UTM easting, northing and zone number value.

### getEastingFromChar

    protected float getEastingFromChar(char e,
                                       int set)

  Given the first letter from a two-letter MGRS 100k zone, and given the MGRS table set for the zone number, figure out the easting value that should be added to the other, secondary easting value.

### getNorthingFromChar

    protected float getNorthingFromChar(char n,
                                        int set)

  Given the second letter from a two-letter MGRS 100k zone, and given the MGRS table set for the zone number, figure out the northing value that should be added to the other, secondary northing value. You have to remember that Northings are determined from the equator, and the vertical cycle of letters mean a 2000000 additional northing meters. This happens approx. every 18 degrees of latitude. This method does *NOT* count any additional northings. You have to figure out how many 2000000 meters need to be added for the zone letter of the MGRS coordinate.

  Parameters:
    `n` - second letter of the MGRS 100k zone
    `set` - the MGRS table set number, which is dependent on the UTM zone number.

### get100kID

    protected java.lang.String get100kID(int setColumn,
                                         int setRow,
                                         int set)

  Get the two-letter MGRS 100k designator given information translated from the UTM northing, easting and zone number.

  Parameters:
    `setColumn` - the column index as it relates to the MGRS 100k set spreadsheet, created from the UTM easting. Values are 1-8.
    `setRow` - the row index as it relates to the MGRS 100k set spreadsheet, created from the UTM northing value. Values are from 0-19.
    `set` - the set block, as it relates to the MGRS 100k set spreadsheet, created from the UTM zone. Values are from 1-60.
  Returns:
    two letter MGRS 100k code.

### print100kSets

    protected void print100kSets()

  Testing method, used to print out the MGRS 100k two letter set tables.

### getMinNorthing

    protected float getMinNorthing(char zoneLetter)
                            throws java.lang.NumberFormatException

  The function getMinNorthing returns the minimum northing value of a MGRS zone. portted from Geotrans' c Lattitude_Band_Value strucure table. zoneLetter : MGRS zone (input)

  Throws:
    `java.lang.NumberFormatException`

### main

    public static void main(java.lang.String[] argv)

Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details