GeoFirestore
GeoFirestore implementation for Flutter to do location based queries with Firestore.
This is a fork of joscmw95/geo_firestore. The primary difference between the repositories is how the geo data is structured in the database (see Database Structure).
GeoFirestore
A GeoFirestore
object is used to read and write geo location data to your Firestore database and to create queries. To create a new GeoFirestore
instance you need to attach it to a Firestore collection reference:
Firestore firestore = Firestore.instance;
GeoFirestore geoFirestore = GeoFirestore(firestore.collection('places'));
Setting location data
To set the location of a document simply call the setLocation
method:
await geoFirestore.setLocation('tl0Lw0NUddQx5a8kXymO', GeoPoint(37.7853889, -122.4056973));
To remove a location and delete the location from your database simply call:
await geoFirestore.removeLocation('tl0Lw0NUddQx5a8kXymO');
Retrieving a location
If the document is not present in GeoFirestore, the callback will be called with null
. If an error occurred, the callback is passed the error and the location will be null
.
final location = await geoFirestore.getLocation('tl0Lw0NUddQx5a8kXymO');
print('Location for this document is $location.latitude, $location.longitude');
Geo Queries
GeoFirestore allows you to query all documents within a geographic area using the method getAtLocation
.
final queryLocation = GeoPoint(37.7853889, -122.4056973)
// creates a new query around [37.7832, -122.4056] with a radius of 0.6 kilometers
final List<DocumentSnapshot> documents = await geoFirestore.getAtLocation(queryLocation, 0.6);
documents.forEach((document) {
print(document.data);
});
Database Structure
GeoFirestore writes/reads two fields from Firestore objects: "g" (geohash) and "l" (latitude/longitude):
{
"g": "dr8vyzzwqd",
"l": [
43.2419,
-77.3881
]
}
This library is inspired mostly a port of GeoFirestore-Android.