The precision parameter indicates if a 30x30min, 15x15min, or 5x5min GARS code is to be returned.
184 if (latitude == 90.0) {
185 latitude = 89.99999999999;
188 if (latitude < -90 || latitude > 90) {
191 if (longitude < -180 || longitude > 180) {
195 Double longBand = longitude + 180;
197 while (longBand < 0) {
198 longBand = longBand + 360;
200 while (longBand > 360) {
201 longBand = longBand - 360;
203 longBand = Math.floor(longBand * 2.0);
204 Integer intLongBand = longBand.intValue() + 1;
205 String strLongBand = intLongBand.toString();
207 while (strLongBand.length() < 3) {
208 strLongBand =
"0" + strLongBand;
212 char[] letterArray =
"ABCDEFGHJKLMNPQRSTUVWXYZ".toCharArray();
213 Double offset = latitude + 90;
216 offset = offset + 180;
218 while (offset > 180) {
219 offset = offset - 180;
221 offset = Math.floor(offset * 2.0);
222 Double firstOffest = offset / letterArray.length;
223 Double secondOffest = offset % letterArray.length;
224 StringBuilder sb =
new StringBuilder();
225 String strLatBand = sb.append(letterArray[firstOffest.intValue()]).append(letterArray[secondOffest.intValue()]).toString();
228 if (precision.contains(
"30")) {
229 return strLongBand + strLatBand;
233 Double latBand = (Math.floor((latitude + 90.0) * 4.0) % 2.0);
234 longBand = (Math.floor((longitude + 180.0) * 4.0) % 2.0);
235 String quadrant =
"0";
237 if (latBand < 0 || latBand > 1) {
240 if (longBand < 0 || longBand > 1) {
244 if (latBand == 0.0 && longBand == 0.0) {
246 }
else if (latBand == 1.0 && longBand == 0.0) {
248 }
else if (latBand == 1.0 && longBand == 1.0) {
250 }
else if (latBand == 0.0 && longBand == 1.0) {
256 if (precision.contains(
"15")) {
257 return strLongBand + strLatBand + quadrant;
263 double long_minutes = (longitude + 180) * 60.0;
264 double lat_minutes = (latitude + 90) * 60.0;
268 long horiz_index_30 = (long) (long_minutes / 30.0);
269 long vert_index_30 = (long) (lat_minutes / 30.0);
272 double long_remainder = long_minutes - (horiz_index_30) * 30.0;
273 double lat_remainder = lat_minutes - (vert_index_30) * 30.0;
276 long horiz_index_15 = (long) (long_remainder / 15.0);
277 long vert_index_15 = (long) (lat_remainder / 15.0);
280 long_remainder = long_remainder - (horiz_index_15) * 15.0;
281 lat_remainder = lat_remainder - (vert_index_15) * 15.0;
284 long horiz_index_5 = (long) (long_remainder / 5.0);
285 long vert_index_5 = (long) (lat_remainder / 5.0);
287 String[][] _5_minute_array = {{
"7",
"4",
"1"}, {
"8",
"5",
"2"}, {
"9",
"6",
"3"}};
289 String keypad = _5_minute_array[(int) horiz_index_5][(
int) vert_index_5];
291 return strLongBand + strLatBand + quadrant + keypad;