encode method

String encode(
  1. double longitude,
  2. double latitude, {
  3. int precision = 12,
})

Encodes a given Longitude and Latitude into a String geohash

Implementation

String encode(double longitude, double latitude, {int precision = 12}) {
  var originalPrecision = precision + 0;
  if (longitude < -180.0 || longitude > 180.0) {
    throw RangeError.range(longitude, -180, 180, 'Longitude');
  }
  if (latitude < -90.0 || latitude > 90.0) {
    throw RangeError.range(latitude, -90, 90, 'Latitude');
  }

  if (precision % 2 == 1) {
    precision = precision + 1;
  }
  if (precision != 1) {
    precision ~/= 2;
  }

  final longitudeBits = _doubleToBits(
    value: longitude,
    lower: -180.0,
    upper: 180.0,
    length: precision * 5,
  );
  final latitudeBits = _doubleToBits(
    value: latitude,
    lower: -90.0,
    upper: 90.0,
    length: precision * 5,
  );

  final ret = <int>[];
  for (var i = 0; i < longitudeBits.length; i++) {
    ret.add(longitudeBits[i]);
    ret.add(latitudeBits[i]);
  }
  final geohashString = _bitsToGeoHash(ret);

  if (originalPrecision == 1) {
    return geohashString.substring(0, 1);
  }
  if (originalPrecision % 2 == 1) {
    return geohashString.substring(0, geohashString.length - 1);
  }
  return geohashString;
}