georange
Georange is a package that helps with encoding geohashes, decoding geohashes,calculating distance between 2 points and generating latitudinal and longitudinal ranges as geohashes to help with the querying of databases (Tested on Firestore Only).
Getting Started
You should ensure that you add Georange as a dependency in your flutter project.
dependencies: georange: <latest-version>
You should then run flutter packages get
Example
There is a detailed example project in the example
folder.
Initialize
Import georange
to your dart file and initialize
import 'package:georange/georange.dart'; GeoRange georange = GeoRange();
Encode LatLng
This method encodes the latitude and longitude
var encoded = georange.encode(-1.2862368,36.8195783); print(encoded);
prints kzf0tvg5n
Decode Geohash
Decode a [geohash] into a pair of latitude and longitude.
Point decoded = georange.decode("kzf0tvg5n"); print(decoded);
prints -1.2862372398376465
36.819584369659424
Generate Range
Range range = georange.geohashRange(-1.2921, 36.8219, distance: 10); print(range.lower); print(range.upper);
prints kzf05k6hh
kzf30mptu
Calculate Distance between 2 Points
Point point1 = Point(latitude: -4.0435, longitude: 39.6682); //Mombasa Point point2 = Point(latitude: -1.2921, longitude: 36.8219); // Nairobi var distance = georange.distance(point1, point2); print(distance);
prints 439.716
Distance in Kilometres
Usage with Firestore
- Add a document to firestore with a
geohash
field or a different name
final FirebaseFirestore _db; ... String myhash = georange.encode(-1.2862368,36.8195783); await _db.collection("locations").add({ "geohash":myhash, }) ...
- Query Firestore (Runs like a normal firestore query)
final FirebaseFirestore _db; GeoRange georange = GeoRange(); Range range = georange.geohashRange(currentLocation.latitude, currentLocation.longitude, distance:10); QuerySnapshot snapshot = await _db .collection("locations") .where("geohash", isGreaterThanOrEqualTo: range.lower) .where("geohash", isLessThanOrEqualTo: range.upper) .limit(10) .get();
Download encoding and decoding of geohashes package source code on GitHub
Provides the list of the opensource Flutter apps collection with GitHub repository.