getLetterRef method

String getLetterRef(
  1. int e,
  2. int n, [
  3. int digits = 10
])

Returns the letter pair reference of a given easting and northing For example, a reference with an easting of 651409 and a northing of 313177 equates to a letter pair reference of TG 51409 13177 The default amount of digits is 10

Implementation

String getLetterRef(int e, int n, [int digits = 10]) {
  if (![0, 2, 4, 6, 8, 10, 12, 14, 16].contains(digits)) {
    throw new RangeError("Invalid precision $digits!");
  }
  final e100km = (e / 100000).floor();
  final n100km = (n / 100000).floor();

  var l1 = (19 - n100km) - (19 - n100km) % 5 + ((e100km + 10) / 5).floor();
  var l2 = (19 - n100km) * 5 % 25 + e100km % 5;

  if (l1 > 7)
    l1++;
  if (l2 > 7)
    l2++;

  final letterPair = String.fromCharCode(l1 + 'A'.codeUnitAt(0)) + String.fromCharCode(l2 + 'A'.codeUnitAt(0));

  e = ((e % 100000) / math.pow(10, 5 - digits / 2)).floor();
  n = ((n % 100000) / math.pow(10, 5 - digits / 2)).floor();

  var eastingString = e.toString().padLeft(digits~/2, '0');
  var northingString = n.toString().padLeft(digits~/2, '0');

  return "$letterPair $eastingString $northingString";
}