encode method
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;
}